学习笔记之进阶命令

linux进阶命令

find
grep
file
which
whereis
gzip
bzip2
tar
diff
patch

find:查找符合条件的文件[1]

格式: find  目录名  选项  查找条件
举例:假设/work目录下有两个目录,分别为 /work/dira和/work/dirb.两个目录下面具有相同的文件。

find ./ -name "test.txt"

说明:
a)./指明了查找的路径为当前路径
b)-name表明以名字来查找文件
c)"test.txt",就指明查找名为test.txt的文件

同理:

     find ./ -name "*.txt"  

查找指定目录下面所有以.txt结尾的文件,其中 * 是通配符。

find ./ -name "dira"    

查找指定目录下面是否存在dira这个目录,dira是目录名。

注意:
1)如果没有指定查找目录,则为当前目录。

     /*两条命令是一样的效果*/
     find  . -name "*.txt"   //其中 . 代表当前路径 
     find    -name "*.txt"  

2)find还有一些高级的用法,如查找最近几天(几个小时)之内(之前)有变动的文件

find /home -mtime -2   //查找/home目录下两天内有变动的文件

grep:查找文件中符合条件的字符串[2]

格式: grep  [选项]  [查找模式]  [文件名]
举例:

grep -rn "abc" *

说明:
a)r(recursive):递归查找,n(number):显示目标位置的行号,可加入w全字匹配
b)"abc"要查找的字符串
c)* 当前目录下查找字符串(选项中有-r,则是当前目录下递归查找,无-r,则是当前目录下所有文档中查找)
同理:

grep -n "abc" test.txt

在test.txt文档中查找字符串abc

file:识别文件类型[3]

linux下一切皆文件

file ~/.bashrc     //为ASCII 编码的text类型
file ~/.vimrc      //为UTF-8 Unicode 编码的text类型
file ~/Pictures/*  //如图形文件JPEG/PNG/BMP格式
file ~/Videos/     //为directory表明这是一个目录
file /bin/pwd      // 出现 ELF 64-bit LSB executable,即为ELF格式的可执行文件
file /dev/*        //出现character special(字符设备文件)、 block special(块设备文件)等

which和whereis:查找命令或应用程序的所在位置[4]

格式: which  命令名/应用程序名
举例:

    which pwd  //定位到/bin/pwd
    which gcc  //定位到/usr/bin/gcc
    whereis pwd//查找到可执行程序的位置/bin/pwd和手册页的位置/usr/share/man/man1/pwd.1.gz

gzip:单个文件的解压/压缩[5]

常用选项:
-l(list): 列出压缩文件的内容
-k(keep): 在压缩或解压时,保留输入文件。
-d(decompress): 将压缩文件进行解压缩
1)查看
gzip  -l  压缩文件名

gzip -l pwd.1.gz

2)解压
gzip  -kd  压缩文件名

gzip -kd pwd.1.gz

该压缩文件是以.gz结尾的单个文件
3)压缩
gzip  -k  源文件名

gzip -k mypwd.1

得到了一个.gz结尾的压缩文件

注意:
1)如果gzip不加任何选项,此时为压缩,压缩完该文件会生成后缀为.gz的压缩文件,
并删除原有的文件,所以说,推荐使用gzip -k 来压缩源文件。
2)相同的文件内容,如果文件名不同,压缩后的大小也不同。
3)gzip只能压缩单个文件,不能压缩目录。

提示:
man pwd命令会解压/usr/share/man/man1/pwd.1.gz这个文件,然后读取该文件中固定的格式的一些信息,显示到终端中。

bzip2:单个文件的解压/压缩[6]

常用选项:
-k(keep): 在压缩或解压时,保留输入文件。
-d(decompress): 将压缩文件进行解压缩。
1)压缩
bzip2  -k  源文件名

bzip2 -k mypwd.1

得到一个.bz2后缀的压缩文件
2)解压
bzip2  -kd  压缩文件名

bzip2 -kd mypwd.1.bz2

注意:
1)如果bzip2不加任何选项,此时为压缩,压缩完该文件会生成后缀为.bz2的压缩文件,
并删除原有的文件,所以说,推荐使用bzip2 -k 来压缩源文件。
2)bzip2只能压缩单个文件,不能压缩目录。


gzip或bzip2小结:单个文件的压缩使用gzip或bzip2
压缩有两个参数:1)压缩时间 2)压缩比
一般情况下,小文件使用gzip来压缩,大文件使用bzip2来压缩。
mypwd.1源大小是1477字节
gzip压缩后mypwd.1.gz是877字节,
bzip2压缩后mypwd.1.bz2是939字节。
myls.1源文件大小7664字节
gzip压缩后myls.1.gz是3144字节,
bzip2压缩后myls.1.bz2是3070字节。


tar:多个文件和目录的压缩/解压[7]

常用选项:
-c(create): 表示创建用来生成文件包
-x: 表示提取,从文件包中提取文件
-t: 可以查看压缩的文件。
-z: 使用gzip方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
-j: 使用bzip2方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
-v(verbose): 详细报告tar处理的信息
-f(file): 表示文件,后面接着一个文件名。
-C <指定目录> :解压到指定目录

1.tar打包、gzip压缩

1)压缩
tar  -czvf  压缩文件名  目录名

tar -czvf dira.tar.gz  dira

2)查看
tar  -tvf  压缩文件名

tar -tvf dira.tar.gz

3)解压
tar  -xzvf  压缩文件名
tar  -xzvf  压缩文件名   -C   指定目录

tar -xzvf dira.tar.gz   解压到当前目录
tar -xzvf dira.tar.gz   -C  /home/book   解压到/home/book

2.tar打包、bzip2压缩

1)压缩
tar  -cjvf  压缩文件名   目录名

tar -cjvf dira.tar.bz2  dira

2)查看
tar  -tvf   压缩文件名

tar -tvf dira.tar.bz2

3)解压
tar  -xjvf  压缩文件名
tar  -xjvf  压缩文件名  -C  指定目录

tar -xjvf dira.tar.bz2   解压到当前目录
tar -xjvf dira.tar.bz2 -C  /home/book  解压到/home/book

diff:比较文件/目录,也可用来制作补丁文件[8]

常用选项:
-c: 列出两个比较文件的不同处,同时在不同处添加一个相同的上下文,有利于人工定位
-u: 表示在比较结果中输出上下文中一些相同的行,有利于人工定位
-r:表示递归比较各个子目录下的文件
-N: 将不存在的文件当做空文件
-w:忽略对空格的比较
-B:忽略对空行的比较

1.比较文件/目录

假设:test1.txt内容如下:

  I need to buy 1.
  I need to buy 2.
  I need to buy apples.
  I need to run the laundry.
  I need to wash the dog.
  I need to get the car detailed
  I need to buy 1.
  I need to buy 2.

test2.txt内容如下:

  I need to buy 1.
  I need to buy 2.
  I need to buy apples.
  I need to do the laundry.
  I need to wash the car.
  I need to get the dog detailed.
  I need to buy 1.
  I need to buy 2.  

1)normal模式输出比较结果
命令:

diff  test1.txt test2.txt

输出结果如下:

  4,6c4,6
< I need to run the laundry.
< I need to wash the dog.
< I need to get the car detailed
---
> I need to do the laundry.
> I need to wash the car.
> I need to get the dog detailed.

默认的输出模式,输出结果不太直观,不利于人工定位。
2)context模式输出比较结果
命令:

  diff -c test1.txt test2.txt

输出结果如下:

  *** 1,8 ****
  I need to buy 1.
  I need to buy 2.
  I need to buy apples.
! I need to run the laundry.
! I need to wash the dog.
! I need to get the car detailed
  I need to buy 1.
  I need to buy 2.
--- 1,8 ----
  I need to buy 1.
  I need to buy 2.
  I need to buy apples.
! I need to do the laundry.
! I need to wash the car.
! I need to get the dog detailed.
  I need to buy 1.
  I need to buy 2.

其中:*** 1,8 ****表示第一个文件的1--8行
--- 1,8 ----表示第二个文件的1--8行
3)unified模式输出比较结果
命令:

 diff -u test1.txt test2.txt

输出结果如下:

  @@ -1,8 +1,8 @@
 I need to buy 1.
 I need to buy 2.
 I need to buy apples.
-I need to run the laundry.
-I need to wash the dog.
-I need to get the car detailed
+I need to do the laundry.
+I need to wash the car.
+I need to get the dog detailed.
 I need to buy 1.
 I need to buy 2.

2.生成补丁文件

linux-2.6.22.6:未经修改的linux内核文件包
linux-2.6.22.6_new:修改过后的linux内核文件包

diff -urNwB linux-2.6.22.6 linux-2.6.22.6_new > linux-2.6.22.6_new.diff

这样就生成了一个linux-2.6.22.6_new.diff补丁文件。

patch:读取如何更改文件的源文件指示信息,然后应用这些更改(依据补丁文件来修改原始文件)[9]

常用选项:
-p0: 选项从当前目录查找目的文件(夹)(直接使用补丁文件里面指定的路径)
-p1: 选项忽略掉第一层目录,从当前目录查找(去掉补丁文件指定路径最左的第1个'/'及前面所有内容)。
常用格式: patch  -pnum  < patchfile
linux-2.6.22.6_new.diff文件头部信息:

diff -urNwB linux-2.6.22.6/arch/arm/configs/s3c2410_defconfig linux-2.6.22     .6_new/arch/arm/configs/s3c2410_defconfig
    2 --- linux-2.6.22.6/arch/arm/configs/s3c2410_defconfig   2007-08-31 14:21:0      1.000000000 +0800
    3 +++ linux-2.6.22.6_new/arch/arm/configs/s3c2410_defconfig       2019-07-23       13:30:56.570302574 +0800

命令:

cd /work/system/linux-2.6.22.6/         /*进入linux-2.6.22.6目录*/
patch -p1 < ../linux-2.6.22.6_new.diff  /*打补丁*/

说明:
a)-p1: 表示忽略补丁文件中第一个 "/"之前的内容,参考补丁文件头部信息,即忽略 "linux-2.6.22.6/"这一目录,这是因为已经进入了linux-2.6.22.6目录。
b): ../linux-2.6.22.6_new.diff:表示上一层目录下的linux-2.6.22.6_new.diff文件。
命令:

cd /work/system/                        /*进入system目录*/
patch -p0 < ./linux-2.6.22.6_new.diff   /*打补丁*/

说明:
a)-p0:表示不忽略补丁文件目录,按照全路径执行
b): ./linux-2.6.22.6_new.diff:表示当前目录下的linux-2.6.22.6_new.diff文件。
注意:按照全路径打补丁,被打补丁目录名应和补丁文件内第一个"/"之前目录名一致,即/work/system/目录下的linux-2.6.22.6目录名和补丁文件中第一个 "/"之前的目录名(linux-2.6.22.6)一致


你可能感兴趣的:(学习笔记之进阶命令)