zoukankan      html  css  js  c++  java
  • 程序员应该掌握的一些 Linux 命令

    文章配图

    程序员应该掌握的一些 Linux 命令

    作为一名后端开发,跟服务器的交流必不可少,刚好最近跟服务器打交道比较多,所以就汇总整理一下 Linux 下那些程序员经常需要使用的命令,掌握这些命令基本上可以在 Linux 系统里面横着走了(我明天在说大话了)

    命令格式和帮助信息

    常见的 Linux 命令格式是:命令名称,命令参数,命令对象,它们之间使用空格键隔开,大致如下:

    命令名称 [命令参数] [命令对象]
    

    一条完整的命令参数比较长,很容易劝退新手,所以很多时候我推荐短命令格式,更好记,他们区别如下:

    # 长格式:
    man --help
    
    # 短格式
    man -h
    

    当你不可能记住 Linux 所有的命令,当你遇到不熟悉的命令,可以 man 来查看帮助信息(如上),通常 man 帮助文档都很长,你可能需要知道一些关于文档的翻页、搜索、定位操作:

    按键 用途
    Page down 下一页
    Page up 上一页
    home 首页
    end 页尾
    / 从上往下搜索关键字
    ? 从下往上搜索关键字
    n 定位到下一个关键字
    N 定位到上一个关键字
    q 退出帮助文档

    知道了文档操作方式,那么可以了解一下 man 帮助文档的结构,因为大多数文档很长,如果不了解结构,读起来可能会比较困惑,我们找一个比较简单的 pwd 命令看看:

    man pwd     # 查看 man 帮助文档
    
    NAME        # 命令的名称
           pwd - print name of current/working directory
    SYNOPSIS    # 参数的大致使用方法
           pwd [OPTION]...
    DESCRIPTION # 介绍说明
           Print the full filename of the current working directory.
    AUTHOR      # 作者
           Written by Jim Meyering.
    REPORTING BUGS   # Bug 反馈
           ....
    COPYRIGHT       # 版权信息
           ....
    SEE ALSO        # 相关资料
           ...
    

    常用的系统命令

    这里简单说介绍说明一下日常的命令和使用方法,更加详细的可以参考 man 命令:

    echo 命令

    主要用于输出文本和变量
    输出一行本文示例如下:

    echo "hello world"
    hello world
    

    输出一行变量(局部变量、环境变量、shell 变量)示例如下:

    echo $SHELL
    /bin/bash
    

    data 命令

    date 命令主要用于查看、修改系统时间,示例:

    data
    Sun Jun 13 09:19:33 CST 2021
    

    按照指定格式查看系统时间:

    date "+%Y-%m-%d %H:%M:%S"
    2021-06-13 09:23:12
    

    将当前系统时间设置为指定时间:

    date -s "20210613 9:27:00"
    Sun Jun 13 09:27:00 CST 2021
    

    wget 命令

    通常我们在服务器搭建生产环境就会经常用到 wget 从网上下载程序包,如果不加任何参数,它就会将链接资源下载到当前目录,例如我从网上下载一份 PDF 文件,效果如下:

    wget http://www.linuxprobe.com/docs/LinuxProbe.pdf    # 下载
    
    --2021-06-13 10:12:14--  http://www.linuxprobe.com/docs/LinuxProbe.pdf
    Resolving www.linuxprobe.com (www.linuxprobe.com)... 59.37.142.226
    Connecting to www.linuxprobe.com (www.linuxprobe.com)|59.37.142.226|:80... connected.
    HTTP request sent, awaiting response... 301 Moved Permanently
    Location: https://www.linuxprobe.com/docs/LinuxProbe.pdf [following]
    --2021-06-13 10:12:14--  https://www.linuxprobe.com/docs/LinuxProbe.pdf
    Connecting to www.linuxprobe.com (www.linuxprobe.com)|59.37.142.226|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 17676281 (17M) [application/pdf]
    Saving to: 'LinuxProbe.pdf'
    
    LinuxProbe.pdf                                             100%[=====================================================================================================================================>]  16.86M  29.2MB/s    in 0.6s
    
    2021-06-13 10:12:15 (29.2 MB/s) - 'LinuxProbe.pdf' saved [17676281/17676281]
    

    然后我们查看目录

    ls
    LinuxProbe.pdf
    

    另外 wget 还有一些命令参数,大概了解就好:

    参数 作用
    -b 后台下载
    -P 指定目录
    -t 尝试次数
    -r 递归下载
    |-p 下载所有资源

    ps 命令

    查看系统进程状态,通常会和 | grep 管道符号一起使用,我们通常执行 ps aux 可以看到以下输出:

    ps aux
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root           1  0.0  0.5 177084 10100 ?        Ss   Mar02   1:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
    root           2  0.0  0.0      0     0 ?        S    Mar02   0:02 [kthreadd]
    root           3  0.0  0.0      0     0 ?        I<   Mar02   0:00 [rcu_gp]
    root           4  0.0  0.0      0     0 ?        I<   Mar02   0:00 [rcu_par_gp]
    

    简单说一下每列所代表的含义:

    • USER 进程的所有者
    • PID 进程 ID ( kill 命令指定的就是这里的 ID)
    • %CPU CPU 占用率
    • %MEM 内存占用率
    • VSZ 虚拟内存使用量,单位是 KB
    • RSS 固定的内存占用量,单位是 KB
    • TTY 所在终端
    • STAT 进程状态(重点!,下面会详细说一下)
    • START 启动时间
    • TIME 使用 CPU 的时间
    • COMMAND 进程相关的参数和命令

    在 Linux 系统中,有 5 种常见的进程状态(上面的 STAT 标题)

    • R 运行或等待运行
    • S 中断或处于休眠中
    • D 不可中断,即使 kill 命令也不能将其终端
    • Z 进程已中止,但是进程描述符依然存在
    • T 进程已停止

    top 命令

    可以实时监控进程活动和系统负载等信息,Windows | Mac OS X 里面的活动监视器,字段详情如下:

    # top 系统时间,up 运行时间,users 登陆终端数,load average 系统平均负载
    top - 15:55:42 up 102 days, 17:15,  2 users,  load average: 0.00, 0.00, 0.00
    # Tasks 进程总数,running 运行中的进程数,sleeping 睡眠进程数,stopped 停止的进程数,zombie 僵死的进程数
    Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
    # 用户资源百分比,系统内核占用资源百分比,……空闲资源百分比
    %Cpu(s):  0.5 us,  0.3 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st
    # 物理内存,内存使用量,内存空闲量,内核缓存的内存量
    MiB Mem :   1723.2 total,    133.9 free,    732.1 used,    857.2 buff/cache
    # 虚拟内存总量,虚拟内存使用量,虚拟内存空闲量,……
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.    832.9 avail Mem
    # 进程运行列表
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     228727 root      10 -10  172776  23340  10092 S   1.3   1.3 228:14.78 AliYunD+
     228682 root      10 -10   43328   5424   3792 S   0.3   0.3  13:08.95 AliYunD+
          1 root      20   0  177084  10100   7208 S   0.0   0.6   1:24.99 systemd
          2 root      20   0       0      0      0 S   0.0   0.0   0:02.27 kthreadd
    

    pidof 命令

    可以通过服务名称查询进程的 PID,如下:

    pidof mongod
    226807
    

    kill 命令

    如果要终止指定的服务进程,通常会使用 pidof 查询的的 PID,然后使用 kill 干掉它

    kill 226807
    

    killall 命令

    通常很多复杂软件不止一个进程,使用 kill 会比较麻烦,使用 killall [参数][服务名称] 则会方便很多,驶入

    pidof httpd
    13581 13580 13578 13577
    killall httpd
    

    状态检测命令

    以下命令都超级实用,掌握了之后,对于线上问题排查会很大的帮助作用

    ifconfig 命令

    服务器网络应该是程序员检查最多的状态,很多时候服务器无法访问,程序员第一时间检查网络是否正常,Linux 中使用 ifconfig 用于获取网卡配置与网络状态。我们主要关注以下几个指标即可:

    • 网卡名称,inet 参数后面的 IP 地址
    • ether 参数后面的网卡物理地址,也是 MAC 地址
    • RX,TX 接收数据包与发送数据包的个数累积流量

    我们看一个示例:

    ifconfig
    # 网卡名称
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            # IP 地址
            inet 172.19.119.156  netmask 255.255.240.0  broadcast 172.19.127.255
            inet6 fe80::216:3eff:fe14:3ae3  prefixlen 64  scopeid 0x20<link>
            # MAC 地址
            ether 00:16:3e:14:3a:e3  txqueuelen 1000  (Ethernet)
            # 接收的数据包
            RX packets 5544498  bytes 3279315266 (3.0 GiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            # 发送的数据包
            TX packets 4845972  bytes 984357847 (938.7 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    uname 命令

    查看系统版本信息时,就需要用上该命令,通常会加上选项参数 -a 使用,不然只输出 Linux 似乎没有任何意义,如下:

    uname -a
    Linux iZwz9bvey7lnzwc5wzksanZ 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00:20:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    

    以上信息解析如下:

    • 内核名称:Linux
    • 主机名:iZwz9bvey7lnzwc5wzksanZ
    • 内核发行版:4.18.0-193.28.1.el8_2.x86_64
    • 节点名称:#1
    • 系统时间:SMP Thu Oct 22 00:20:22 UTC
    • 硬件信息以及操作系统等:x86_64 x86_64 x86_64 GNU/Linux

    当然如果你需要查看当前发行版的信息,需要查看 redhat-release 文件,命令如下:

    cat /etc/redhat-release
    CentOS Linux release 8.2.2004 (Core)
    

    uptime 命令

    一个简洁的查看系统负载信息的命令,使用如下:

    uptime
    16:47:02 up 102 days, 18:06,  5 users,  load average: 0.00, 0.00, 0.00
    

    可以很方便的查看系统运行时间,连接终端数量,平均负载信息等。顺带一提,关于平均负载的几个注意事项:

    • 平均负载是指系统最近 1 分钟、5 分钟、15 分钟内的压力情况
    • 负载值通常来说是越低越好,尽量不要长期超过 1,生产环境不要超过 5

    free 命令

    显示当前系统的内存情况,直接输出是字节数,加上 free -h 更符合人类的阅读习惯,如下:

                  total        used        free      shared  buff/cache   available
    Mem:          1.7Gi       751Mi       113Mi       2.0Mi       858Mi       813Mi
    Swap:            0B          0B          0B
    

    总内存书,已使用,未使用这里很清晰就不多讲了。

    who 命令

    查看登陆主机的用户终端信息,有时候用来排查谁修改配置,黑客攻击等情况:

    who
    root     pts/0        Jun 13 15:44 (120.85.126.66)
    root     pts/1        Jun 13 15:55 (120.85.126.66)
    root     pts/2        Jun 13 16:23 (120.85.126.66)
    

    last 命令

    用于查看所有系统的登陆记录,这些信息都是以日志文件保存,很容易被篡改

    last
    root     pts/5        120.85.126.66    Sun Jun 13 16:57   still logged in
    root     pts/4        120.85.126.66    Sun Jun 13 16:46   still logged in
    root     pts/3        120.85.126.66    Sun Jun 13 16:35   still logged in
    ..... 这里省略一万条登陆信息 .....
    

    history 命令

    这应该是我最常用的命令,可以查看当前用户最近执行过的 1000 条命令,如果觉得不够的话可以修改 /etc/profile 文件中的 HISTSIZE 变量(其实大多数场景下够用了),甚至大多数场景都是比较多的,我通常还会在后面增加数组选项来限制它的输出,如下:

    history 5
    325  history 15
    326  clear
    327  man history
    328  history
    329  history 5
    

    可以看到我最近输入了 300 多条命令,因为有参数的限制,所以它只输出了最后 5 条,历史命令都被保存在用户目录的 .bash_history 文件中(Linux 使用 . 开头的均代表隐藏文件),可以使用 cat 查看文档内容:

    cat ~/.bash_history
    

    如果要清空历史命令,可以使用 -c 选项,如下:

    history -c
    

    sosreport 命令

    这个应该很少用,就是用于生成系统的诊断文档,提供给技术支持人员查看的,因为很少用就不详细概述了


    工作目录命令

    不同于图形化操作系统,想要 Linux 系统来回穿梭,不得不掌握这些命令

    pwd 命令

    显示当前所在的目录,普通用户登陆进入默认在 /home/当前用户 的目录下,如果是 root 用户则在根目录的 /root 目录下:

    pwd
    /root
    

    cd 命令

    切换目录的命令,常见的用法是 cd [目录名称],当然还有一些其他的用法,查看示例:

    cd /etc   # 进入 /etc 目录
    cd /bin   # 进入 /bin 目录
    cd ..     # 切换到当前目录的上一级
    cd ~      # 切换到当前用户目录的根目录
    

    ls 命令

    显示目录的文件列表,常用的选项参数有:

    • -a 查看全部文件,包括隐藏文件
    • -l 查看文件的属性

    示例:

    ls -al
    
    dr-xr-xr-x.  17 root root  244 Mar  2 22:37 .
    dr-xr-xr-x.  17 root root  244 Mar  2 22:37 ..
    -rw-r--r--    1 root root    0 Nov 20  2020 .autorelabel
    lrwxrwxrwx.   1 root root    7 May 11  2019 bin -> usr/bin
    dr-xr-xr-x.   5 root root 4096 Nov 20  2020 boot
    drwxr-xr-x   19 root root 2960 Jun 12 11:32 dev
    drwxr-xr-x.  96 root root 8192 Mar  2 22:42 etc
    drwxr-xr-x.   2 root root    6 Jun 11 16:05 home
    ........ 这里省略很多目录 ........
    

    文本编辑命令

    前面讲的都是系统信息查询,切换,那么找到文件,编辑命令自然是要派上用场的,Linux 下常用的编辑命令有:

    cat 命令

    主要用于查看 内容较少的文本,如果加上 -n 选项参数还能看到行号,如下:

    cat -n ecs_network_optimization.log
    
         1	running /sbin/ecs_mq_rps_rfs
         2	========  ECS network setting starts 2021-03-02 22:37:28 ========
         3	optimize network performance: current device eth0
         4	set and check multiqueue on eth0
         5	only support 1 queue; no need to enable multiqueue on eth0
         6	OK. irqbalance stoped.
         7	max node :0
         8	mask:1, irq:29
         9	mask:2, irq:30
        10	========  ECS network setting END 2021-03-02 22:37:28  ========
    

    more 命令

    主要用于查看 内容较多的文本more 面对大量文本相比 cat 有如下优势:

    • 不会快速翻滚,文本底部会有百分比来提示已阅读多少内容
    • 使用快捷键可以进行翻页

    大概是这样

    more dnf.log
    2021-05-26T12:10:13Z DDEBUG Command: dnf makecache --timer
    2021-05-26T12:10:13Z DDEBUG Installroot: /
    2021-05-26T12:10:13Z DDEBUG Releasever: 8
    2021-05-26T12:10:13Z DEBUG cachedir: /var/cache/dnf
    2021-05-26T12:10:13Z DDEBUG Base command: makecache
    2021-05-26T12:10:13Z DDEBUG Extra commands: ['makecache', '--timer']
    2021-05-26T12:10:13Z DEBUG Unknown configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-epel.repo; Configuration: OptionBinding with id "failovermethod" does not exist
    2021-05-26T12:10:13Z DEBUG Making cache files for all metadata files.
    2021-05-26T12:10:13Z DEBUG AppStream: has expired and will be refreshed.
    2021-05-26T12:10:13Z DEBUG BaseOS: has expired and will be refreshed.
    --More--(0%)    # 显示阅读进度
    

    head 命令

    如果不需要完整阅读文档,只查看前 N 行就可以使用 head 命令,不加参数默认是前 10 行,可以使用 -n 参数指定输出的行数,效果如下:

    head  dnf.log
    2021-05-26T09:08:04Z INFO Metadata cache created.
    2021-05-26T09:08:04Z DDEBUG Cleaning up.
    2021-05-26T10:08:13Z INFO --- logging initialized ---
    2021-05-26T10:08:13Z DDEBUG timer: config: 2 ms
    2021-05-26T10:08:13Z DEBUG Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, needs-restarting, playground, repoclosure, repodiff, repograph, repomanage, reposync
    2021-05-26T10:08:13Z DEBUG DNF version: 4.2.23
    2021-05-26T10:08:13Z DDEBUG Command: dnf makecache --timer
    2021-05-26T10:08:13Z DDEBUG Installroot: /
    2021-05-26T10:08:13Z DDEBUG Releasever: 8
    2021-05-26T10:08:13Z DEBUG cachedir: /var/cache/dnf
    

    tail 命令

    跟 head 相反,这里输出日志的最后 N 行,但是 tail 更常用,得益于 -f 参数可以实时监控输出,所以用于查报错日志,监控日志输出的时候特别有用,也是平时在服务器上很常用的一个命令

    tail -f dnf.log
    2021-06-13T10:24:02Z DDEBUG Command: dnf makecache --timer
    2021-06-13T10:24:02Z DDEBUG Installroot: /
    2021-06-13T10:24:02Z DDEBUG Releasever: 8
    2021-06-13T10:24:02Z DEBUG cachedir: /var/cache/dnf
    2021-06-13T10:24:02Z DDEBUG Base command: makecache
    2021-06-13T10:24:02Z DDEBUG Extra commands: ['makecache', '--timer']
    2021-06-13T10:24:02Z DEBUG Unknown configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-epel.repo; Configuration: OptionBinding with id "failovermethod" does not exist
    2021-06-13T10:24:02Z DEBUG Making cache files for all metadata files.
    2021-06-13T10:24:02Z INFO Metadata cache refreshed recently.
    2021-06-13T10:24:02Z DDEBUG Cleaning up.
    > # 这里不会终止,一直监控日志的输出
    

    tr 命令

    用于大批量替换文本,通常结合管道符号使用,这里就不详细描述了(其实我更喜欢通过 VIM 来替换文本)

    wc 命令

    统计文本的行数、字数、字节数,比较常用的参数有:

    • -l 只现实行数
    • -w 只显示单词数
    • -c 只显示字节数

    我们可以找一个日志文件看看:

    wc dnf.log
    8863  71220 682533 dnf.log
    

    还有一个有趣的玩法是用来统计 /etc/passwd 文件的行数可以统计当前系统有多少用户(/etc/passwd 保存系统的用户信息):

    wc -l /etc/passwd
    29 /etc/passwd
    

    stat 命令

    相当于 Windows 查看文件属性,可以看到文件具体的存储信息和时间

    stat ip_address
      File: ip_address
      Size: 12        	Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 100709276   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2021-06-13 18:33:47.951395782 +0800
    Modify: 2021-06-13 18:33:47.951395782 +0800
    Change: 2021-06-13 18:33:47.951395782 +0800
     Birth: -
    

    cut 命令

    可以让每行字符按照特定的格式输出,例如我们刚才的 /etc/passwd 文件,如果我们只看用户名的话,直接使用 cat 可能会让控制台多出很多无关的字符:

    cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ....
    

    使用 cut 可以帮我们过滤很多噪音数据

    cut -d: -f1 /etc/passwd
    root
    bin
    daemon
    adm
    

    diff 命令

    可以比较多个文件之间的差异,还可以使用 --brief 来比较文件是否相同,不过很多场地可以被 git diff 来替代,我简单创建 2 个文件看看示例:

    diff -c ip_address ip_address_2
    *** ip_address	Sun Jun 13 18:33:47 2021
    --- ip_address_2	Sun Jun 13 19:49:37 2021
    ***************
    *** 1 ****
    --- 1,2 ----
      192.168.0.0
    + 192.168.100.100
    

    文件目录管理

    这里主要描述对文件的创建、修改、复制、剪切、更名、删除等操作

    touch 命令

    touch 可以创建空白文件,这里就不介绍了,现在基本都在使用 vim fileName 命令创建并编辑文件了,touch 主要还是用于修改文件的时间戳:

    # 创建一个当前文件
    echo "hello world" >> hello.cfg
    
    ls 
    # 查看时间戳
    -rw-r--r-- 1 root root 12 Jun 13 20:06 hello.cfg
    
    # 使用 touch 让它时光倒流
    touch -d "2017-06-13 20:00" hello.cfg
    
    ls
    # 文件时间已被修改
    -rw-r--r-- 1 root root 12 Jun 13  2017 hello.cfg
    

    mkdir 命令

    就创建一个目录,这没啥好说的。。

    mkdir demo_directorie
    drwxr-xr-x 2 root root  6 Jun 13 20:11 demo_directorie
    

    cp 命令

    就是复制文件和目录,命令格式:cp[选项]用法也很简单:

    # 复制 hello.cfg  文件,新文件命名 h2.cfg
    cp hello.cfg h2.cfg
    # 复制 text_edit/ 目录
    cp -r text_edit/ t2
    

    更多选项参数可以使用 man 查看

    mv 命令

    就是移动文件,如果文件目录不变则视为重命名操作,示例:

    ls /home  # 查看空目录
    mv h2.cfg /home # 把当前目录下文件移动到 /home 目录下
    ls /home # h2.cfg 移动过来
    h2.cfg
    
    cd /home
    mv h2.cfg h5.cfg # 重命名操作
    

    rm 命令

    常用的主要是删除文件、目录,Linux 从安全考虑每次删除都会询问,如下:

    rm h5.cfg
    rm: remove regular file 'h5.cfg'?
    

    如果你觉得烦,并且确认删除操作安全的话,可以加上 -f 选项参数避开这个提示,另外删除目录也需要加 -r 来表示递归操作,示例:

    # 递归删除 /text_edit 目录,并且不提示
    rm -rf text_edit
    

    dd 命令

    比较有意思的命令,可以指定大小的数据块来复制文件,官方对它的解释是:

    Copy a file, converting and formatting according to the operands.

    这命令用得少,但是我们还是可以了解一下基本玩法的,例如我们可以从 /dev/zero 里面抽取一个指定大小的数据块(随便来一个 500M 吧),我们看示例

    dd if=/dev/zero of=500_file count=1 bs=560M
    1+0 records in
    1+0 records out
    587202560 bytes (587 MB, 560 MiB) copied, 4.3654 s, 135 MB/s
    

    dd 的功能还不止复制这么简单,有时候可以把抽取的数据制作成其他格式文件,例如 ISO 这在 Windows 要借助第三方专业软件才能做到,因为很少用,这里就不详细展开了

    file 命令

    由于 Linux 系统所有一切都成为文件,而且单凭后缀无法区分具体类型的时候,就需要 file 命令来查看文件类型了:

    # 数据类型
    file 500_file
    500_file: data
    
    # 文本类型
    echo 'hello world' >> h2.txt
    file h2.txt
    h2.txt: ASCII text
    

    打包压缩与搜索

    网上下载软件包安装,或者把 Linux 文件打包发给别人,都离不开压缩/解压命令,所以这里也很重要,值得了解一下

    tar 命令

    主要对文件压缩/解压操作,虽然网上的压缩格式比较多,但基本都是 tar 衍生出来的,所以不用担心要记太多的命令,用好 tar 就可以了,我们先看压缩示例代码,后面再讲参数详情,这样会比较有趣一点

    # 压缩 /etc 目录到 etc.tar.gz
    tar -czvf etc.tar.gz /etc
    
    /etc/
    /etc/mtab
    /etc/fstab
    /etc/crypttab
    ....
    
    # 打包完成后,可以在当前目录看到压缩文件
    ll -h
    -rw-r--r-- 1 root root 5.2M Jun 13 22:44 etc.tar.gz
    

    那么如何把文件解压到指定目录呢 ?请看示例代码

    # 解压文件到 /root/etc 目录
    tar -xzvf etc.tar.gz -C /root/etc
    
    etc/
    etc/mtab
    etc/fstab
    etc/crypttab
    etc/resolv.conf
    .....
    

    压缩和解压命令参数都比较长,压缩用 -czvf 解压用 -xzvf,他们各自的具体含义,我们看看 tar 比较常用的选项参数的含义:

    • -c 压缩文件
    • -x 解压文件
    • -t 查看压缩包的文件
    • -z 使用 Gzip 压缩/解压(常用)
    • -v 显示压缩/解压的过程(墙裂推荐)
    • -f 目标的文件名
    • -C 解压到指定目录

    还有很多不常用的参数,可以使用 man 查看文档

    grep 命令

    对于很多需要文本搜索的场景都会用到 grep,大多会配合管道 | 使用,grep 很少会配合选项参数使用,后面简单介绍几个常用的选项参数,如果嗨还有兴趣的话可以通过 man grep 命令保存,示例程序:

    # 使用 grep 过滤不允许再登陆系统的用户
    cat /etc/passwd | grep /sbin/nologin
    
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    一些常用的选项参数:

    • -b 将 binary 文件当作 text 来搜索
    • -c 仅显示匹配文本的行数
    • -i 忽略大小写
    • -n 显示行号
    • -v 反向,列出没有"关键字"的行

    find 命令

    搜索工作一般都是通过 find 命令来完成的,它可以通过多维度来搜索文件(名称,大小,时间,权限等),我们先看一个简单的示例:

    # 特定目录下的 文件模糊匹配 (不想限制目录的话,可以移除)
    find /root -name 'phoenix*'
    
    # 匹配项
    /root/.halo/upload/2021/03/phoenix_logo-332a6c083168451a9887c3d9cd675993.jpg
    /root/.halo/upload/2021/03/phoenix_logo-332a6c083168451a9887c3d9cd675993-thumbnail.jpg
    /root/phoenix.txt
    

    通过权限搜索(我暂时想不到有什么使用场景)

    find / -perm -4000
    
    /var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
    /var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
    ......
    

    find 常用的选项参数:

    • -name 名称匹配
    • -perm 权限匹配
    • -user 用户匹配
    • -group 用户组匹配
    • -size 匹配文件大小

    .... 更多参数还是要用的时候再查文档。

    到这里差不多,有点累,我要休息一下了。

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/xiao2shiqi/p/14881604.html
Copyright © 2011-2022 走看看