12月02, 2016

懒人的Shell Snippet

tar

tape archive(磁带存档) tar代表未被压缩的tar文件。已被压缩的tar文件则追加压缩文件的扩展名,如经过gzip压缩后的tar文件,扩展名为’.tar.gz’ 命令格式

Example

  1. 将当前的文件夹下的东西打包到ab.tar中

    shell tar -cvf  ab.tar *
    
  2. 列出权限、所有者、大小、时间、文件名等信息,为防止解压缩爆炸,养成解压前查看信息的好习惯

     ➜ tar -tvf ab.tar
    

    -rw-r--r-- 0 36kr staff 1536 11 20 04:20 a.txt -rw-r--r-- 0 36kr staff 0 11 20 04:19 b.txt

  3. 解压缩文件

    ➜  shell tar -xvf ab.tar
     x a.txt
     x b.txt
    
  4. 当然你也可以先用查看命令,然后把其中的一份文件抽离出来

    ➜ shell tar -xvf ab.tar a.txt
    

find

查找文件位置

Example

find . -name “*.log” -print

locate

find -name 的另外一种写法

whereis

查找二进制命令文件

Example

  ➜ whereis grep

type

用于区分是shell自带的,还是外部命令

echo

显示当前PATH环境变量。当我们执行程序是,shell自动根据PATH变量的值去搜索该程序。

Example

echo $PATH

lsof

lsof(list of open file)查看这个列表对系统监测以及排错

Example

  1. 查看端口的使用情况

     ➜ lsof -i:4000
    
  2. 查找谁在使用文件系统

    在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统

     ➜ lsof /GTES11/
    
    COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
    bash 4208 root cwd DIR 3,1 4096 2 /GTES11/
    vim 4230 root cwd DIR 3,1 4096 2 /GTES11/
    
    • 在这个示例中,用户root正在其/GTES11目录中进行一些操作。

    • 一个 bash是实例正在运行,并且它当前的目录为/GTES11;

    • 另一个则显示的是vim正在编辑/GTES11下的文件。
  3. 恢复删除的文件

    假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages 文件恢复的方法如下:

    • 首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:

      ➜  lsof |grep /var/log/messages
      

      syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)

      从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为:2

    • 时还可以看到/var/log/messages已经标记被删除了。

      因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

      # head -n 10 /proc/1283/fd/2 //head – display first lines of a file
      Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
      Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
      Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (rooteverestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007
      Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable)
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved)
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved)
      Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)
      从上面的信息可以看出,查看 /proc/1283/fd/2 就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:
      
      ➜  cat /proc/1283/fd/2 > /var/log/messages
      

本文链接:http://inkzhou.com/post/Shell Snippet.html

-- EOF --

Comments