linux相关知识 - QLGQ/learning-python GitHub Wiki
Reference
grep命令操作
作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
格式
grep [options]... PATTERN [FILE]...
默认的PATTERN是一个基本正则表达式(缩写为BRE)。
例如: grep -i 'hello word' menu.h main.c
主要参数
- -i:忽略大小写
- -c:打印匹配每个FILE的行数
- -l:打印匹配FILES的文件名
- -v:查找不包含匹配项的行
- -n:打印包含匹配项的行和行号
ps(process status)命令操作
作用
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。
常用参数
- -A:所有的进程均显示出来,与-e具有同样的效用;
- -a:显示现行终端机下的所有进程,包括其他用户的进程;
- -u:以用户为主的进程状态;
- -x:通常与a这个参数一起使用,可列出较完整信息;
- -l:较长、较详细的将该PID的信息列出;
- -j:工作的格式(jobs format);
- -f:做一个更为完整的输出。
由于ps能够支持的系统类型相当的多,所以它的参数多得离谱,而且有没有加上“-”差很多,详细的用法参考man ps。
ps aux|grep xxx详解
如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
使用示例:
[root@node20 updateDB]# ps aux|grep ./update_stock
root 14232 0.0 0.0 5928 724 pts/1 S+ 18:16 0:00 grep ./update_stock
root 25021 0.0 0.0 3056 816 ? S Apr12 0:03 ./update_stock
ps aux输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
格式说明:
USER:进程拥有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码(minor device number of tty)
STAT:该进程的状态,linux的进程有5种状态
D 不可中断 uninterruptible sleep(usually IO)
R 运行 runnable(on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct ("zombie") process
START:进程开始时间 TIME:执行的时间 COMMAND:所执行的命令
tar命令操作
目前Linux下最常见的压缩包格式自然非.tar.gz莫属,但由于bzip2强大的压缩比率,目前.tar.bz2愈发有取代之势。还有单纯的.tar格式也很常见。它们目前的操作都主要是由tar程序配合gzip/bzip2来完成的。
tar命令参数详解
- -c:建立压缩档案
- -x:解压
- -t:查看内容
- -r:向压缩文档文件末尾追加文件
- -u:更新原压缩包中的文件
以上五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
- -z:有gzip属性的
- -j:有bz2属性的
- -Z:有compress属性的
- -v:显示所有过程
- -O:将文件解开到标准输出
**下面的参数-f是必需的: **
- -f:使用文档名字,切记,这个参数是最后一个参数,后面只能接档案名。
实例如下:
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示跟新文件的意思。
# tar -tf all.tar
这条命令是列出all.tar包中所有的文件,-t是列出文件的意思。
# tar -xf all.tar
这条命令是解出all.tar包中所有文件, -x是解开的意思。
压缩
实例如下:
# tar -cvf jpg.tar * .jpg
将目录里所有jpg文件打包成jpg.tar
# tar -czf jpg.tar.gz *.jpg
将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
# tar -cjf jpg.tar.bz2 *.jpg
将目录里所有jpg文件打包成lpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar,bz2
# tar -cZf jpg.tar.Z *.jpg
将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个uncompress压缩过的包,命名为jpg.tar.Z
# rar a jpg.rar *.jpg
rar格式的压缩,需要先下载rar for linux
# zip jpg.zip *.jpg
zip格式的压缩,需要先下载zip for linux
压缩到指定的文件夹
比如把home/www/下面的index压缩到home目录下:
tar 格式 /home/index.tar -P /home/www/index
解压
实例如下:
# tar -xvf file.tar
解压tar包
# tar -xzvf file.tar.ga
解压tar.gz
# tar -xjvf file.tar.bz2
解压tar.bz2
# tar -xZvf file.tar.Z
解压tar.Z
# unrar e file.rar
解压rar
# unzip file.zip
解压zip
解压文件到指定目录
比如将/home/one.tar解压到/home/www/目录下:
tar 格式 /home/one.tar -C /home/www/
总结
- *.tar用tar -xvf解压
- *.gz用gzip -d或者gunzip解压
- .tar.gz和.tgz用tar -xzf解压
- *.bz2用bzip2 -d或者bunzip解压
- *.tar.bz2用tar -xjf解压
- *.Z用uncompress解压
- *.tar.Z用tar -xZf解压
- *.rar 用unrar e解压
- *.zip用unzip解压
大家可能会遇到下面这个错误
tar: Removing leading '/' from member names
这是tar命令为了避免不必要的错误而做的限制。如果用户在压缩文件时使用了绝对路径,那么tar会自动的剥离掉第一个'/'。
例如,你想备份/var的内容:
tar -cvzf etc.gz /var
生成了一个压缩包,那么在解压这个压缩包的时候,内容会被写入到/var这个目录,可能造成潜在的风险。经过tar剥离第一个'/'后,解压时压缩包的内容会被释放到当前目录,即:./var。如果非要使用绝对路径,那么请加-P参数;如果想覆盖掉解压缩目录,请加-C参数。
netstat命令
Introduction
Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态(Interface Statistics),masquerade连接,多播成员(Multicast Memberships)等等。
参数含义介绍
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出有在Listen(监听)的服务状态
-p 显示建立相关链接的程序名(显示pid/进程名称)
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
**提示:**LISTEN和LISTENING的状态只有用-a或者-l才能看到
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。 Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
实例如下:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
head命令详解
head命令的语法格式为:head [OPTION]... [FILE]...
使用head命令默认显示文件的前十行。
参数及解释
- -n n,显示文件的前n行
- -n -n,显示文件除去最后n行外的所有内容
- -c n,按文件内容大小来打印,打印前n个字节的内容
- -c -n,按文件内容大小来打印,打印除了最后n个字节的所有内容
- -q ,打印时不显示文件名称(其实后面跟上--quiet,--silent都是一样的,都不会显示文件名称,和默认打印是一样的效果。)
- -v,打印时显示文件名称(其中,用--verbose和-v显示的是一样的效果) 打印多个文件的内容时,只需将文件按顺序列出来即可。
tail命令详解
tail命令和head命令非常相似,只不过它是打印文件的尾部内容的,当然也有一些特色之处。
tail命令的语法格式为:tail [OPTION]... [FILE]...
参数及解释
- -n n,打印文件的最后n行
- -n +n,从第n行开始输出文件的所有内容
- -c n,打印文件中的最后n个字节
- -c +n,打印文件的所有内容除了前n个字节
- -f,循环读取文件
- -s,设置一个间隔时间来查看文件的更新
- --pid,给定某个进程
tail命令的一个很重要的用法是从一个内容不断增加的文件中读取数据。新增加的内容被添加到文件的尾部,因此当新内容被写入文件的时候,可以用tail命令将其显示出来。只是简单实用tail的话,它会读取文件的最后10行,然后退出,这样就不能做到实时监控,加入-f参数就可以做到实时监控文件的更新内容了。这样就能实时监控项目的log日志了。
tail具有一个很有意思的特性,当某个给定进程结束之后,tail也会随之终结。假如我们正在读取一个不断增长的文件,进程Foo一直在向该文件追加数据,那么tail会一直执行,直到进程Foo的结束。