Linux的有关库文件:GCC | Boost C++ Libraries

1. Linux 环境变量PATH设置


Ubuntu Linux系统环境变量配置文件:
/etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

/etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量。

~/.profile :  在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

/etc/bashrc : 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

~/.bashrc : 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。



PASH环境变量的设置方法:

方法一:用户主目录下的.profile或.bashrc文件(推e/v/e/c/a/9/s/d/T/a/+/G荐)

登录到你的用户(非root),在终端输入:
$ sudo gedit ~/.profile(or .bashrc)
可以在此文件末尾加入PATH的设置如下:
export PATH=”$PATH:your path1:your path2 ...”
保存文件,注销再登录,变量生效。
该方式添加的变量只对当前用户有效。

方法二:系统目录下的profile文件(谨慎)

在系统的etc目录下,有一个profile文件,编辑该文件:
$ sudo gedit /etc/profile
在最后加入PATH的设置如下:
export PATH=”$PATH:your path1:your path2 ...”
该文件编辑保存后,重启系统,变量生效。
该方式添加的变量对所有的用户都有效。

方法三:系统目录下的 environment 文件(谨慎)

在系统的etc目录下,有一个environment文件,编辑该文件:
$ sudo gedit /etc/environment
找到以下的 PATH 变量:
PATH="<......>"
修改该 PATH 变量,在其中加入自己的path即可,例如:
PATH="<......>:your path1:your path2 …"
各个path之间用冒号分割。该文件也是重启生效,影响所有用户。
注意这里不是添加export PATH=… 。

方法四:直接在终端下输入

$ sudo export PATH="$PATH:your path1:your path2 …"  //e#v//eca//9sd.Ta+#G
这种方式变量立即生效,但用户注销或系统重启后设置变成无效,适合临时变量的设置。
sudo不一定要

注 意:方法二和三的修改需要谨慎,尤其是通过root用户修改,如果修改错误,将可能导致一些严重的系统错误。因此笔者推荐使用第一种方法。另外嵌入式 Linux的开发最好不要在root下进行(除非你对Linux已经非常熟悉了!!),以免因为操作不当导致系统严重错误。

下面是一个对environment文件错误修改导致的问题以及解决方法示例:

问题:因为不小心在 etc/environment里设在环境变量导致无法登录
提示:不要在 etc/environment里设置 export PATH这样会导致重启后登录不了系统
解决方法:
在登录界面 alt +ctrl+f1进入命令模式,如果不是root用户需要键入(root用户就不许这么罗嗦,gedit编辑会不可显示)
/usr/bin/sudo /usr/bin/vi /etc/environment
光标移到export PATH** 行,连续按 d两次删除该行;
输入:wq保存退出;
然后键入/sbin/reboot重启系统(可能会提示need to boot,此时直接power off)

补充

Linux环境变量的设置和查看方法

1. 显示环境变量HOME

  $ echo $HOME

  /home/redbooks

  2. 设置一个新的环境变量hello

  $ export HELLO="Hello!"

  $ echo $HELLO

  Hello!

  3. 使用env命令显示所有的环境变量

  $ env

  HOSTNAME=redbooks.safe.org

  PVM_RSH=/usr/bin/rsh

  Shell=/bin/bash

  TERM=xterm

  HISTSIZE=1000

  ...

  4. 使用set命令显示所有本地定义的Shell变量

  $ set

  BASH=/bin/bash

  BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")

  BASH_VERSION='2.05b.0(1)-release'

  COLORS=/etc/DIR_COLORS.xterm

  COLUMNS=80

  DIRSTACK=()

  DISPLAY=:0.0

  ...

  5. 使用unset命令来清除环境变量

  set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

  $ export TEST="Test..." #增加一个环境变量TEST

  $ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了

  TEST=Test...

  $ unset $TEST #删除环境变量TEST

  $ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

  6. 使用readonly命令设置只读变量

  如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:

  $ export TEST="Test..." #增加一个环境变量TEST

  $ readonly TEST #将环境变量TEST设为只读

  $ unset TEST #会发现此变量不能被删除

  -bash: unset: TEST: cannot unset: readonly variable

  $ TEST="New" #会发现此也变量不能被修改

  -bash: TEST: readonly variable

  环境变量的设置位于/etc/profile文件

  如果需要增加新的环境变量可以添加下属行

  export path=$path:/path1:/path2:/pahtN

  -----------------------------------------------------------------------------------------------------------------------

  1.Linux的变量种类

  按变量的生存周期来划分,Linux变量可分为两类:

  1.1 永久的:需要修改配置文件,变量永久生效。

  1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。

  2.设置变量的三种方法

  2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】

  用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

  例如:编辑/etc/profile文件,添加CLASSPATH变量

  # vi /etc/profile

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

  2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

  用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

  例如:编辑guok用户目录(/home/guok)下的.bash_profile

  $ vi /home/guok/.bash.profile

  添加如下内容:

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

  2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

  在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

  3.环境变量的查看

  3.1 使用echo命令查看单个环境变量。例如:

  echo $PATH

  3.2 使用env查看所有环境变量。例如:

  env

  3.3 使用set查看所有本地定义的环境变量。

  unset可以删除指定的环境变量。

  4.常用的环境变量

  PATH 决定了shell将到哪些目录中寻找命令或程序

  HOME 当前用户主目录

  HISTSIZE 历史记录数

  LOGNAME 当前用户的登录名

  HOSTNAME 指主机的名称

  SHELL   当前用户Shell类型

  LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

  MAIL   当前用户的邮件存放目录

  PS1   基本提示符,对于root用户是#,对于普通用户是$

 

2. linux 下查看机器是cpu是几核的

几个cpu
more /proc/cpuinfo |grep "physical id"|uniq|wc -l
每个cpu是几核(假设cpu配置相同)
more /proc/cpuinfo |grep "physical id"|grep "0"|wc -l
cat /proc/cpuinfo | grep processor
1. 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
 
2. 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc -l
 
3. 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
 
4. 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq

uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)

cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看当前操作系统发行版信息)

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
      8  Intel(R) Xeon(R) CPU            E5410   @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)

cat /proc/cpuinfo | grep physical | uniq -c
      4 physical id      : 0
      4 physical id      : 1
(说明实际上是两颗4核的CPU)

getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

如何获得CPU的详细信息:
linux命令:cat /proc/cpuinfo
用命令判断几个物理CPU,几个核等:
逻辑CPU个数:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
是否为超线程?
如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。
每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep "siblings"

 

3. linux下scp命令详解

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录.
scp命令的用处:
scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件。
scp命令基本格式:
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
scp命令的参数说明:
-1
强制scp命令使用协议ssh1
-2
强制scp命令使用协议ssh2
-4
强制scp命令只使用IPv4寻址
-6
强制scp命令只使用IPv6寻址
-B
使用批处理模式(传输过程中不询问传输口令或短语)
-C
允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。
-q
不显示传输进度条。
-r
递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher
以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config
指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file
从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit
限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option
如果习惯于使用ssh_config(5)中的参数传递方式,
-P port  注意是大写的P, port是指定数据传输用到的端口号
-S program
指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
scp命令的实际应用
1>从本地服务器复制到远程服务器
(1) 复制文件:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
实例:
scp /home/linux/soft/scp.zip root@www.mydomain.com:/home/linux/others/soft
scp /home/linux/soft/scp.zip root@www.mydomain.com:/home/linux/others/soft/scp2.zip
scp /home/linux/soft/scp.zip www.mydomain.com:/home/linux/others/soft
scp /home/linux/soft/scp.zip www.mydomain.com:/home/linux/others/soft/scp2.zip
(2) 复制目录:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
例子:
scp -r /home/linux/soft/ root@www.mydomain.com:/home/linux/others/
scp -r /home/linux/soft/ www.mydomain.com:/home/linux/others/
上面 命令 将 本地 soft 目录 复制 到 远程 others 目录下,即复制后远程服务器上会有/home/linux/others/soft/ 目录
2>从远程服务器复制到本地服务器
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
例如:
scp root@www.mydomain.com:/home/linux/soft/scp.zip /home/linux/others/scp.zip
scp www.mydomain.com:/home/linux/soft/ -r /home/linux/others/
linux系统下scp命令中很多参数都和 ssh1 有关 , 还需要看到更原汁原味的参数信息,可以运行man scp 看到更细致的英文说明. 

 

4. YUM升级

YUM升级风险比较大,如果求稳定最好是不要使用YUM升级。
1. 升级 yum 到最新版本, yum update yum。
2. 下载 centos 6的Realase rpm。 在本地安装 yum localinstall <centos 6 release rpm file>。
3. yum clean all。 清除所有的缓存。
4. 先安装一些核心的东东,如GLIbC等。
5.yum upgrade升级所有软件。
****自行解决依赖关系, Fedora上好像越来越智能,我连续几个版本升级上来,依赖冲突越来越少。
以上使用Root账号操作(或者使用Sudo取得超级用户权限),并且要切换到终端窗口。

5. Linux 安装多版本GCC allpath-lg安装


无论是作为一名Linux Geek,或是面向Linux的软件工程师,还是嵌入式Linux开发人员,我们都离不开GCC,GCC在Linux中的重要性,从 gcc-${version}-base软件包便知道其有多霸道了。而对开发人员来说,编译程序自然更离不开GCC了,并且对于有的软件包,有可能只针对 特定版本的GCC,或许是一个版本很老的GCC(因为随着GCC的成长,它更加成熟,更加标准化,以前开发的软件包,可能会依赖当时的GCC版本,虽然能 通过当时的GCC编译,然而却不能通过当前较新版本的编译检察),于是,我们不得不使用不同版本的GCC编译器。
而我最近由于要安装客户的allpath-lg,集群本身的gcc
[root@mu01 ~]# gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)
而allpth-lg需要4.7以上版本的gcc,而本身机器由于配置好了所有的环境信息,不便于去升级其本身版本的gcc和库文件,所以只能琢磨安装另外一个新版本的gcc,将其安装在所有机器可见的/opt/soft目录下。
1、首先下载gcc-4.8.0
tar -xvzf gcc-4.8.0.tar.gz
2、创建gcc的目的安装路径
mkdir /opt/soft/gcc-4.8.0
3、准备安装前的工作
cd gcc-4.8.0
此处用来下载必要的gmp\mpfr\mpc等库
./contrib/download_prerequisites 
cd ..
mkdir gcc-build
4、开始编译
cd gcc-build
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix=/opt/soft/gcc-4.8.0
make -4j
make install
至此大功告成,开始编译allpath-lg
1、下载
wget ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/LATEST_VERSION.tar.gz
2、解压
tar -zxvf LATEST_VERSION.tar.gz
3、创建指定的allpath-lg安装路径
mkdir /opt/soft/allpath-lg
4、安装
./configure CC=/opt/soft/gcc-4.8.0/bin/gcc CXX=/opt/soft/gcc-4.8.0/bin/g++ prefix=/opt/soft/allpath-lg
make
make install

 

5,linux中gzip和gunzip命令的用法:


Linux下压缩保留源文件的方法:
gzip –c filename > filename.gz


Linux下解压缩保留源文件的方法:
gunzip –c filename.gz > filename
gunzip的用法
1.作用
gunzip命令作用是解压文件,使用权限是所有用户。
2.格式
gunzip [-acfhlLnNqrtvV][-s ][文件...]
或者gunzip [-acfhlLnNqrtvV][-s ][目录]
3.主要参数
-a或--ascii:使用ASCII文字模式。
-c或--stdout或--to-stdout:把解压后的文件输出到标准输出设备。
-f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在,以及该文件是否为符号连接。
-h或--help:在线帮助。
-l或--list:列出压缩文件的相关信息。
-L或--license:显示版本与版权信息。
-n或--no-name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理。
-N或--name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
-q或--quiet:不显示警告信息。
-r或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理。
-S或--suffix:更改压缩字尾字符串。
-t或--test:测试压缩文件是否正确无误。
-v或--verbose:显示指令执行过程。
-V或--version:显示版本信息。
4.说明
gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为“.gz”。事实上,gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。

6. rpm包安装到哪里了?

rpm -ql <name of the package>

7. 两台Linux之间的硬盘挂载

linux之间实现共享文件夹挂载实例:

一、linux存储服务器(10.89.8.5 域名:www.cmz.com),linux客户端服务器(10.89.0.3 域名:www.boyunt.com)

 a、存储服务器配置如下:

1、[wds@www.cmz.com ~]#mkdir /mnt/mm

2、[wds@www.cmz.com ~]#chmod 777 /mnt/mm

3、[wds@www.cmz.com ~]#vi /etc/exports      -------编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。
在该文件里添加如下内容:
/mnt/mm  *(rw,)              *表示所有的客户机都可以挂接此目录,  rw表示挂接此目录的客户机对该目录有读写的权力, 
4、[wds@www.cmz.com ~]#service nfs restart    ----开启nfs服务

5、[wds@www.cmz.com ~]#service nfs status     ----检查nfs服务是否开启

6、[wds@www.cmz.com ~]#service rpcbind restart  ----开启端口映射服务

 
b、客户端服务器配置如下:

1、[wds@www.boyunt.com ~]#mkdir  /home/jj

2、[wds@www.boyunt.com ~]#mount -t nfs 10.89.8.5:/mnt/mm  /home/jj

3、[wds@www.boyunt.com ~]#df     ---验证挂载目录是否成功

二、[wds@localhost ~]# exportfs [-aruv] 参数:

  参数说明:

  -a: 全部挂载(或者卸载)/etc/exports 文件的设置

  -r: 从新挂载/etc/exports 里设置,此外,同步更新/etc/exports 及/var/lib/nfs/xtab的内容

  -u: 卸载某一目录

  -v: 在导出时,将共享目录显示在屏幕上

  例如:
[wds@localhost ~]# exportfs rv 全部从新导出一次

[wds@localhost ~]# exportfs au 全部卸载掉

 

   三、Linux 服务器端NFS 服务器的配置

  以root 身份登陆Linux 服务器,编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。

  执行如下命令编辑文件/etc/exports:

  # vi /etc/exports

  在该文件里添加如下内容:

  /home/work 192.168.0.*(rw,sync,no_root_squash)

  然后保存退出。

  添加的内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。

  /home/work 也称为服务器输出共享目录。

  括号内的参数意义描述如下:

  rw:读/写权限,只读权限的参数为ro;

  sync: 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;

  no_root_squash:表示允许挂接此目录的客户机享有该主机的 root 身份。

 

  NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是……不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。
其实,NFS运行在SUN的RPC(Remote Procedure
Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS Server也可以看作是RPC
Server。正
因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定。比如:某个NFS
Client发起NFS服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到port
number(不仅是NFS,所有的RPC服务程序启动之前,都需要先设定好portmap)。
注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。

使用umount命令可以卸载文件系统。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:
1.      # umount -v /dev/sda1          通过设备名卸载  
2.      /dev/sda1 umounted  
3.      # umount -v /mnt/mymount/      通过挂载点卸载  
4.      /tmp/diskboot.img umounted
如果设备正忙,卸载即告失败。卸载失败的常见原因是,某个打开的shell当前目录为挂载点里的某个目录:
1.      # umount -v /mnt/mymount/  
2.      umount: /mnt/mymount: device is busy  
3.      umount: /mnt/mymount: device is busy
有时,导致设备忙的原因并不好找。碰到这种情况时,可以用lsof列出已打开文件,然后搜索列表查找待卸载的挂载点:
1.      # lsof | grep mymount         查找mymount分区里打开的文件  
2.      bash   9341  francois  cwd   DIR   8,1   1024    2 /mnt/mymount
从上面的输出可知,mymount分区无法卸载的原因在于,francois运行的PID为9341的bash进程。
对付系统文件正忙的另一种方法是执行延迟卸载:
1.      # umount -vl /mnt/mymount/     执行延迟卸载
延迟卸载(lazy unmount)会立即卸载目录树里的文件系统,等到设备不再繁忙时才清理所有相关资源。

8,拷贝文件夹

LINUX中,在/home目录下,如何复制/home/user下的sub1目录所有内容,并命名为tree?
cp -r /user/sub1 /tree 

9. 如何查看fasta文件有包含多少序列?

grep -c "^>" s1.fa s2.fa  


9. CMake安装

链接

CMake安装和使用

(2012-05-03 13:07:49)
转载
标签:

cmake

安装

编译

metis-5.0

windows

unix

linux

教育

分类: linux学习
下载:

在安装metis-5.0时,安装说明中要求必须安装CMake2.8版本,下面是CMake的安装和使用方法 ,记录下来以便以后学习。

在网址 http://www.cmake.org/ 下载你所需要的CMake源码包cmake-2.8.8.tar..gz(版本不同,压缩包后缀不同),分为Unix/linux版本 和 windows版本 。

1、安装
有好几种安装CMake 的方法,因你所用的平台而异。
(1)从源码安装

Windows
在CMake 下载页面 上有已编译好的二进制包。它提供的是一个可执行的安装程序。你还可以下载源码包并从源码包编译CMake。CMake下载页面还提供了已释出的源码和访问CVS的指令。

为了从源码树编译CMake,你必须先要安装最新的CMake二进制版本,因为要用它来编译源码树。一旦装好了二进制版本的CMake,你就可以像 编译其他项目一样使用CMake编译CMake了。一般来说,这意思是你要选择CMake源码目录作为源目录,然后再指定编译出来的可执行程序结果的位置。


Linux, Mac OSX, UNIX & Cygwin
在CMake 下载页面 上有许多UNIX平台上已经编译好的二进制包。

下面有几种从源码树编译CMake的方法:

解压:tar xvf cmake-2.8.8.tar.gz

进入解压目录:cd cmake-2.8.8

进行如下操作:(选择适合自己的操作步骤)

如果还没有安装CMake,源码树中提供了一个 bootstrap 脚本:
./bootstrap
make
make install
(注:make install 一步是可选的,CMake 可以在编译目录下运行。)

一个已经安装了的CMake也可以用于编译新版本的CMake:
cmake .
make
make install
(注:make install 一步是可选的,CMake 可以在编译目录下运行。)

在UNIX上,如果你不是使用的GNU C++编译器,你要告诉bootstrap 脚本你想用哪个编译器。这可以在运行configure命令前通过设置CC和CXX环境变量完成。例如,在一个带有7.3X编译器的SGI平台上,你可以像下面这样编译CMake:
(setenv CXX CC; setenv CC cc; ./bootstrap)
make
make install
要查看bootstrap脚本的详细参数,请执行 ./bootstrap –help

(2)从二进制安装

sudo apt-get install cmake


2、cmake 运行

1)运行cmake with GUI

如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI

在源码目录中运行ccmake .,生成的二进制文件存放在源码目录下

当然也可以在其他目录下运行ccmake,只是要指定你想编译的源码的路径

ccmake的使用

当我们在源码目录下运行ccmake . 时,终端将显示如下:

 

当我们键入c时,ccmake将编译

当我们键入方向键时,可以选择cache entry

当我们键入enter时,可以编辑cache entry

当我们键入g时,将生成Makefile,然后退出

当我们键入h时,将弹出帮助文档

当我们键入q时,将退出ccmake

当我们键入t时,可以打开或关闭advanced cache entry

2)运行cmake from the command line

如果源码没有太多的选项(在CMakeCache.txt文件中),可以只用cmake .来产生Makefile

如果源码选项太多,比如VTK,可以把参数-i传递给cmake,如:cmake -i .

cmake将让你为每一个cache file文件中的选项指定一个值,也能让你增加新的选项到文件CMakeCache.txt中,或者使用ccmake,或者使用CMakeSetup

当然,也可以传递设置选项的参数给cmake,如:

    cmake -DVARIABLE:TYPE=VALUE .


3、  CMake cache

cmake第一次运行的时候,它将产生一个文件叫CMakeCache.txt,该文件可以被看作一个配置文件,它里面的内容就像传递给configure命令的参数集,CMake GUI可以帮你很容易修改它,当然也可以直接对该文件做修改;如果你的CMakeLists.txt文件做过较大幅度的修改,你需要从cache中删除相关的选项,如果你还没有手动编辑过cache文件,在你重新运行cmake之前需删除它。

4、    Cmake语法

1)基本概念

cmake使用Cmake  dfjs;dfasfLists.txt文件,该文件用include或者add_subdirectory命令来增加额外的输入文件。

注释行以#开头到该行结尾

命令是由命令名,加括号,括号中的参数用空白隔开,它可以是内建的命令如add_library,或者用户定义的宏或函数

所有的空格,包含空白符,空行,tabs,当然除了用来隔开参数的空白,都被忽略

2)变量

。字符串

一个字符串是用双引号括起来的,也可以被分隔在多行,如:

set(MY_STRING “this is a string with a

newline in

it”)

在一个字符串中也可以用变量,如:

set(VAR “

hello

world

)

当执行message(“/${VAR}=${VAR}”)后,将打印:

${VAR}=

hello

world

也可以message(“/n/thello world”)后,将打印:

hello world

。字符串列表

cmake基本的数据类型为字符串,也可以支持字符串列表,如:

set(VAR a;b;c)set(VAR a b c)将把VAR设置为字符串列表

要使用VAR,可以用${VAR},如:

command(${VAR}),它相当于command(a b c)

如果想把一个字符串列表作为单个参数传递给命令,可以用双引号,如:

command(“${VAR}”),相当于command(“a b c”)

3)流程控制

。判断

if(var)

some_command(...)

        endif(var)

var的值不为empty0NNOOFFFALSENOTFOUND

NOTFOUNDsome_command(...)将被执行

。循环

set(VAR a b c)

foreach(f ${VAR})

message(${f})

        endforeach(f)

用变量f依次代替abc执行message()

。宏和函数定义

定义一个宏hello

macro(hello MESSAGE)

message(${MESSAGE})

        endmacro(hello)

调用宏hello

hello(“hello world”)

定义一个函数hello

function(hello MESSAGE)

message(${MESSAGE})

        endfunction(hello)

   (4)正则表达式

很多CMake命令如if,会使用正则表达式作为参数,下面是正则表达式会用到的特殊字符:

^:匹配一行或一个字符串的开头

$:匹配一行或一个字符串的结尾

.:匹配单个字符

[]:匹配方括号中任意字符或字符串

[^]:匹配不是方括号中的字符或字符串

[-]:匹配在dash任意一边的字符

*:匹配0或多个先前的字符序列

+:匹配1或多个先前的字符序列

?:匹配01个先前的字符序列

():保存一个匹配的表达式,以便以后使用

参考:http://www.cmake.org/cmake/help/documentation.html

10. Boost libraries 安装

Linux下boost库的安装
Linux下boost库的安装
 
  最近由于编译一个程序用到了C++的boost库,所以便安装了这个库。但是,其中遇到了一些小问题。所以记录下来,以供别人参考。
         首先说一下我的环境:Ubuntu 12.04 32bit,  gcc 4.6.3
         其实在ubuntu下,可以用一下命令直接安装
sudo apt-get install libboost-dev 
          但是,我这样安装以后,编译程序时出现了很多错误,而且都是系统文件的错误。我开始以为是我的boost库版本不对,后来换了好几个版本,都出现了同样的 问题。后来,自己编译了一个boost.1.42。然后程序就顺利通过了。后来想了一下原因,可能是因为从上面的命令默认安装的boost在编译打包时没 有开启mpi这个功能。而我的程序需要这个功能。以下说一下安装的简要步骤(我编译了boost1.42和boost1.50,两者安装方法相同,以后者 为例):  www.2cto.com  
 1.下载boost1.53源文件 (93.56M)  http://sourceforge.net/projects/boost/files/latest/download?source=dlp
 2.解压后,进入boost_1_53_0目录,执行:./bootstrap.sh
 3.(重点)修改  tools/build/v2/user-config.jam文件,在最后面加上一行“using mpi ;”(注意mpi后面有个空格,       然后一个分号 )
  4. 执行: ./b2
  5. 执行:sudo ./b2  install
      以上便是全部安装过程,因为网上提到的比较多,所以此处从略。重点想提的是第三步,务必记得。不过,如果你的程序不需要mpi这个功能,那也就不重要了。 应用默认设置即可。而且,第四步,执行时可以在后面家prefix参数,如果不加,装好后,默认的头文件在/usr/local/include /boost目录下。库文件在/usr/local/lib/目录下。默认不用修改。
       如果编译好程序后,在运行时提示无法加载某个库文件,则把/usr/local/lib下的所有boost的库文件mv到/usr/lib目录下就可以了。

11. 如何检查 Boost Libraries的版本号

#include <boost/version.hpp>  
#include <iostream>  
#include <iomanip>    
using namespace std;   
 int main()  {      
cout << "Boost version: " << BOOST_LIB_VERSION << endl;      
return 0;  }

Save the above code as a cpp file. example boost.cpp. Then compile it.

   $ g++ boost.cpp     $ ./a.out

Then you will get your boost library version displayed on your terminal.

12. 如何在出现某个字符串的行末尾加一个字符串

sed -i '/>Contig/ s/$/.1/' wenjian # 没有-i不改变文件

 

13. linux查看文件的某一行命令

查看文件的第90行到100行,
sed -n 90,100p' wang.txt
如果查看某一行用
sed -n '100,1p' wang.txt即可
sed -n 'a,bp' song.txt读取自第a行到第b行的数据
if(a > b ) return 第a行

 

14. 如何在一文件中查找一字符串,然后删除该行内该字符串后的文字

sed 's/\(.*\)123.*/\1/g' test.txt #123为查找的字符串

15. /dev/shm 是什么,如何修改?  

默认系统就会加载/dev/shm,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样. 象虚拟磁盘一样,tmpfs可以使用您的RAM,但它也可以使用您的交换分区来存储.而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了.
 
tmpfs有以下优势:
1.tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的tmpfs文件系统会完全驻留在RAM 中,读写几乎可以是瞬间的.
2.tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的.所以有必要做一些脚本做诸如加载,绑定的操作.通常使用/dev/shm作共享内 (shm_open,shm_unlink)。 /dev/shm是个临时文档系统(tmpfs),能够从/etc/fstab中mount。因此,支持标准的参数例如"size",能够用来增加或减少 在/dev/shm上的tmpfs大小.(默认的,他的大小是系统RAM的一半)
查看tmpfs的情况
[root@hxl shm]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             8.7G  7.3G  1.1G  88% /
none                  505M     0  505M   0% /dev/shm
/dev/sdb1             9.9G  7.9G  1.6G  84% /u01
/dev/sdc1              16G  2.1G   13G  14% /u02
[root@hxl shm]# top
top - 01:35:37 up 17 min,  3 users,  load average: 0.74, 0.70, 0.73
Tasks: 138 total,   2 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s): 24.8% us, 14.5% sy,  2.0% ni, 55.4% id,  2.8% wa,  0.4% hi,  0.0% si
Mem:   1033876k total,  1011012k used,    22864k free,    33540k buffers
Swap:  1269124k total,        0k used,  1269124k free,   593320k cached
可以看出/dev/shm的大小是系统物理内存的一半.
 
调整/dev/shm的大小
1)查看大小
[root@hxl shm]# df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
none                  505M     0  505M   0% /dev/shm
 
2)修改大小
vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
 
3)重新挂载
umount /dev/shm
mount /dev/shm
 
4)查看修改后的大小
df -h /dev/shm 

 

16. 查看目录空间

du -sh /data,

 

17. linux中的硬链接和符号链接 (软链接)  

18. linux 链接的使用 创建和删除符号连接(软、硬链接)

19. 统计文件的行数

wc -l test.log

grep -Fc "" test.log

sed -n "$=" test.log

awk 'END{print NR}' test.log

20. linux 更改gcc版本

安装了gcc-3.4.x版本和gcc-4.2.x后,如何使得使用特定的gcc版本

改成gcc-3.4版本
rm /usr/bin/gcc
ln -s /usr/bin/gcc-3.4 /usr/bin/gcc

改成gcc-4.2版本
rm /usr/bin/gcc
ln -s /usr/bin/gcc-4.2 /usr/bin/gcc
gcc版本 问题解决
2009-01-14 14:19
保证你的 Ubuntu 8.10 安装了如下的软件:
Bison   flex   build-essential   patch   libncurses5-dev
其中 Bison   flex   是本人亲试必需软件,这些软件一定要事先安装好,否则可能会出错,然后只能重新编译
ls /usr/bin/gcc* -l 可查看gcc版本问题

本方案所选软件包如下:
crosstool-0.43
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
binutils-2.16.1
linux-libc-headers-2.6.12.0
linux-2.6.27.6

可用的搭配方案可参考《 Crosstool build results 》

1. Ubuntu 8.10 默认安装的 gcc 版本为4.3.2,根据多人反映,用此版本编译会出错,目前不宜选用
于是选择了 gcc-4.1.1 ,但并不需要卸载 gcc-4.3.2
在 Ubuntu 8.10 不要去下 gcc-4.1.1 的源码来编译(自行下载源码编译会发现遇到更多的问题),直接在终端输入
sudo apt-get install gcc-4.1
安装就可以了

然后是
sudo rm /usr/bin/gcc          (删除GCC,它只是个到gcc-4.3.2的软链接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc          (建立GCC到gcc-4.1的软链接)

编译完成后可以运行以下命令修改回来
sudo rm /usr/bin/gcc                            
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc

21. gz文件解压

不是tar。gz

gzip -c a > b

22. linux下cat命令详解

cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename  
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3
 
test.txt文件扔进垃圾箱,赋空值test.txt
cat /dev/null > /etc/test.txt  
 

23. 新硬盘挂载

一、过程步骤
1、#kudzu                          //检测新硬件,这一步必须!
2、#fdisk -l                         //查看是否找到新的硬盘,查看硬盘代号。
3、#fdisk /dev/sdb             //为新硬盘分区,例如分成sdb1
#mkfs.ext3 /dev/sdb1    //把新硬盘格式化成ext3格式
4、#mkdir /disk2                    //创建新的挂载点
5、#mount /dev/sdb1 /disk2/   //手动挂载分区,把硬盘挂到/disk2目录下。
6、#vi /etc/fstab
/dev/sdb1 /disk2 ext3 auto 1 2     //设置为开机自动挂载分区。

二.详细过程

2、
查看硬盘代号
[root@AMD-LINUX ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×0007d856

Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1305 10281600 8e Linux LVM

Disk /dev/sdb: 2147 MB, 2147483648 bytes <=新硬盘
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×00000000

Disk /dev/sdb doesn’t contain a valid partition table

Disk /dev/dm-0: 9395 MB, 9395240960 bytes
255 heads, 63 sectors/track, 1142 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×00000000

Disk /dev/dm-0 doesn’t contain a valid partition table

Disk /dev/dm-1: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×30307800

Disk /dev/dm-1 doesn’t contain a valid partition table
3、fdisk 分区
[root@AMD-LINUX ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0×623223a1.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.

Warning: invalid flag 0×0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p <=显示信息

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×623223a1

Device Boot Start End Blocks Id System

Command (m for help): n <=新建分区
Command action
e extended
p primary partition (1-4)
p <=新建主分区
Partition number (1-4): 1 <=分区号为1,即/dev/sdb1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261

Command (m for help): p <=显示分区信息

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×623223a1

Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 83 Linux

Command (m for help): w <=保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
4、创建挂载点
[root@AMD-LINUX ~]# mkdir /disk2

[root@AMD-LINUX ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×0007d856

Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1305 10281600 8e Linux LVM

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×623223a1

Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 83 Linux

Disk /dev/dm-0: 9395 MB, 9395240960 bytes
255 heads, 63 sectors/track, 1142 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×00000000

Disk /dev/dm-0 doesn’t contain a valid partition table

Disk /dev/dm-1: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0×30307800

Disk /dev/dm-1 doesn’t contain a valid partition table

[root@AMD-LINUX ~]# mke2fs -j /dev/sdb1
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524112 blocks
26205 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.


5、设置为开机自动挂载分区
[root@AMD-LINUX ~]# vi /etc/fstab
/dev/sdb1     /disk2      ext3       auto     1 2

6、手动挂载分区
[root@AMD-LINUX ~]# mount /dev/sdb1 /disk2/

24. /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决

http://www.ithov.com/linux/130504.shtml

25. 从centos 6.3升级到centos 6.4

http://www.cnblogs.com/VincentHome/archive/2013/04/09/3011351.html

26. CentOS 6.3 编译安装GCC 4.7.2

(1) http://www.linuxidc.com/Linux/2012-12/76635.htm

(2) http://www.linuxidc.com/Linux/2012-12/76635p2.htm

27. Linux下*.tar.bz2等文件如何解压

如果tar不支持j这个参数就先用
bzip2 -d xxx.tar.bz2
把它解压成.tar文件,然后再用
tar xvf xxx.tar
拆包。
压缩解压
linux下怎么解后缀名是gzip的文件?
1.以.a为扩展名的文件:
#tar xv file.a
2.以.z为扩展名的文件:
#uncompress file.Z
3.以.gz为扩展名的文件:
#gunzip file.gz
4.以.bz2为扩展名的文件:
#bunzip2 file.bz2
5.以.tar.Z为扩展名的文件:
#tar xvZf file.tar.Z 
或 #compress -dc file.tar.Z | tar xvf -
6.以.tar.gz/.tgz为扩展名的文件:
#tar xvzf file.tar.gz 
或 gzip -dc file.tar.gz | tar xvf -
7.以.tar.bz2为扩展名的文件:
#tar xvIf file.tar.bz2 
或 bzip2 -dc file.tar.bz2 | xvf -
8.以.cpio.gz/.cgz为扩展名的文件:
#gzip -dc file.cgz | cpio -div
9.以.cpio/cpio为扩展名的文件:
#cpio -div file.cpio 
或cpio -divc file.cpio
10.以.rpm为扩展名的文件安装:
#rpm -i file.rpm
11.以.rpm为扩展名的文件解压缩:
#rpm2cpio file.rpm | cpio -div
12.以.deb为扩展名的文件安装:
#dpkg -i file.deb
13.以.deb为扩展名的文件解压缩:
#dpkg-deb --fsys-tarfile file.deb | tar xvf - ar p 
file.deb data.tar.gz | tar xvzf -
14.以.zip为扩展名的文件:
#unzip file.zip
在linux下解压Winzip格式的文件
要是装了jdk的话,可以用jar命令;还可以使用unzip命令。
直接解压.tar.gz文件
xxxx.tar.gz文件使用tar带zxvf参数,可以一次解压开。XXXX为文件名。 例如:
$tar zxvf xxxx.tar.gz 各种压缩文件的解压(安装方法)

文件扩展名 解压(安装方法)

.a ar xv file.a
.Z uncompress file.Z
.gz gunzip file.gz
.bz2 bunzip2 file.bz2
.tar.Z tar xvZf file.tar.Z
compress -dc file.tar.Z | tar xvf -
.tar.gz/.tgz tar xvzf file.tar.gz
gzip -dc file.tar.gz | tar xvf -
.tar.bz2 tar xvIf file.tar.bz2
bzip2 -dc file.tar.bz2 | xvf -
.cpio.gz/.cgz gzip -dc file.cgz | cpio -div
.cpio/cpio cpio -div file.cpio
cpio -divc file.cpio
.rpm/install rpm -i file.rpm
.rpm/extract rpm2cpio file.rpm | cpio -div
.deb/install dpkg -i file.deb
.deb/exrtact dpkg-deb --fsys-tarfile file.deb | tar xvf -
ar p file.deb data.tar.gz | tar xvzf -
.zip unzip file.zip 

bzip2 -d myfile.tar.bz2 | tar xvf

tar xvfz myfile.tar.bz2

x 是解压
v 是复杂输出
f 是指定文件
z gz格式

gzip
gzip[选项]要压缩(或解压缩)的文件名
-c将输出写到标准输出上,并保留原有文件。
-d将压缩文件压缩。
-l对每个压缩文件,显示下列字段:压缩文件的大小,未压缩文件的大小、压缩比、未压缩文件的名字
-r递归式地查找指定目录并压缩或压缩其中的所有文件。
-t测试压缩文件是正完整。
-v对每一个压缩和解压缩的文件,显示其文件名和压缩比。
-num-用指定的数字调整压缩的速度。
举例:
把/usr目录并包括它的子目录在内的全部文件做一备份,备份文件名为usr.tar
tar cvf usr.tar /home
把/usr 目录并包括它的子目录在内的全部文件做一备份并进行压缩,备份文件名是usr.tar.gz
tar czvf usr.tar.gz /usr
压缩一组文件,文件的后缀为tar.gz
#tar cvf back.tar /back/
#gzip -q back.tar
or
#tar cvfz back.tar.gz /back/
释放一个后缀为tar.gz的文件。
#tar zxvf back.tar.gz
#gzip back.tar.gz
#tar xvf back.tar

tar的使用方法:

1:压缩一组文件为tar.gz后缀
tar cvf backup.tar /etc
或gzip -q backup.tar.gz

2:释放一个后缀为tar.gz的文件
gunzip backup.tar.gz
或tar xvf backup.tar

3:用一个命令完成压缩
tar cvf -/etc | gzip -qc >; backup.tar.gz

4:用一个命令完成释放
gunzip -c backup.tar.gz | tar xvf -

5:如何解开ta.Z的文件
tar xvfz backup.tar.Z
或uncompress backup.tar.Z
tar xvf backup.tar

6:如何解开.tgz文件
gunzip backup.tgz

7:如何压缩和解压缩.bz2的包
bzip2 /etc/smb.conf 这将压缩文件smb.conf成smb.conf.bz2
bunzip2 /etc/smb.conf.bz2 在当前目录下还原smb.conf.bz2为smb.conf

28. Linux下如何释放内存

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。

Linux系统的缓存机制是相当先进的,他会针对 dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分 缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存

知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

29. 如何查看目录,文件所占空间

du -h --max-depth=1

#sync

接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:

#echo 3 > /proc/sys/vm/drop_caches

此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

要查询当前缓存释放的参数,可以输入下面的指令:

#cat /proc/sys/vm/drop_cach

29. 重装系统后SSH连接出此案错误信息:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

办法:运行下列命令

#mv ~/.ssh/known_hosts /tmp

 

30. mysql密码破解

在etc/my.cnf的[mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
mysqluse mysql;
mysqlupdate user set password=password('新密码') WHERE User='root';
运行之后最后去掉etc/my.cnf中的skip-grant-tables,重启mysqld即可


31. Linux 给用户赋予某文件夹操作权限

问题:我有个keesail用户  我想让它有读写  local文件夹的权限 应该切换到root账户下 用什么命令赋予keesail权限呢

答案:

chown -R keesail:keesail ./local
赋予local目录给keesail权限
chmod 760 ./local
赋予local目录读写权限给keesail,别的用户对这个目录没有任何权限。

32. 配置无需密码ssh访问的集群

#生成Master本地的秘钥
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

#将Master的秘钥拷贝给Slaver
$ scp -r /root/.ssh/ root@192.168.229.73:/root/
$ scp -r /root/.ssh/ root@192.168.229.74:/root/
$ scp -r /root/.ssh/ root@192.168.229.75:/root/

33. linux添加新用户并赋予sudo执行权限

 

34.网卡配置

步骤1、配置/etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。

 CentOS6.4 下的ifcfg-eth0的配置详情:

 [root@Jeffery]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

UUID=5ff155a4-9a33-4224-8ae0-706eadf7fa3c

HWADDR=00:15:5D:A1:58:00

ONBOOT=no

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=202.205.161.XXX

PREFIX=23

GATEWAY=202.205.XXX.XX

DNS1=202.205.XXX.XX

DNS2=219.142.XXX.XXX

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0"

 前面六行是系统自带的,后面就是手动添加的。

这样设置后,记得重启网卡:

[root@Jeffery]# /etc/init.d/network stop

[root@Jeffery]# /etc/init.d/network start

[root@Jeffery]# /etc/init.d/network restart

 重启网卡后还得激活eth0   [root@Jeffery]# ifup eth0     #启动网络

 当计算机重启时,网络是不会自动连接的,还得需要配置ifcfg-eth0文件使计算机重启后自动激活网卡并连接互联网

 [root@Jeffery]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

找到ONBOOT=no 这一项,将参数改为yes即可。 

如果在图形化界面下,设置 管理启动项服务的话 可以使用ntsysv 命令打开管理窗口 

行了,现在就可以PING得通网关了,如果还得上网,还必须设置DNS。设置DNS就详见步骤2

步骤2、修改dns

[root@localhost ~]# vi /etc/resolv.conf

在里面添加二个dns:

nameserver 202.205.XXX.XXX

nameserver 219.142.XXX.XXX 

步骤2已经在上面设置过了我的。 

OK,大攻告成,即可上网了!!!!

 以下是参考,如果按上面步骤不行,可以详细看以下内容:

网络接口配置文件

[root@Jeffery]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)

TYPE=Ethernet       #网卡类型

DEVICE=eth0         #网卡接口名称

ONBOOT=yes          #系统启动时是否自动加载

BOOTPROTO=static    #启用地址协议 --static:静态协议 --bootp协议 --dhcp协议

IPADDR=192.168.1.11      #网卡IP地址

NETMASK=255.255.255.0    #网卡网络地址

GATEWAY=192.168.1.1      #网卡网关地址

DNS1=10.203.104.41       #网卡DNS地址

HWADDR=00:0C:29:13:5D:74 #网卡设备MAC地址

BROADCAST=192.168.1.255  #网卡广播地址

重新导入ifcfg-eth0网络配置文件

[root@Jeffery]# /etc/init.d/network reload

Shutting down interface eth0:                             [ OK ]

Shutting down loopback interface:                         [ OK ]

Bringing up loopback interface:                           [ OK ]

Bringing up interface eth0:                               [ OK ]

网卡接口关闭与激活

[root@Jeffery]# ifdown eth0   #关闭网络

[root@Jeffery]# ifup eth0     #启动网络

网络服务启动与关闭

方法一:

[root@localhost ~]# service network stop    #关闭网络服务

[root@localhost ~]# service network start   #启动网络服务

[root@localhost ~]# service network restart #重启网络服务

方法二:

[root@localhost ~]# /etc/init.d/network stop

[root@localhost ~]# /etc/init.d/network start

[root@localhost ~]# /etc/init.d/network restart

网卡状态查询

[root@localhost ~]# service network status

Configured devices:

lo eth0

Currently active devices:

lo eth0

临时配置网卡信息,无需重启。

[root@localhost ~]# ifconfig eth0 10.1.1.10 netmask 255.0.0.0

查看网卡接口信息,默认列出所有接口

[root@localhost ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:13:5D:74

          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe13:5d74/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:413 errors:0 dropped:0 overruns:0 frame:0

          TX packets:572 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:47701 (46.5 KiB)  TX bytes:64842 (63.3 KiB)

          Base address:0x2000 Memory:d8920000-d8940000

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:407 errors:0 dropped:0 overruns:0 frame:0

          TX packets:407 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:70759 (69.1 KiB)  TX bytes:70759 (69.1 KiB)

查看当前路由及网关信息

[root@localhost ~]# netstat -r

Kernel IP routing table

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface

192.168.1.0     *               255.255.255.0   U         0 0          0 eth0

169.254.0.0     *               255.255.0.0     U         0 0          0 eth0

default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0DNS:主机名:CentOS主DNS:202.106.46.151第二DNS:202.106.0.20第三DNS:8.8.8.8网络配 置:eth0静态ip:192.168.1.106子网掩码        255.255.255.0默认网关 IP     192.168.1.1DEVICE=eth0IPADDR=192.168.1.106NETMASK=255.255.255.0BROADCAST=192.168.1.255ONBOOT=yesBOOTPROTO=noneGATEWAY=192.168.1.1TYPE=Ethernet"/etc/sysconfig/network-scripts/ifcfg-eth0" 11L, 187C

 

34 .给用户赋目录权限

setfacl -m u:abc:rwx /fold

35. sed命令输出匹配行的下一行

sed -n '/a/ {n;p}' test.log  > resukts.txt

 

36.Linux 如何禁止用户登录


在Linux上,有多种方式让不安份的用户无法登录。

1.修改用户配置文件/etc/shadow,将第二栏设置为“*”,如下。那么该用户就无法登录。但是使用这种方

式会导致该用户的密码丢失,要再次使用时,需重设密码[再次启用这个帐号的方法是把“*”去掉就可以了]

testid:*:15230:0:99999:7:::

2.使用命令usermod

usermod -L testid ##  锁定帐号testid
usermod -U testid ##  解锁帐号testid

3.通过修改shell类型
这种方式会更加人性化一点,因为你不仅可以禁止用户登录,还可以告诉他你这么做的原因。如下:

chsh testid -s /sbin/nologin #将用户testid的shell进行更改

##修改/etc/nologin.txt(没有就新建一个),
##在里面添加给被禁止用户的提示
#解禁用户的方式就是把shell改为他原有的就可以了。

4.禁止所有的用户登录
如果你是root用户,当你不想让所有用户登录时(比如你要维护系统升级什么的),如果按上面的方式,一

个一个地去禁止用户登录,这将是很……无聊的事。而且还容易出错。下面有一种简洁有效的方式:

##在/etc目录下建立一个nologin文档
touch /etc/nologin ##如果该文件存在,那么Linux上的所有用户(除了root以外)都无法登录
##在/etc/nologin(注意:这可不是3中的nologin.txt啊!)写点什么,告诉用户为何无法登录

cat /etc/nologin
9:00-10:00 系统升级,所有用户都禁止登录!

##解禁帐号也简单,直接将/etc/nologin删除就行了!

37.管理员对集群上添加一个用户的流程

总结如下,不足的地方,希望有经验的人士给予补充:
1.添加用户:zhanggp
useradd –m zhanggp
2.给用设置密码:
passwd zhanggp
3.给用户设定用户组
默认建立的用户的用户组是users
usermod zhanggp –G siesta,gaussian
将zhanggp的附属用户组设置为siesta和gaussian,多个用户组的时候之间仅用逗号隔开
usermod zhanggp –g siesta
将zhanggp的第一用户组改为siesta
chgrp –R siesta /home/zhanggp
将zhanggp用户的家目录以及下面的所有目录和文件的用户组由原来的users用户组改为siesta用户组
id zhanggp查看zhanggp用户的用户信息,可以看到他的第一用户组和附属
4.限制用户的磁盘空间
edquota -u zhanggp
回车后会调用vi编辑,如下:
Disk quotas for user zhanggp (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda5                  17224006         0         0       4681        0        0
说明:
Filessystem:表示当前启用磁盘限额的文件系统名称;
blocks:表示当前用户已使用块数量大小(磁盘空间大小);单位为KBytes;
soft:表示软限制(非强制性限制)磁盘空间大小,单位为KBytes;
hard:表示硬限制(强制性限制)磁盘空间大小,单位为KBytes;
inodes:表示当前用户已使用文件个数;
soft:表示软限制(非强制性限制)文件个数;
hard:表示硬限制(强制性限制)文件个数。
“0”表示没有不限制,把想要设置的数值填入对应项保存退出。

其中soft(软限制)表示超过这个值后,用户在缓冲时间内(默认是7days)还可以继续使用,但是一旦超过了软限制,系统会给用户一个警告。但是当用 户超过hard(硬限制)值后,超过的部分将不再写入磁盘,也就是会出现文件写入不完整的情况。所以当超过软限制之后,用户一定要及时的清理自己的目录, 防止出现计算任务最后因为写入磁盘失败而导致任务数据丢失的情况。
我们给每一个普通用户分配50GB的使用空间,但是最大不能超过60GB,所以我们的soft值是52428800,hard值是62914560,对于用户写多少文件数目,我们不做设置,随他们便。因此上述文件应该编辑为:
Disk quotas for user zhanggp (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda5                  17224006   52428800   62914560       4681        0        0

查看刚才对用户做的磁盘限制情况:

#quota -us zhanggp (其中s表示使用M作单位)

Disk quotas for user zhanggp (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda5  16821M  51200M  61440M            4681       0       0        

上述信息表示做成功了。

对其他的用户做相同的设置:

#edquota -p 参考用户  新用户
比如将zhanglx用户设置为和zhanggp用户相同的配置,
#edquota -p zhanggp zhanglx
5.使对用户的设定对计算节点有效(采用的NIS服务)
cd /var/yp
make
这个时候计算节点对用户的信息就可以知道了。注意:只要添加用户或者修改用户的信息,都需要这一步操作。
6.删除用户zhanggp
userdel –r zhanggp

 

38. linux与windows的数据交换

mount -t cifs -o username=wangjian,password=123456 //192.168.2.150/d/ /mnt/hiseq1500

39. 修改目录权限

修改 /var/run/mysqld/权限为mysql 


chown -R mysql /var/run/mysqld
chgrp -R mysql /var/run/mysqld

39. iptables

脚本都放在 cd /bin


  1. cd /bin  
  2.  
  3. touch daili  
  4.  
  5. chmod a+x daili  
  6.  
  7. vi daili  
  8.  
  9. #!/bin/bash  
  10.  
  11. adsl-stop  
  12.  
  13. adsl-start  
  14.  
  15. route add default ppp0  

----------

iptables -t nat -F <清空nat表里的所有规则>

iptables -t filter -F <清空防火墙里的所有规则>

------------------

  1. echo "1" > /proc/sys/net/ipv4/ip_forward  
  2.  
  3. iptables -t nat -A POSTROUTING -s 202.106.20.0/24 -j MASQUERADE  
  4.  
  5. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE  

要想每一次开机就能自动带动下面的机器上网的话就执行下面的命令

  1. vi /etc/rc.local  
  2.  

把 /bin/daili 写到rc.local里

(注:nat的客户端的网关都指向做代理上网那个电脑的ip)

40. 查看目录空间

Df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式:

df -hl

显示格式为:

文件系统 容量 已用 可用 已用% 挂载点

Filesystem Size Used Avail Use% Mounted on

/dev/hda2 45G 19G 24G 44% /

/dev/hda1 494M 19M 450M 4% /boot

/dev/hda6 4.9G 2.2G 2.5G 47% /home

/dev/hda5 9.7G 2.9G 6.4G 31% /opt

none 1009M 0 1009M 0% /dev/shm

/dev/hda3 9.7G 7.2G 2.1G 78% /usr/local

/dev/hdb2 75G 75G 0 100% /

/dev/hdb2 75G 75G 0 100% /

以上面的输出为例,表示的意思为:

HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被挂载到根分区目录上(/)。

下面是相关命令的解释:

df -hl 查看磁盘剩余空间

df -h 查看每个根路径的分区大小

du -sh [目录名] 返回该目录的大小

du -sm [文件夹] 返回该文件夹总M数

更多功能可以输入一下命令查看:

df --help

du --help

查看linux文件目录的大小和文件夹包含的文件数

统计总数大小

du -sh xmldb/

du -sm * | sort -n //统计当前目录大小 并安大小 排序

du -sk * | sort -n

du -sk * | grep guojf //看一个人的大小

du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字

查看此文件夹有多少文件 /*/*/* 有多少文件

du xmldb/

du xmldb/*/*/* |wc -l

40752

解释:

wc [-lmw]

参数说明:

-l :多少行

-m:多少字符

-w:多少字

读写权限

1. 如何文件限额挂载:

dd if=/dev/zero bs=1M count=500000 of=/root/disk-1/data500G
mkfs /root/disk-1/data500G

mount -o loop /root/disk-1/data500G /mnt/data500G

linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计

去除重复行
sort file |uniq


查找非重复行
sort file |uniq -u

查找重复行
sort file |uniq -d

统计
sort file | uniq -c

 

shell命令sed(打印匹配行与行号的方法)

文件data内容
my name is chngchng
yes i can
1、打印匹配行的方法
 sed -n -e '/my/p' data
         my name is chngchng
2、打印行号的方法
        sed -n -e '/my/=' data
        1
3、打印匹配行与行号的方法
sed -n -e '/my/p' -e '/my/=' data 
my name is chngchng 
1
centos 7 挂载大硬盘

parted /dev/sdb
mklabel gpt

mkpart primary 0 -1     //0表示起始位置,-1表示结束位置,(0,-1)表示整个盘符

mkfs.xfs /dev/sdb1

=====================
yum install xfsprogs 
fdisk /dev/sdb 
 mkfs.xfs -f /dev/sdb1
mount -t xfs /dev/sdb1 /storage 

 

 

============ 重置root密码 方法一:在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录 然后进入 mysql>use mysql; mysql>update user set password=password('新密码') WHERE User='root'; mysql>flush privileges; 运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。 修改mysql密码方法二: 不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码 停止mysql服务 打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables 然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。 按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行的话可以结束掉对应进程来关闭。 启动mysql服务。 =============== 有很多方法: 1.用root 进入mysql后 mysql>set password =password('你的密码'); mysql>flush privileges; 2.使用GRANT语句 mysql>grant all on *.* to 'root'@'localhost' IDENTIFIED BY '你的密码'with grant option ; mysql>flush privileges; 3.进入mysql库修改user表 mysql>use mysql; mysql>update user set password=password('你的密码') where user='root'; mysql>flush privileges;