常用Shell技能

Oct 20, 2015


本文只记录一下平时开发经常会用到的Shell命令,一些细节记录下来方便以后查找。


ls


查看某个目录下某天的文件

有时我们需要查看某个目录下某一天生成了哪些文件,这时可以执行如下命令:

ls /tmp/output -l --time-style=long-iso | grep 2018-07-05



find 命令


在Linux环境下开发,find命令使用可以说是非常的频繁,熟练的掌握可以极大地提高我们的工作效率。

找到所有想要的文件并且copy到指定目录

一个常见的场景是,我们在编译服务器上编译某个开源代码,执行make后,一般我们可能不想执行make install,而只是想得到生成的所有.a或者.so文件,这时我们 可以执行如下命令:

find ./ -name *.a -print0 | xargs -I{} -0 cp -v {} /lib/path


objdump


代码实例是C学习笔记一文中地址无关代码小节中的代码。

参数-h就是把ELF文件的各个段的基本信息打印出来。

obi_h

参数-d是将所有包含指令的段进行反汇编。

obj_d

ELF文件中一个非常重要的段是.dynamic,它是专门用于动态链接的,这个段里面保存了动态链接器所需要的基本信息,具体相关说明见c学习笔记。参数-R就是用来查阅.dynamic段中相关信息的。

obj_R


tar


  • -c:压缩文件
  • -x:解压文件
  • -z:用gzip压缩文件(压缩还是解压依赖是否组合了-c或者-x)
  • -j:用bzip2压缩文件,一般用于.bz2结尾的文件。
  • -v(verbose):显示解压过程的具体信息
  • -f(file):指定要解压的文件,在f之后要立即接文档名,不能再加其他参数
#tar xjvf busybox-1.24.1.tar.bz2 -C /home/work

上面就是一个将以.bz2格式的文件解压到指定路径的例子,如果不加-C就解压到当前目录中。

#tar xzvf boa-0.94.13.tar.gz

上面就是将以.gz格式的文件解压到当前目录的例子。

#ls
u-boot-2015.10 boa-0.94.13
#tar zcvf u-boot.tar.gz u-boot-2015.10
#ls
#u-boot-2015.10 boa-0.94.13 u-boot.tar.gz

上面是一个压缩文件的例子,在参数f之后的文档名是自己取的,我们习惯上都用.tar来作为辨识。


grep


grep命令用来搜索文本,或从给定的文件中搜索行内包含了给定字符串或单词的文件。 一般来说,grep显示匹配到的行。


grep命令的语法

grep [-option] '搜索字符串' filename
cat 文件 | grep '搜索字符串'

在一个文件进行搜索

搜索/etc/passwd文件下的boo用户:

$grep boo /etc/passwd

可以使用grep去强制忽略大小写。例如,使用-i选项可以匹配boo,Boo,BOO和其他组合:

$grep -i "boo" /etc/passwd

当你搜索boo时,grep命令将会匹配fooboo,boo123,barfoo35和其他所有包含boo的字符串,可以使用-w选项去强制完全匹配搜索

$grep -w "boo" file

可以通过添加-c选项显示匹配到的次数,-n选项可以输出匹配到的行号,-v选项可以进行反转匹配。


在一个目录中递归搜索

加上-r或者-R选项可以在一个目录中递归搜索所有文件。例如,在文件目录下面搜索所有包含字符串“192.168.1.5”的文件

$grep -r "192.168.1.5" /etc/

管道与grep命令

grep常常与管道一起使用,在这个例子中,显示硬盘设备的名字:

#dmesg | egrep '(s|h)d[a-z]'

显示CPU型号:

#cat /proc/cpuinfo | grep -i 'Model'

仅仅显示匹配到内容的文件名字

使用-l选项去显示那些文件内容中包含main()的文件名:

$grep -l 'main' *.c

解压.cpio.gz文件

$gzip -dc file.gz | cpio -div

解压ramdisk.gz文件

$gunzip ramdisk.gz

解压后得到ramdisk镜像文件,该镜像文件会把原有的ramdisk.gz覆盖。

$mkdir mnt
$mount -o loop ramdisk mnt 

挂载镜像到mnt目录,这样mnt目录里面就是展开后的文件系统目录。


PS命令


Linux上进程的5种状态:

状态 描述 PS中的状态码
运行 正在运行或在运行队列中等待 R(runnable)
中断 休眠中,受阻,在等待某个条件 S(sleeping)
不可中断 信号不可唤醒,必须等到中断发送 D(uninterruptble sleep)
僵死 进程已终止,等待父进程回收 Z(zombie)
停止 进程收到SIGSTOP,SIGSTP,SIGTIN T(traced or stopped)

显示所有进程信息,连同命令行

#ps -ef

列出目前所有的正在内存当中的程序

#ps aux

将目前属于自己这次登入的PID与相关信息列出来

#ps -l