• lv3 嵌入式开发-4 linux shell命令(文件搜索、文件处理、压缩)


    目录

    1 查看文件相关命令

    1.1 常用命令

    1.2 硬链接和软链接

    2 文件搜索相关命令

    2.1 查找文件命令

    2.2 查找文件内容命令

    2.3 其他相关命令

    3 文件处理相关命令

    3.1 cut 

    3.2 sed 过滤

    3.3 awk 匹配

    4 解压缩相关命令

    4.1 解压缩文件的意义

    4.2 解压缩相关命令


    1 查看文件相关命令

    1.1 常用命令

    cat - concatenate files and print on the standard output

    tac - concatenate and print files in reverse 逆序

    more — file perusal filter for crt viewing 不可以回去,就是不可以向前,只能向后,按回车键

    less - opposite of more less可以上下翻动 less不必读整个文件,加载速度会比more更快。按上下或jk,按右结束

    head - output the first part of files 默认显示前10行

    1. cat file
    2. tac file
    3. more file
    4. less file
    5. head file

    1.2 硬链接和软链接

    Linux中有两种类型的链接:  

    硬链接是利用Linux中为每个文件分配的物理编号——inode建立链接。因此,硬链接不能跨越文件系统。

    1. linux@linux:~$ ls -i file
    2. 1448347 file

    软链接(符号链接)是利用文件的路径名建立链接。通常建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性。

    1. ln命令:
    2. ln [ -s ] target link_name
    3. 选项“-s”表示为创建软链接。在缺省情况下,创建硬链接。参数target为目标文件,link_name为链接文件名。如果链接文件名已经存在但不是目录,将不做链接
    4. linux@ubuntu:~$ ln -s /proc/cpuinfo mycpuinfo
    5. linux@ubuntu:~$ ls –l mycpuinfo
    6. lrwxrwxrwx 1 wdl wdl 13 2007-09-22 00:43 mycpuinfo -> /proc/cpuinfo
    7. 以上命令为/proc/cpuinfo文件创建了一个软链接文件。使用“ls –l”命令可以查看到新创建的链接文件所指向的目标文件名。

    硬链接示例

    1. linux@linux:~$ ls -i file
    2. 1448347 file
    3. linux@linux:~$ ln file file_hard
    4. linux@linux:~$ ls -i file_hard
    5. 1448347 file

    软链接示例

    1. linux@linux:~$ ls -i file
    2. 1448347 file
    3. linux@linux:~$ ls -i file
    4. 1448347 file
    5. linux@linux:~$ ln -s file file_soft
    6. linux@linux:~$ ls -i file_soft
    7. 1448348 file_soft

    硬链接和软链接的区别:

    • 如果是修改硬链接的目标文件名,链接依然有效;
    • 如果修改软链接的目标文件名, 则链接将断开;
    • 对一个已存在的链接文件执行移动或删除操作,有可能导致链接的断开。  
    • 假如删除目标文件后,重新创建一个同名文件,软链接将恢复,硬链接不再有效,因为文件的inode已经改变。

    2 文件搜索相关命令

    2.1 查找文件命令

     find - search for files in a directory hierarchy  语法:find [起始目录] 寻找条件 操作

    1. -name '字串' 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。
    2. -iname '字串' 忽略大小写的方式查找
    3. -type x 查找类型为 x 的文件
    4. -exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。

    示例

    1. find . -name "file2" //.代表当前目录下找
    2. fine /home -name "file2" //在home目录下找
    3. find . -iname "file2" //忽略大小写
    4. find . -type f //f代表普通文件

    寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。 

    1. and:逻辑与,在命令中用 -a 表示,是系统缺省的选项,表示只有当所给的条 件都满足时,寻找条件才算满足
    2. find . -name 'tmp' -type c -user 'inin'
    3. or:逻辑或,在命令中用 -o 表示。该运算符表示只要所给的条件中有一个满足 时,寻找条件就算满足OPTIONS:描述命令所有的参数或选项
    4. find . -name 'tmp' -o -name 'mina*'
    5. not:逻辑非,在命令中用 ! 表示。该运算符表示查找不满足所给条件的文件
    6. find . ! -name 'tmp'

    示例

    1. find . -name "file" -type l //当前目录查找名称file,文件类型是链接文件
    2. find . -name "file" -a -type l //也可以加-a 与上面相同
    3. find . ! -name "file" -exec rm {} \; //找到名称不是file的文件,并且执行删除,exec代表删除{} \;固定用法加最后

    2.2 查找文件内容命令

    1. grep, egrep, fgrep, rgrep - print lines that match patterns
    2. 语法:grep [选项] 要查找的内容 查找的位置
    3. 常用选项:
    4. -A 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    5. -B 除了显示符合样式的那一行之外,并显示该行之前的内容。
    6. -C 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    7. -i 忽略字符大小写的差别。
    8. -r 查找位置是目录时用
    9. -n 在显示符合样式的那一行之前,标示出该行的列数编号。

    示例

    1. linux@linux:~$ cat file2
    2. hello
    3. World
    4. 11
    5. 22
    6. 33
    7. linux@linux:~$ grep -A 1 "hello" file2
    8. hello
    9. World
    10. linux@linux:~$ grep -A 2 "hello" file2
    11. hello
    12. World
    13. 11
    14. linux@linux:~$ grep -B 2 "22" file2
    15. World
    16. 11
    17. 22
    18. linux@linux:~$ grep -C 1 "22" file2
    19. 11
    20. 22
    21. 33
    22. linux@linux:~$ grep -i -C 1 "World" file2
    23. hello
    24. World
    25. 11
    26. linux@linux:~$ grep -in -C 1 "World" file2
    27. 1-hello
    28. 2:World
    29. 3-11
    30. linux@linux:~$ grep -irn -C 1 "World" . //查看所有目录下 有world单词的内容
    31. ./file2:1-hello
    32. ./file2:2World
    33. ./file2:3-11
    34. linux@linux:~$ grep -irn -C 1 "World" /home/linux

    2.3 其他相关命令

    which - locate a command 定为命令

    whereis - locate the binary, source, and manual page files for a command  定位命令和操作手册

    1. linux@linux:~$ which ls
    2. /bin/ls
    3. linux@linux:~$ which pwd
    4. /bin/pwd
    5. linux@linux:~$ whereis ls
    6. ls: /bin/ls /usr/share/man/man1/ls.1.gz
    7. linux@linux:~$ whereis pwd
    8. pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz

    3 文件处理相关命令

    3.1 cut 

    cut - remove sections from each line of files  从每行文件中删除部分

    1. -b: 以字节为单位取出固定字符区间
    2. -c :以字符 的单位取出固定字符区间;
    3. -d :后面接分隔字符。与 -f 一起使用;
    4. -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;

     示例

    3.2 sed 过滤

    sed - stream editor for filtering and transforming text   流编辑器过滤和转换文本

    1. -r:使用扩展正则表达式
    2. -e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
    3. -i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
    4. -n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

    编辑命令

    1. a: 追加
    2. i: 插入
    3. d: 删除
    4. s: 替换
    5. p: 打印

     示例:

    1. linux@linux:~/Desktop$ sed -n '1p' passwd //打印1
    2. root:x:0:0:root:/root:/bin/bash
    3. linux@linux:~/Desktop$ sed -n '1,4p' passwd //打印passwd中14
    4. linux@linux:~/Desktop$ sed '1d' passwd //预览删除passwd文件中第一行
    5. linux@linux:~/Desktop$ sed -i '1d' passwd //删除passwd文件中第一行
    6. linux@linux:~/Desktop$ sed -i '1,3d' passwd //删除passwd文件中第一行至第三行
    7. linux@linux:~/Desktop$ sed -i '$ahi' passwd //在passwd文件中最后一行追加一个hi
    8. linux@linux:~/Desktop$ sed -i '1ahi' passwd //在passwd文件中第一行追加一个hi
    9. linux@linux:~/Desktop$ sed -i '1ihi' passwd //在passwd文件中第一行插入一个hi
    10. linux@linux:~/Desktop$ sed -i 's/linux/Linux/' passwd //在passwd中替换一次linux->Linux
    11. linux@linux:~/Desktop$ sed -i 's/linux/Linux/g' passwd //在passwd中替换所有linux->Linux
    12. linux@linux:~/Desktop$ sed -i '20,34s/linux/Linux/g' passwd //在passwd的24-34行中替换所有linux->Linux

    3.3 awk 匹配

     awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

    示例: 

    1. linux@linux:~/Desktop$ awk '{print $0}' file //打印全部
    2. linux@linux:~/Desktop$ awk '{print $1}' file //打印file文件中第一列
    3. linux@linux:~/Desktop$ awk '{print $1,$2}' file //打印file文件中第一列,第二列
    4. linux@linux:~/Desktop$ awk '{print NR,$1}' file //打印file文件中第一列,包括行号
    5. linux@linux:~/Desktop$ awk '{print NF,$1}' file //打印file文件中第一列,包括列数
    6. linux@linux:~/Desktop$ awk '{print $NF}' file //打印file文件中最后一列数据

     注意awk默认是空格进行分割的,如果要指定别的符号分割采取如下命令

    awk -F ':' '{print $1}' passwd   //打印passwd中以:为分隔符,第1列数据

    运算:

    ==  > <  =赋值

    awk -F ':' '$1=="linux" {print $0}' passwd   //判断第一列数据是否等于linux,如果是都打印出来

    4 解压缩相关命令

    4.1 解压缩文件的意义

    归档文件是将一组文件或目录保存在一个文件中。  压缩文件也是将一组文件或目录保存一个文件中,并按照某种存储格式保存在磁盘上,所占磁盘空间比其中所有文件总和要少。  归档文件仍是没有经过压缩的,它所使用的磁盘空间仍等于其所有文件的总和。因而,用户可以将归档文件再进行压缩,使其容量更小。

    用户在进行数据备份时,需要把若干文件整合为一个文件以便保存。尽管整合为一个文件进行管理,但文件大小仍然没变。若需要网络传输文件时,就希望将其压缩成较小的文件,以节省在网络传输的时间。因此本节介绍文件的归档与压缩。

    4.2 解压缩相关命令

    gzip 和 gunzip

    将一个文件压缩成.gz格式的压缩文件,移植性好  

    缺点:这个命令没有归档功能,每次只能压缩一个文件。生成相应名字的压缩包

    1. linux@DESKTOP-6C99IPF:~/share$ ls
    2. test
    3. linux@DESKTOP-6C99IPF:~/share$ gzip test
    4. linux@DESKTOP-6C99IPF:~/share$ ls
    5. test.gz
    6. linux@DESKTOP-6C99IPF:~/share$ gunzip test test.gz
    7. linux@DESKTOP-6C99IPF:~/share$ ls
    8. test
    9. linux@DESKTOP-6C99IPF:~/share$

    bzip2和bunzip2

    bzip2命令是.bz2文件的压缩程序 bzip2在性能上优于gzip,提供了最大限度的压缩比率。

    1. linux@DESKTOP-6C99IPF:~/share$ ls
    2. test test1 test2
    3. linux@DESKTOP-6C99IPF:~/share$ bzip2 *
    4. linux@DESKTOP-6C99IPF:~/share$ ls
    5. test.bz2 test1.bz2 test2.bz2
    6. linux@DESKTOP-6C99IPF:~/share$ bunzip2 *
    7. linux@DESKTOP-6C99IPF:~/share$ ls
    8. test test1 test2

    zip和unzip

    压缩后的文件后缀名为 .zip,可以压缩目录,原文件保留。  方便在Linux和微软Windows间交换文件

    1. linux@DESKTOP-6C99IPF:~/share$ ls
    2. hello test test1 test2
    3. linux@DESKTOP-6C99IPF:~/share$ zip test.zip *
    4. linux@DESKTOP-6C99IPF:~/share$ ls
    5. hello test test.zip test1 test2
    6. linux@DESKTOP-6C99IPF:~/share$ rm hello test test1 test2 -r
    7. linux@DESKTOP-6C99IPF:~/share$ ls
    8. test.zip
    9. linux@DESKTOP-6C99IPF:~/share$ unzip test.zip
    10. linux@DESKTOP-6C99IPF:~/share$ ls
    11. hello test test.zip test1 test2

    tar

    tar命令主要用于将若干文件或目录合并为一个文件,以便备份和压缩。当然,之后出现tar程序的改进版本,可以实现在合并归档的同时进行压缩。          

    1. tar命令符号模式的一般语法格式为:
    2. tar [ -t | -x | -r | -c | -v | -f | -j | -z ] tarfile filelist
    3. -t 显示归档文件的内容
    4. -x 释放归档文件
    5. -c 创建一个新的归档文件
    6. -r 追加的方式归档文件
    7. -v 显示归档和释放的过程信息
    8. -f 用户指定归档文件的文件名,否则使用默认名称
    9. -j 由tar生成归档,然后由bzip2压缩
    10. -z 由tar生成归档,然后由gzip压缩

    示例 

    1. linux@ubuntu:~$ tar –cf myExamples.tar myExamples
    2. linux@ubuntu:~$ tar -cjf myExamples.tar.bz2 myExamples
    3. linux@ubuntu:~$ tar -czf myExamples.tar.gz myExamples
    4. linux@ubuntu:~$ ls -lh myExamples.tar*
    5. -rw-r--r-- 1 wdl wdl 9.3M 2007-09-23 00:42 myExamples.tar
    6. -rw-r--r-- 1 wdl wdl 8.6M 2007-09-23 00:43 myExamples.tar.bz2
    7. -rw-r--r-- 1 wdl wdl 8.5M 2007-09-23 00:44 myExamples.tar.gz
    8. linux@ubuntu~$ tar –tvf myExamples.tar.gz
    9. linux@ubuntu:~$ tar –xvf myExamples.tar
    10. linux@ubuntu:~$ tar -xvjf myExamples.tar.bz2
    11. linux@ubuntu:~$ tar -xvzf myExamples.tar.gz
    12. linux@linux:~/Desktop$ tar -cf file.tar file1 file2 file3
    13. linux@linux:~/Desktop$ ls
    14. file1 file2 file3 file.tar
    15. linux@linux:~/Desktop$ rm file1 file2 file3
    16. linux@linux:~/Desktop$ ls
    17. file.tar
    18. linux@linux:~/Desktop$ tar -xvf file.tar
    19. file1
    20. file2
    21. file3
    22. linux@linux:~/Desktop$ ls
    23. file1 file2 file3 file.tar

  • 相关阅读:
    什么是JMM
    2024.7.16日 最新版 docker cuda container tookit下载!
    基于Tensorrtx 实现 darknet Yolov4-tiny 模型
    Redis Cluster Gossip Protocol: 目录
    matlab-BP神经网络的训练参数大全
    【云计算】云数据中心网络(六):私网连接
    docker
    【FOC】FOC控制流程图
    多线程编程及Thread类
    我的Go gRPC之旅、01 初识gRPC,感受gRPC的强大魅力
  • 原文地址:https://blog.csdn.net/m0_60718520/article/details/132643990