Linux中端口,进程,文件查找及输出的详解

1.端口

  • lsof(list open files)

    • lsof -i 端口号:(查看端口是否被占用)

      [root@centos-master ~]# lsof -i :22
      COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      sshd     1097 root    5u  IPv4  22183      0t0  TCP *:ssh (LISTEN)
    • lsof -i 列出当前系统打开文件的工具

      [root@centos-master ~]# lsof -i
      COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      chronyd     825 chrony    6u  IPv4  18564      0t0  UDP VM-24-7-centos:323
      chronyd     825 chrony    7u  IPv6  18565      0t0  UDP VM-24-7-centos:323
      NetworkMa  1027   root   25u  IPv4  21550      0t0  UDP centos-master:bootpc->_gateway:bootps
      sshd       1097   root    5u  IPv4  22183      0t0  TCP *:ssh (LISTEN)
      kubelet    1102   root   16u  IPv4  29804      0t0  TCP VM-24-7-centos:46279 (LISTEN)
      kubelet    1102   root   24u  IPv4  79483      0t0  TCP centos-master:51190->centos-master:sun-sr-https (SYN_SENT)
      kubelet    1102   root   25u  IPv4  80041      0t0  TCP centos-master:51210->centos-master:sun-sr-https (SYN_SENT)
      kubelet    1102   root   31u  IPv4  80042      0t0  TCP centos-master:51214->centos-master:sun-sr-https (SYN_SENT)
      kubelet    1102   root   32u  IPv6  28518      0t0  TCP *:10250 (LISTEN)
      kubelet    1102   root   33u  IPv4  79415      0t0  TCP centos-master:51168->centos-master:sun-sr-https (SYN_SENT)
      kubelet    1102   root   36u  IPv4  29826      0t0  TCP VM-24-7-centos:10248 (LISTEN)
      kubelet    1102   root   37u  IPv4  78696      0t0  TCP centos-master:51180->centos-master:sun-sr-https (SYN_SENT)
      nginx      1134   root    8u  IPv4  23267      0t0  TCP *:http (LISTEN)
      nginx      1135 nobody    8u  IPv4  23267      0t0  TCP *:http (LISTEN)
      secu-tcs-  1178   root    9u  IPv4  52553      0t0  TCP centos-master:48034->180.97.118.234:nsesrvr (ESTABLISHED)
      tat_agent  1270   root   17u  IPv4  36221      0t0  TCP centos-master:46896->169.254.0.138:d-s-n (ESTABLISHED)
      kube-cont  2677   root    7u  IPv4  32361      0t0  TCP VM-24-7-centos:10257 (LISTEN)
      kube-cont  2677   root   12u  IPv4  80043      0t0  TCP centos-master:51218->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root    7u  IPv4  33194      0t0  TCP VM-24-7-centos:10259 (LISTEN)
      kube-sche  2723   root    8u  IPv4  79270      0t0  TCP centos-master:51164->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root    9u  IPv4  79271      0t0  TCP centos-master:51166->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root   10u  IPv4  78660      0t0  TCP centos-master:51174->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root   11u  IPv4  78767      0t0  TCP centos-master:51192->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root   12u  IPv4  79761      0t0  TCP centos-master:51212->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root   13u  IPv4  79762      0t0  TCP centos-master:51216->centos-master:sun-sr-https (SYN_SENT)
      kube-sche  2723   root   14u  IPv4  80079      0t0  TCP centos-master:51226->centos-master:sun-sr-https (SYN_SENT)
  • netstat

    • netstat -tunlp:显示TCP,udp的端口和进程等相关情况

      [root@centos-master ~]# netstat -tunlp
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1097/sshd
      tcp        0      0 127.0.0.1:46279         0.0.0.0:*               LISTEN      1102/kubelet
      tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      4882/python3
      tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      1102/kubelet
      tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1134/nginx: master
      tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      2677/kube-controlle
      tcp        0      0 127.0.0.1:10259         0.0.0.0:*               LISTEN      2723/kube-scheduler
      tcp6       0      0 :::10250                :::*                    LISTEN      1102/kubelet
      udp        0      0 127.0.0.1:323           0.0.0.0:*                           825/chronyd
      udp6       0      0 ::1:323                 :::*                                825/chronyd
    • 参数

      -t (tcp)    #仅显示tcp相关选项
      -u (udp)   #仅显示udp相关选项
      -n    #拒绝显示别名,能显示数字的全部转化为数字
      -l    #仅列出在Listen(监听)的服务状态
      -p    #显示建⽴相关链接的程序名
    •  netstat -tunlp | grep 端口号   :查看端口是否被占用

      [wq@centos-master ~]# netstat -tunlp | grep  22
      (Not all processes could be identified, non-owned process info
       will not be shown, you would have to be root to see it all.)
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
      [wq@centos-master ~]# netstat -tunlp | grep  80
      (Not all processes could be identified, non-owned process info
       will not be shown, you would have to be root to see it all.)
      tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

2.进程

    Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

    ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

  • ps -A 列出所有的进程

    [wq@centos-master ~]# ps -A
        PID TTY          TIME CMD
          1 ?        00:00:02 systemd
          2 ?        00:00:00 kthreadd
          3 ?        00:00:00 rcu_gp
          4 ?        00:00:00 rcu_par_gp
          6 ?        00:00:00 kworker/0:0H-events_highpri
          9 ?        00:00:00 mm_percpu_wq
         10 ?        00:00:00 ksoftirqd/0
         11 ?        00:00:01 rcu_sched
         12 ?        00:00:00 migration/0
         13 ?        00:00:00 watchdog/0
         14 ?        00:00:00 cpuhp/0
         15 ?        00:00:00 cpuhp/1
         16 ?        00:00:00 watchdog/1
         17 ?        00:00:00 migration/1
         18 ?        00:00:00 ksoftirqd/1
         20 ?        00:00:00 kworker/1:0H-events_highpri
         23 ?        00:00:00 kdevtmpfs
  • ps -w 显示加宽可以显示较多的资讯

    [wq@centos-master ~]# ps -w
        PID TTY          TIME CMD
      24612 pts/13   00:00:00 bash
      24889 pts/13   00:00:00 ps
  • ps -au 显示较详细的资讯

    [wq@centos-master ~]# ps -au
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root        1292  0.0  0.0  19340  2192 ttyS0    Ss+  10:01   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,960
    root        1293  0.0  0.0  16772  1808 tty1     Ss+  10:01   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
    root        3780  0.0  0.1  28716  5544 pts/1    Ss+  10:03   0:00 -bash
    root        4222  0.0  0.1  28584  5272 pts/7    Ss   10:03   0:00 -bash
    zl          4264  0.0  0.1  26328  5208 pts/8    Ss   10:03   0:00 -bash
    root        4351  0.0  0.1  28584  5376 pts/9    Ss+  10:04   0:00 -bash
    root        5098  0.0  0.1  28584  5160 pts/10   Ss+  10:05   0:00 -bash
    root        6354  0.0  0.1  28584  5252 pts/0    Ss+  10:08   0:00 -bash
    zl          7119  0.1  0.1  69408  5100 pts/8    S+   10:10   0:03 top
    wuya       20055  0.0  0.1  29608  5764 pts/3    Ss+  10:43   0:00 -bash
    jc         20137  0.0  0.1  26328  5036 pts/4    Ss   10:43   0:00 -bash
    jc         20188  0.1  0.1  69408  5128 pts/4    S+   10:43   0:00 top
    root       20200  0.0  0.1 138616  6244 pts/7    S    10:43   0:00 su cl
    cl         20201  0.0  0.1  26352  5148 pts/7    S    10:43   0:00 bash
    rq         20287  0.0  0.1  26460  5168 pts/5    Ss   10:43   0:00 -bash
    rq         20334  0.1  0.1  69408  4940 pts/5    S+   10:43   0:00 top
    cl         20341  0.1  0.1  69408  5140 pts/7    S+   10:43   0:00 top
    yl         20459  0.0  0.1  26460  5000 pts/2    Ss   10:44   0:00 -bash
    lm         20558  0.0  0.1  26328  5096 pts/6    Ss   10:44   0:00 -bash
    yl         20584  0.1  0.1  69408  5012 pts/2    S+   10:44   0:00 top
    lm         20631  0.1  0.1  69408  4924 pts/6    S+   10:44   0:00 top
    wq         20703  0.0  0.1  26460  5276 pts/12   Ss+  10:44   0:00 -bash
    xl         22070  0.0  0.1  26460  5124 pts/11   Ss   10:47   0:00 -bash
    xl         22253  0.1  0.1  69408  5016 pts/11   S+   10:48   0:00 top
    wq         24612  0.0  0.1  26460  5272 pts/13   Ss   10:54   0:00 -bash
    wq         25117  0.0  0.1  62704  4380 pts/13   R+   10:55   0:00 ps -au
  • ps -elf 显示详细的资讯,包括PPID

    [wq@centos-master ~]# ps -elf
    F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
    4 S root           1       0  0  80   0 - 43463 -      10:01 ?        00:00:02 /usr/lib/systemd/systemd --switched-root
    1 S root           2       0  0  80   0 -     0 -      10:01 ?        00:00:00 [kthreadd]
    1 I root           3       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [rcu_gp]
    1 I root           4       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [rcu_par_gp]
    1 I root           6       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [kworker/0:0H-events_highpri]
    1 I root           9       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [mm_percpu_wq]
    1 S root          10       2  0  80   0 -     0 -      10:01 ?        00:00:00 [ksoftirqd/0]
    1 I root          11       2  0  80   0 -     0 -      10:01 ?        00:00:01 [rcu_sched]
    1 S root          12       2  0 -40   - -     0 -      10:01 ?        00:00:00 [migration/0]
    5 S root          13       2  0 -40   - -     0 -      10:01 ?        00:00:00 [watchdog/0]
    1 S root          14       2  0  80   0 -     0 -      10:01 ?        00:00:00 [cpuhp/0]
    1 S root          15       2  0  80   0 -     0 -      10:01 ?        00:00:00 [cpuhp/1]
    5 S root          16       2  0 -40   - -     0 -      10:01 ?        00:00:00 [watchdog/1]
    1 S root          17       2  0 -40   - -     0 -      10:01 ?        00:00:00 [migration/1]
    1 S root          18       2  0  80   0 -     0 -      10:01 ?        00:00:00 [ksoftirqd/1]
    1 I root          20       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [kworker/1:0H-events_highpri]
    5 S root          23       2  0  80   0 -     0 -      10:01 ?        00:00:00 [kdevtmpfs]
    1 I root          24       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [netns]
    1 S root          25       2  0  80   0 -     0 -      10:01 ?        00:00:00 [rcu_tasks_trace]
    1 S root          26       2  0  80   0 -     0 -      10:01 ?        00:00:00 [rcu_tasks_rude_]
    1 S root          27       2  0  80   0 -     0 -      10:01 ?        00:00:00 [kauditd]
    1 S root          28       2  0  80   0 -     0 -      10:01 ?        00:00:00 [khungtaskd]
    1 S root          29       2  0  80   0 -     0 -      10:01 ?        00:00:00 [oom_reaper]
    1 I root          30       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [writeback]
    1 S root          31       2  0  80   0 -     0 -      10:01 ?        00:00:00 [kcompactd0]
    1 S root          32       2  0  85   5 -     0 -      10:01 ?        00:00:00 [ksmd]
    1 S root          33       2  0  99  19 -     0 -      10:01 ?        00:00:00 [khugepaged]
    1 I root          34       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [crypto]
    1 I root          35       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [kintegrityd]
    1 I root          36       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [kblockd]
    1 I root          37       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [blkcg_punt_bio]
    1 I root          38       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [tpm_dev_wq]
    1 I root          39       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [md]
    1 I root          40       2  0  60 -20 -     0 -      10:01 ?        00:00:00 [edac-poller]
  • ps -aux 显示所有包含其他使用者的行程

    [wq@centos-master ~]# ps -aux
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root           1  0.0  0.2 173852 10772 ?        Ss   10:01   0:02 /usr/lib/systemd/systemd --switched-root --system --droot           2  0.0  0.0      0     0 ?        S    10:01   0:00 [kthreadd]
    root           3  0.0  0.0      0     0 ?        I<   10:01   0:00 [rcu_gp]
    root           4  0.0  0.0      0     0 ?        I<   10:01   0:00 [rcu_par_gp]
    root           6  0.0  0.0      0     0 ?        I<   10:01   0:00 [kworker/0:0H-events_highpri]
    root           9  0.0  0.0      0     0 ?        I<   10:01   0:00 [mm_percpu_wq]
    root          10  0.0  0.0      0     0 ?        S    10:01   0:00 [ksoftirqd/0]
    root          11  0.0  0.0      0     0 ?        I    10:01   0:01 [rcu_sched]
    root          12  0.0  0.0      0     0 ?        S    10:01   0:00 [migration/0]
    root          13  0.0  0.0      0     0 ?        S    10:01   0:00 [watchdog/0]
    root          14  0.0  0.0      0     0 ?        S    10:01   0:00 [cpuhp/0]
    root          15  0.0  0.0      0     0 ?        S    10:01   0:00 [cpuhp/1]
    root          16  0.0  0.0      0     0 ?        S    10:01   0:00 [watchdog/1]
    root          17  0.0  0.0      0     0 ?        S    10:01   0:00 [migration/1]
    root          18  0.0  0.0      0     0 ?        S    10:01   0:00 [ksoftirqd/1]
    root          20  0.0  0.0      0     0 ?        I<   10:01   0:00 [kworker/1:0H-events_highpri]
    root          23  0.0  0.0      0     0 ?        S    10:01   0:00 [kdevtmpfs]
    root          24  0.0  0.0      0     0 ?        I<   10:01   0:00 [netns]
    root          25  0.0  0.0      0     0 ?        S    10:01   0:00 [rcu_tasks_trace]
    root          26  0.0  0.0      0     0 ?        S    10:01   0:00 [rcu_tasks_rude_]
    root          27  0.0  0.0      0     0 ?        S    10:01   0:00 [kauditd]
    root          28  0.0  0.0      0     0 ?        S    10:01   0:00 [khungtaskd]
    root          29  0.0  0.0      0     0 ?        S    10:01   0:00 [oom_reaper]
    root          30  0.0  0.0      0     0 ?        I<   10:01   0:00 [writeback]
    root          31  0.0  0.0      0     0 ?        S    10:01   0:00 [kcompactd0]
    root          32  0.0  0.0      0     0 ?        SN   10:01   0:00 [ksmd]
  • ps au(x) 输出格式 

    USER     #进程拥有者
    PID       #进程ID
    %CPU      #占用的CPU使用率
    %MEM      #占用的内存使用率
    VSZ       #占用的虚拟记忆体大小
    RSS       #占用的记忆体大小
    TTY       #终端的次要装置号码 (minor device number of tty)
    STAT      #该进程的状态
    [D: 无法中断的休眠状态 (通常 IO 的进程),R: 正在执行中,S: 静止状态,T: 暂停执行,
    Z: 不存在但暂时无法消除,W: 没有足够的记忆体分页可分配,<: 高优先序的行程,N: 低优先序的行程
    L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)]
    START #进程开始时间 TIME #执行时间 COMMAND #所执行的指令
  • 显示指定用户信息:ps -u 用户名

    [wq@centos-master ~]# ps -u wq
        PID TTY          TIME CMD
      20693 ?        00:00:00 systemd
      20696 ?        00:00:00 (sd-pam)
      20702 ?        00:00:00 sshd
      20703 pts/12   00:00:00 bash
      24611 ?        00:00:00 sshd
      24612 pts/13   00:00:00 bash
      43230 ?        00:00:00 sshd
      43231 pts/2    00:00:00 bash
      43799 pts/2    00:00:00 ps

 3.文件查找

  • find

    Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
    如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
    • 按照名称查找:find path(路径) -name  文件名

      [root@centos-master ~]# find / -name python3
      /etc/alternatives/python3
      /var/lib/alternatives/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/etc/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/usr/bin/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/usr/share/lintian/overrides/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/usr/share/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/usr/share/doc/python3
      /var/lib/docker/overlay2/de7c794a997536eae02d9ed41d09c344b0770ce39902d2e20ab7cd3929f82cbb/diff/usr/lib/python3
      /usr/local/qcloud/python/bin/python3
      /usr/bin/python3
      /usr/share/bash-completion/completions/python3
      [root@centos-master ~]# find / -name nginx
      /usr/local/nginx
      /usr/local/nginx/sbin/nginx 
    • 模糊查找:*代表所有,?代表一个字符串,/d表示整形数字,/D表示字符串

      [root@centos-master ~]# find / -name ngi*
      /sys/fs/cgroup/blkio/system.slice/nginx.service
      /sys/fs/cgroup/pids/system.slice/nginx.service
      /sys/fs/cgroup/cpu,cpuacct/system.slice/nginx.service
      /sys/fs/cgroup/memory/system.slice/nginx.service
      /sys/fs/cgroup/devices/system.slice/nginx.service
      /sys/fs/cgroup/systemd/system.slice/nginx.service
      /etc/systemd/system/multi-user.target.wants/nginx.service
      /usr/local/nginx
      /usr/local/nginx/sbin/nginx
      /usr/local/nginx/sbin/nginx.old
      /usr/local/nginx/logs/nginx.pid
      /usr/local/nginx/conf/nginx.conf.default
      /usr/local/nginx/conf/nginx.conf.bak
      /usr/local/nginx/conf/nginx.conf
      /usr/lib/python3.6/site-packages/sos/report/plugins/nginx.py
      /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/nginx.cpython-36.pyc
      /usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/nginx.cpython-36.opt-1.pyc
    • find path -size +大小 :根据文件大小查找

      查找根目录下大于100M的文件
      [root@centos-master ~]# find / -size +102400
      /root/mq/otp_src_23.0.tar.gz
      /proc/kcore
      find: ‘/proc/195343/task/195343/fd/6’: No such file or directory
      find: ‘/proc/195343/task/195343/fdinfo/6’: No such file or directory
      find: ‘/proc/195343/fd/5’: No such file or directory
      find: ‘/proc/195343/fdinfo/5’: No such file or directory
      /boot/initramfs-0-rescue-18d21b10f101401ea5d08fa347024367.img
      /boot/initramfs-0-rescue-940f597f0c554e1887f4976a627c7def.img
      /boot/initramfs-0-rescue-cfa8a069bf8747439d6b6ffa995517d2.img
      /boot/initramfs-0-rescue-33790f3e0323419f9a055840e9d10b13.img
      /boot/initramfs-0-rescue-3aa41ff1dee349f9bfbe2ebec1913390.img
  • whereis:查找程序位置

    Linux whereis命令用于查找文件。
    
    该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
    
    该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
    -b  只查找二进制文件。
    -B<目录>  只在设置的目录下查找二进制文件。
    -f  不显示文件名前的路径名称。
    -m  只查找说明文件。
    -M<目录>  只在设置的目录下查找说明文件。
    -s  只查找原始代码文件。
    -S<目录>  只在设置的目录下查找原始代码文件。
    -u  查找不包含指定类型的文件。
    [root@centos-master ~]# whereis nginx
    nginx: /usr/local/nginx
    [root@centos-master ~]# whereis python3 python3: /usr/bin/python3.6m /usr/bin/python3.6 /usr/bin/python3 /usr/lib/python3.6 /usr/lib64/python3.6 /usr/local/lib/python3.6 /usr/include/python3.6m /usr/share/man/man1/python3.1.gz
  • which:查找环境变量文件

    Linux which命令用于查找文件。
    
    which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
    [root@centos-master ~]# which mv
    alias mv='mv -i'
            /usr/bin/mv
    
    [root@centos-master ~]# which ls
    alias ls='ls --color=auto'
            /usr/bin/ls
    • 参数

      -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
      -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
      -w  指定输出时栏位的宽度。
      -V  显示版本信息。

4.输出

  • echo:shell脚本的输出指令

    [root@centos-master ~]# echo "hello world"
    hello world
    [root@centos-master ~]# echo "hello Linux"
    hello Linux
  • printf

    printf 命令模仿 C 程序库(library)里的 printf() 程序。
    
    printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
    
    printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。

    默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
    • shell脚本的输出

      shell脚本
      #!/bin/bash
      # author:特昂糖
      
      printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
      printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
      printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
      printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

      运行脚本输出:

      [root@centos-master ~]# ./asd.sh
      姓名     性别   体重kg
      郭靖     男      66.12
      杨过     男      48.65
      郭芙     女      47.99
    • 格式替代符

      %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
      
      %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
      
      %-4.2f 指格式化为小数,其中 .2 指保留2位小数。

      shell脚本

      #!/bin/bash
      # author:特昂糖
      
      # format-string为双引号
      printf "%d %s\n" 1 "abc"
      
      # 单引号与双引号效果一样
      printf '%d %s\n' 1 "abc"
      
      # 没有引号也可以输出
      printf %s abcdef
      
      # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
      printf %s abc def
      
      printf "%s\n" abc def
      
      printf "%s %s %s\n" a b c d e f g h i j
      
      # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
      printf "%s and %d \n"
      [root@centos-master ~]# ./index.sh
      1 abc
      1 abc
      abcdefabcdefabc
      def
      a b c
      d e f
      g h i
      j
       and 0
    • printf 的转义序列

      序列 说明
      \a 警告字符,通常为ASCII的BEL字符
      \b 后退
      \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
      \f 换页(formfeed)
      \n 换行
      \r 回车(Carriage return)
      \t 水平制表符
      \v 垂直制表符
      \\ 一个字面上的反斜杠字符
      \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
      \0ddd 表示1到3位的八进制值字符
    • 终端的输出

      [root@centos-master ~]# printf "我叫:%s,\n我的年龄:%d,\n我的薪资:%f \n" 特昂糖 21 999.99
      我叫:特昂糖,
      我的年龄:21,
      我的薪资:999.990000

       

 

上一篇:linux网卡绑定


下一篇:47.第十章 网络协议和管理配置(八)