Linux学习-56-dmesg、free、wc、xargs 命令

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-56-dmesg、free、wc、xargs 命令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

12.23 dmesg命令:显示开机信息

  • linux在系统启动过程中,内核还会进行一次系统检测(第一次是 BIOS 进行加测),但是检测的过程不是没有显示在屏幕上,就是会快速的在屏幕上一闪而过那么,如果开机时来不及查看相关信息,使用 dmesg 命令可以在开机后查看.无论是系统启动过程中,还是系统运行过程中,只要是内核产生的信息,都会被存储在系统缓冲区中,如果开机时来不及查看相关信息,可以使用 dmesg 命令将信息调出,此命令常用于查看系统的硬件信息。除此之外,开机信息也可以通过 /var/log/ 目录中的 dmesg 文件进行查看。

  • dmesg 命令的用法很简单,基本格式如下:

[root@localhost ~]# dmesg
[root@CncLucZK test]# dmesg
[    0.000000] Linux version 4.18.0-80.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC)) #1 SMP Tue Jun 4 09:19:46 UTC 2019
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.18.0-80.el8.x86_64 root=UUID=659e6f89-71fa-463d-842e-ccdf2c06e0fe ro crashkernel=auto console=ttyS0 console=tty0 panic=5 net.ifnames=0 biosdevname=0 intel_idle.max_cstate=1 intel_pstate=disable
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  960, xstate_sizes[3]:   64
...
#查看系统学习
[root@CncLucZK test]# dmesg | grep System
[    0.000000] Reserving 160MB of memory at 576MB for crashkernel (System RAM: 2047MB)
[    1.159035] systemd[1]: Reached target Local File Systems.

12.24 free命令:查看内存使用状态

  • free 命令用来显示系统内存状态,包括系统物理内存、虚拟内存(swap 交换分区)、共享内存和系统缓存的使用情况,其输出和 top 命令的内存部分非常相似。free 命令的基本格式如下:
[root@localhost ~]# free [选项]
  • 常用的选项及各自的含义。
选项 含义
-b 以 Byte(字节)为单位,显示内存使用情况。
-k 以 KB 为单位,显示内存使用情况,此选项是 free 命令的默认选项。
-m 以 MB 为单位,显示内存使用情况。
-g 以 GB 为单位,显示内存使用情况。
-t 在输出的最终结果中,输出内存和 swap 分区的总量。
-o 不显示系统缓冲区这一列。
-s 间隔秒数 根据指定的间隔时间,持续显示内存使用情况。
[root@CncLucZK test]# free -mts 3
              total        used        free      shared  buff/cache   available
Mem:           1829         682          85           0        1061         980
Swap:          1024           7        1017
Total:         2854         689        1103

              total        used        free      shared  buff/cache   available
Mem:           1829         682          85           0        1061         980
Swap:          1024           7        1017
Total:         2854         689        1102

[root@CncLucZK ~]#free
total used free shared buffers cached	available		
Mem: 1030796 130792 900004 0 15292 55420
-/+ buffers/cache: 60080 970716
Swap: 2047992 0 2047992
  • 第一行显示的是各个列的列表头信息,各自的含义如下所示:

    • total 是总内存数;
    • used 是已经使用的内存数;
    • free 是空闲的内存数;
    • shared 是多个进程共享的内存总数;
    • buffers 是缓冲内存数;
    • cached 是缓存内存数。
  • Mem 一行指的是内存的使用情况;-/buffers/cache 的内存数,相当于第一行这些字段 used-buffers-cached的逻辑运算。+/buffers/cache 的内存数,相当于第一行这些字段 free+buffers+cached的逻辑运算;Swap 一行指的就是 swap 分区的使用情况。

  • 可以看到,系统的物理内存为 1829MB,已经使用了 682MB,空闲 85MB。而 swap 分区总大小为 1024MB,已经使用了 7MB,空闲 1017MB。

3.15 wc命令

  • 统计指定文件中的字节数、字数、行数,并将统计结果显示输出。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。wc同时也给出所指定文件的总统计数。命令格式:
wc(选项)(参数)
wc [选项]... [文件]...
wc [选项]... --files0-from=F
  • 选项如下:

    -c # 统计字节数,或--bytes或——chars:只显示Bytes数;。
    -l # 统计行数,或——lines:只显示列数;。
    -m # 统计字符数。这个标志不能与 -c 标志一起使用。
    -w # 统计字数,或——words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
    -L # 打印最长行的长度。
    -help     # 显示帮助信息
    --version # 显示版本信息
    
  • 例子

#当前目录以及子目录的所有文件行数及总计行数。
find  . * | xargs wc -l 

#查看文件的字节数、字数、行数
wc test.txt
# 输出结果
7     8     70     test.txt
# 行数 单词数 字节数 文件名
#wc命令只打印统计数字不打印文件名
wc -l < test.txt
# 输出结果
7
#统计当前目录下的文件数(不包含隐藏文件)
# 要去除TOTAL行
expr $(ls -l | wc -l) - 1
# 输出结果
8

3.16 xargs 命令

  • xargs 命令 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。

  • xargs 用作替换工具,读取输入数据重新格式化后输出。

#定义一个测试文件,内有多行文本数据:
cat test.txt
a b c d e f g
h i j k l m n

#多行输入单行输出:
cat test.txt | xargs
a b c d e f g h i j k l m n o

#使用 -n 进行多行输出
cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o

#使用 -d 分割输入 -d 选项 可以自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX
name name name name

#结合 -n 选项 使用:
echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
  • 读取 stdin,将格式化后的参数传递给命令。结合 -I 选项,xargs 的一个 选项 -I ,使用 -I 指定一个替换字符串{},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
#假设一个命令为 sk.sh 和一个保存参数的文件 arg.txt:
#!/bin/bash
#sk.sh 命令内容,打印出所有参数。
echo $*
#arg.txt 文件内容:
cat arg.txt
aaa
bbb
ccc
# -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l
#复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images
  • xargs 结合 find 使用:用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

xargs -0 将 \0 作为定界符。

find . -type f -name "*.log" -print0 | xargs -0 rm -f
#统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
#查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print0 | xargs tar -czvf images.tar.gz
  • 打印出执行的命令:结合 -t 选项可以打印出 xargs 执行的命令
#会输出当前目录下的文件列表和执行的 echo 命令
ls | xargs -t -I{} echo {}
[root@cucluczk /]# ls|xargs -t -I {} echo {}
echo bin 
bin
echo boot 
boot
echo data 
...
  • 使用 -p 选项确认执行的命令:-p 选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比如,查找当前目录下 .log 文件,每一次删除都需要确认:
find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}
#当前目录下的文件
[root@cucluczk /]# cd /etc
[root@cucluczk etc]# find . -maxdepth 1 -name "profile" | xargs -p -I {} cat {}
cat ./profile ?...n
#整体系统目录下的文件
[root@cucluczk /]# find . -type f -name "profile" | xargs -p -I {} cat {}
cat ./etc/profile ?...n
  • 使用 -I 选项可以让 xargs 执行多个命令
cat foo.txt
one
two
three

cat foo.txt | xargs -I % sh -c 'echo %; mkdir %'
one
two
three

ls
one two three
  • xargs 其他应用:假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs 下载所有链接:
cat urlist.txt | xargs wget -c
  • 子 Shell(Subshells):运行一个 shell 脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个 shell 脚本有效地运行在父 shell(parent shell) 的一个子进程里。这个父 shell 是指在一个控制终端或在一个 xterm 窗口中给你命令指示符的进程。
#如果 cmd2 是 cd /,那么就会改变子 Shell 的工作目录,这种改变只是局限于子 shell 内部,cmd5 则完全不知道工作目录发生的变化。子 shell 是嵌在圆括号 () 内部的命令序列,子 Shell 内部定义的变量为局部变量。
cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5

#子 shell 可用于为一组命令设定临时的环境变量:
COMMAND1
COMMAND2
COMMAND3
(
  IFS=:
  PATH=/bin
  unset TERMINFO
  set -C
  shift 5
  COMMAND4
  COMMAND5
  exit 3 # 只是从子 shell 退出。
)
# 父 shell 不受影响,变量值没有更改。
COMMAND6
COMMAND7

参考文献:
Linux dmesg命令:显示开机信息

下一篇:Linux学习-57-Linux数据备份与恢复

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123735.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!