Linux基本命令

Linux基本命令

一、设置别名

  1. 临时别名
#alias 可以列出别名
root@fishman-160 etc]# alias vimens33="vim /etc/sysconfig/network-scripts/ifcfg-ens33"
#删除别名
[root@fishman-160 etc]# unalias vimens33 
  1. 永久别名(当前用户)
[root@fishman-160 ~]# vim .bashrc #编辑home目录下的.bashrc


# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vimens33='vim /etc/sysconfig/network-scripts/ifcfg-ens33'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

[root@fishman-160 ~]# source .bashrc #重启bashrc生效

  1. 永久开启(全局)
[root@fishman-160 ~]# vim /etc/bashrc

#bashrc配置中添加
alias vimens33='vim /etc/sysconfig/network-scripts/ifcfg-ens33'

[root@fishman-160 ~]# source /etc/bashrc

1700720970197

二、 切换路径

[kc@fishman-160 root]$ cd ~ #切换到home目录
[kc@fishman-160 ~]$ pwd
/home/kc
[kc@fishman-160 ~]$ cd /etc/sysconfig/network-scripts/ #切换到network-scripts文件目录下
[kc@fishman-160 network-scripts]$ pwd #显示当前路径
/etc/sysconfig/network-scripts
[kc@fishman-160 network-scripts]$ cd - #返回切换前目录
/home/kc

三、查看历史命令

  1. 当前命令记录
[root@fishman-160 ~]# history
    1  ls
    2  ll
    3  ping www.baidu.com
    4  tty
    5  ls
    6  ls /dev
    7  ls -l /dev/
    8  ls -dl /etc/
    9  ls -dl /etc
   10  cd ~
   11  ls
   12  ls -al
   13  vim .bash_history
   14  history

  1. 历史命令记录(上一次关机前)
[root@fishman-160 ~]# vim .bash_history

ls
ll
ping www.baidu.com
tty
ls
ls /dev
ls -l /dev/
ls -dl /etc/
ls -dl /etc

  1. 写入终端上的临时历史记录
[root@fishman-160 ~]# history -a

[root@fishman-160 ~]# vim .bash_history

ls
ll
ping www.baidu.com
tty
ls
ls /dev
ls -l /dev/
ls -dl /etc/
ls -dl /etc
cd ~
ls
ls -al
vim .bash_history
history
vim .bash_history
history -a

  1. 删除终端上的临时历史记录
[root@fishman-160 ~]# history

    1  ls
    2  ll
    3  ping www.baidu.com
    4  tty
    5  ls
    6  ls /dev
    7  ls -l /dev/
    8  ls -dl /etc/
    9  ls -dl /etc
   10  cd ~
   11  ls
   12  ls -al
   13  vim .bash_history
   14  history
   15  vim .bash_history
   16  history -a
   17  vim .bash_history
   18  cd .
   19  history
   
[root@fishman-160 ~]# history -c #删除临时的历史命令记录
[root@fishman-160 ~]# history

    1  history

  1. 快速查找历史命令
ctrl + r:command
光标上下键
!数字
!字符串

四、ctrl 快捷键

ctrl + C #终止前台运行程序
ctrl + D #退出,等价exit
ctrl + L #清屏
ctrl + R #搜索历史命令
!$ # 引用上一个命令的最后一个参数

五、系统时间管理

两种时间:

#查看硬件时间
[root@fishman-160 ~]# hwclock
2023-07-07 15:41:50.539898+08:00
#查看系统时间
[root@fishman-160 ~]# date
2023年 07月 07日 星期五 15:41:55 CST

时区:

  • UTC:世界标准时间
  • GMT:格林尼治时间
  • CST:中国标准时间

修改时间:

date 参数:

-s, --set=STRING set time described by STRING

[root@fishman-160 ~]# date -s '1990-01-01'
1990年 01月 01日 星期一 00:00:00 CST
[root@fishman-160 ~]# hwclock
2023-07-07 15:46:46.882858+08:00
[root@fishman-160 ~]# date
1990年 01月 01日 星期一 00:00:08 CST

去时间的年/月/日:

[root@fishman-160 ~]# date "+%F"
1990-01-01

通过 chrony 同步时间

[root@fishman-160 test]# systemctl enable chronyd #通过执行 sudo systemctl enable chronyd 命令,您将启用 chronyd 服务,并设置为系统启动时自动启动该服务,以确保系统时间的准确同步。
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service → /usr/lib/systemd/system/chronyd.service.
[root@fishman-160 test]# systemctl start chronyd 
[root@fishman-160 test]# chronyc tracking 
Reference ID    : 74CB974A (a.chl.la)
Stratum         : 3
Ref time (UTC)  : Mon Jul 10 08:16:13 2023
System time     : 0.003856908 seconds slow of NTP time
Last offset     : -0.004796174 seconds
RMS offset      : 0.004796174 seconds
Frequency       : 0.000 ppm slow
Residual freq   : -4659.021 ppm
Skew            : 1000000.000 ppm
Root delay      : 0.297051758 seconds
Root dispersion : 1.567858815 seconds
Update interval : 1.7 seconds
Leap status     : Normal
[root@fishman-160 test]# date
2023年 07月 10日 星期一 16:16:17 CST 
[root@fishman-160 test]# chronyc sources #检查同步时间情况
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp.wdc2.us.leaseweb.net      2   6   267     1    +21ms[  +21ms] +/-  231ms
^* a.chl.la                      2   6    77     8    -45ms[  -62ms] +/-  172ms
^- electrode.felixc.at           3   6    77     6  -9003us[-9003us] +/-  202ms
^- dns1.synet.edu.cn             2   6    77     7   +125ms[ +125ms] +/- 1198ms

[root@fishman-160 ~]# date #时间被改为2033年
2033年 05月 10日 星期二 00:02:22 CST
[root@fishman-160 ~]# chronyc tracking #先校准时间服务器
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000000 seconds slow of NTP time
Last offset     : -0.006858718 seconds
RMS offset      : 15152211.000000000 seconds
Frequency       : 15.074 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 65.3 seconds
Leap status     : Not synchronised
[root@fishman-160 ~]# date
2033年 05月 10日 星期二 00:03:00 CST
[root@fishman-160 ~]# chronyc -a makestep #手动同步命令
200 OK
[root@fishman-160 ~]# date
2023年 07月 28日 星期五 10:18:40 CST

格式化FORMAT输出参数:

参数 描述
%F 完整日期格式,等价于 %Y-%m-%d
%T 时间,等于%H:%M:%S
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%Y 年份
%m month (01..12)
%d 按月计的日期(例如:01)
%H 小时(00-23)
%I 小时(00-12)
%M minute (00..59)
%S 秒(00-60)
%s seconds since 1970-01-01 00:00:00 UTC

显示由字符串显示的时间,而不是当前时间

[root@fishman-160 ~]# date
1990年 01月 01日 星期一 00:18:51 CST
[root@fishman-160 ~]# date -d "+1 months" +%F
1990-02-01

time 测试命令的运行时间

[root@fishman-160 ~]# time ls -l
总用量 8
drwxr-xr-x. 2 root root    6 7月   6 2023 公共
drwxr-xr-x. 2 root root    6 7月   6 2023 模板
drwxr-xr-x. 2 root root    6 7月   6 2023 视频
drwxr-xr-x. 2 root root    6 7月   6 2023 图片
drwxr-xr-x. 2 root root    6 7月   6 2023 文档
drwxr-xr-x. 2 root root    6 7月   6 2023 下载
drwxr-xr-x. 2 root root    6 7月   6 2023 音乐
drwxr-xr-x. 2 root root    6 7月   6 2023 桌面
-rw-------. 1 root root 1229 7月   6 2023 anaconda-ks.cfg
-rw-r--r--. 1 root root 1759 7月   6 2023 initial-setup-ks.cfg

real	0m0.003s #实际使用时间
user	0m0.002s #用户状态使用时间
sys	    0m0.001s #内核状态使用时间

六、开关机命令

root@fishman-160 ~]# shutdown +10 #10分钟后关机
Shutdown scheduled for Mon 1990-01-01 00:38:44 CST, use 'shutdown -c' to cancel.
[root@fishman-160 ~]# shutdown -c
[root@fishman-160 ~]# shutdown -h 22:00 #定时在22点关机
Shutdown scheduled for Mon 1990-01-01 22:00:00 CST, use 'shutdown -c' to cancel.
[root@fishman-160 ~]# shutdown -c
[root@fishman-160 ~]# shutdown -r 23:00 #定时在23:00重启
Shutdown scheduled for Mon 1990-01-01 23:00:00 CST, use 'shutdown -c' to cancel.
[root@fishman-160 ~]# shutdown -c

七、查看内核版本

[root@fishman-160 ~]# uname -r 
4.18.0-500.el8.x86_64 #X86_64代表64位

八、awk、sed的`或$一些结合

[root@fishman-160 ~]# echo www.baidu.com > domain.txt
[root@fishman-160 ~]# sed -n '1p' domain.txt
www.baidu.com
[root@fishman-160 ~]# ping `sed -n '1p' domain.txt`
PING www.a.shifen.com (180.101.50.242) 56(84) bytes of data.
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=1 ttl=128 time=27.1 ms
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=2 ttl=128 time=31.0 ms

[root@fishman-160 ~]# ping `awk '/www/ {print}' domain.txt ` 
PING www.a.shifen.com (180.101.50.188) 56(84) bytes of data.
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=1 ttl=128 time=21.6 ms
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=2 ttl=128 time=33.9 ms
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=3 ttl=128 time=30.1 ms

[root@fishman-160 ~]# rpm  -ql  $(rpm -qa | grep rz)  
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/lib/.build-id
/usr/lib/.build-id/b2
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0.1
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0.2
/usr/lib/.build-id/f2
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19.1
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19.2
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz

[root@fishman-160 ~]# rpm -ql $(rpm -qf `which rz`)
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/lib/.build-id
/usr/lib/.build-id/b2
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0.1
/usr/lib/.build-id/b2/25f21df8a410853ff0ca69c273bfd6166a36a0.2
/usr/lib/.build-id/f2
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19.1
/usr/lib/.build-id/f2/29412bed6b8d68690555e59b6910cf19b44a19.2
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz

九、查看系统shell

[root@fishman-160 ~]# cat /etc/shells
/bin/sh
/bin/bash	
/usr/bin/sh
/usr/bin/bash

[root@fishman-160 ~]# cat /etc/passwd | awk -F ':' '{print $7}'|sort|uniq #通过sort|uniq来排序去重,
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
#uniq 命令默认只能去重连续出现的行,如果要对整个文件进行去重操作,需要先对文件进行排序,然后再使用 uniq 命令去重。

十、快速切换shell

/bin/bash
[root@fishman-160 ~]# chsh
Changing shell for root.
New shell [/bin/bash]
/bin/zsh
Shell changed.

十一、永久修改系统语言

[root@fishman-160 ~]# cat /etc/locale.conf 
LANG="zh_CN.UTF-8"
[root@fishman-160 ~]# source /etc/locale.conf

十二、sort

数字排序

[root@fishman-160 ~]# cat number.txt | sort #默认情况下,sort 命令使用词法排序(按照字符顺序)对文本行进行排序,由小到大
1
100
124
13
24
43
45
53
54
67
7
78
8
85
99
99
[root@fishman-160 ~]# cat number.txt | sort -r #以首字母数字大小来排序,由大到小
99
99
85
8
78
7
67
54
53
45
43
24
13
124
100
1
[root@fishman-160 ~]# !s #使用了历史命令的方法
sort -n number.txt  #sort -n: 使用 -n 选项后,sort 命令会按照数值大小对文本行进行排序。
1
7
8
13
24
43
45
53
54
67
78
85
99
99
100
124

字符串排序

[root@fishman-160 ~]# cat /etc/passwd | sort #以首字母字符串大小来排序,默认又小到大
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:992:988::/var/lib/chrony:/sbin/nologin
clevis:x:994:990:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
cockpit-wsinstance:x:982:982:User for cockpit-ws instances:/nonexisting:/sbin/nologin
cockpit-ws:x:983:983:User for cockpit web service:/nonexisting:/sbin/nologin
colord:x:981:981:User for colord:/var/lib/colord:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
root@fishman-160 ~]# cat /etc/passwd | sort -r #以首字母字符串大小来排序,反转后又大到小
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:996:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sssd:x:984:985:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
setroubleshoot:x:980:977::/var/lib/setroubleshoot:/sbin/nologin

组合使用

-t 指定一个用来区分键位置字符

-k 后面跟数字,指定按第几列进行排序

-r 反序排序

[root@fishman-160 ~]# cat /etc/passwd |sort -n  -t":" -k3 -r |more
#使用了 sort 命令来对 /etc/passwd 文件进行排序。下面解释每个选项的含义:
-n: 表示按照数值来排序。默认情况下,sort 命令按照字母顺序进行排序,使用 -n 参数可以确保按照数字大小进行排序。
-t:: 指定字段分隔符为 :。这是因为 /etc/passwd 文件的每一行都是由冒号 : 分隔的不同字段组成的。
-k3: 指定按照第三个字段进行排序。在 /etc/passwd 文件中,第三个字段是用户的 UID(用户ID)。
-r: 表示按照逆序(降序)进行排序,即从大到小。

kc:x:1000:1000:kc:/home/kc:/bin/bash
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
unbound:x:996:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
pipewire:x:995:991:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
clevis:x:994:990:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
gluster:x:993:989:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:992:988::/var/lib/chrony:/sbin/nologin
dnsmasq:x:987:987:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
saslauth:x:986:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:985:986:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
sssd:x:984:985:User for sssd:/:/sbin/nologin
cockpit-ws:x:983:983:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:982:982:User for cockpit-ws instances:/nonexisting:/sbin/nologin
colord:x:981:981:User for colord:/var/lib/colord:/sbin/nologin
setroubleshoot:x:980:977::/var/lib/setroubleshoot:/sbin/nologin
flatpak:x:979:976:User for flatpak system helper:/:/sbin/nologin
gnome-initial-setup:x:978:975::/run/gnome-initial-setup/:/sbin/nologin
pesign:x:977:974:Group for the pesign signing daemon:/run/pesign:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
...

找出目录下所有文件,按文件体积从小到大排序

[root@fishman-160 ~]# du -h /etc | sort #从小到大,按照字符顺序
0	/etc/accountsservice
0	/etc/accountsservice/user-templates
0	/etc/authselect/custom
0	/etc/avahi/services
0	/etc/binfmt.d
0	/etc/chkconfig.d
0	/etc/cifs-utils
0	/etc/cni
0	/etc/cockpit/machines.d
0	/etc/cockpit/ws-certs.d
0	/etc/containers/certs.d
0	/etc/containers/oci
0	/etc/containers/oci/hooks.d
0	/etc/containers/systemd
0	/etc/cron.monthly
0	/etc/cron.weekly
...
[root@fishman-160 ~]# du -h /etc | sort -r #从大到小,按照字符顺序
9.8M	/etc/selinux/targeted
9.8M	/etc/selinux
96K	/etc/pki/pesign-rh-test
96K	/etc/pki/pesign
96K	/etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.362.b08-3.el8.x86_64/lib
96K	/etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.362.b08-3.el8.x86_64
96K	/etc/java/java-1.8.0-openjdk
96K	/etc/java
96K	/etc/dnf
968K	/etc/brltty/Input
92K	/etc/brltty/Input/ht

[root@fishman-160 ~]# du -h /etc | sort -r -n
1020K	/etc/selinux/targeted/contexts/files
968K	/etc/brltty/Input
924K	/etc/brltty/Text
860K	/etc/pki/ca-trust/extracted/pem
616K	/etc/pki/ca-trust/extracted/openssl
608K	/etc/ssh
436K	/etc/containers
404K	/etc/containers/registries.conf.d
344K	/etc/sane.d
284K	/etc/asciidoc
264K	/etc/vmware-tools
244K	/etc/xdg
216K	/etc/libvirt
212K	/etc/xdg/autostart
180K	/etc/vmware-tools/vgauth/schemas
180K	/etc/vmware-tools/vgauth
160K	/etc/sysconfig
160K	/etc/pki/ca-trust/extracted/java
160K	/etc/pki/ca-trust/extracted/edk2
160K	/etc/brltty/Input/pm
152K	/etc/lvm
152K	/etc/dbus-1
144K	/etc/dbus-1/system.d
128K	/etc/brltty/Input/bm

[root@fishman-160 ~]# du -h /etc | sort -rh #用于查看 /etc 目录下各个文件和子目录的磁盘使用情况,并按照磁盘使用大小从大到小进行排序。
33M	/etc
11M	/etc/udev
9.8M	/etc/selinux/targeted
9.8M	/etc/selinux
8.7M	/etc/selinux/targeted/policy
3.6M	/etc/brltty
2.2M	/etc/pki
1.8M	/etc/pki/ca-trust/extracted
1.8M	/etc/pki/ca-trust
1.7M	/etc/brltty/Contraction
1.1M	/etc/selinux/targeted/contexts
1020K	/etc/selinux/targeted/contexts/files
968K	/etc/brltty/Input
924K	/etc/brltty/Text
860K	/etc/pki/ca-trust/extracted/pem
616K	/etc/pki/ca-trust/extracted/openssl
608K	/etc/ssh

[root@fishman-160 ~]# du -h --max-depth=1 /root |sort -rh |head -10 #--max=depth=1 只查看一层的
44M	/root
25M	/root/nginx-1.25.1
15M	/root/.cache
364K	/root/.local
104K	/root/.config
8.0K	/root/.dbus
0	/root/.pki
0	/root/.mozilla
0	/root/桌面
0	/root/音乐

1700731623237

十三、ctrl

ctrl+c是发送SIGINT信号,终止一个进程

ctrl+z是发送SIGSTOP信号,挂起一个进程,将作业放置后台

ctrl+d不是发送信号,而是一个特殊的二进制值,表示EOF。代表输入完成或者注销

十四、调整设置终端root@的颜色

1690601614553

[root@fishman-160 ~]# vi .bashrc  
#末尾添加如下一行信息
PS1='[\[\e[35;1m\]\u@\[\e[33;1m\]\h\[\e[34;1m\] \W\[\e[0m\]]\$ '

[root@fishman-160 ~]# source .bashrc

十五、echo

echo 是一个在命令行中常用的命令,用于将文本或变量的内容输出到标准输出设备(通常是终端)。在不同的操作系统和 shell 中,echo 的使用方式可能会有一些差异。以下是 echo 命令的基本介绍和一些常用的参数:

基本语法:

echo [选项] [字符串/变量]

基本用法:

  1. 输出字符串:

    echo "Hello, World!"
    
  2. 输出变量内容:

    name="John"
    echo "My name is $name"
    

常用选项:

  • -n:不输出末尾的换行符。

    echo -n "This is a line without a newline"
    
  • -e:解释转义字符。

    echo -e "This is a new line\nThis is the second line"
    
    echo -e "\e[1;31;43mhelloworld\e[0m"
    

    1700445434408

    ANSI 颜色码:
    
    字体样式:1-9
    
    字体颜色:30-37
    
    背景颜色:40-47
    
    \e:转义字符,表示转义序列的开始。
    
    m:后面是需要转移成ANSI颜色妈的内容
    
    \e[0m`:ANSI 转义序列的一部分,用于重置所有属性,确保后续文本不受之前的格式影响
    

    1700445724601

    转义字符:

  • \n:换行

  • \t:制表符

  • \\:反斜杠

  • \":双引号

示例:

#!/bin/bash

name="Alice"
age=25

echo "Name: $name"
echo -e "Age: $age\n"

# 使用转义字符
echo "This is a line with a \t tab character."
echo "This is a line with a backslash: \\"

# 不输出换行符
echo -n "This is a line without a newline"

# 输出到文件
echo "This is some content" > output.txt

请注意,不同的 shell 可能对 echo 命令的支持和行为有所不同。在一些现代的 shell 中,推荐使用 printf 命令,因为它提供更强大和一致的格式化功能。

十六、cat

cat 命令是一个用于连接文件并打印到标准输出的命令。它的名称来源于 "concatenate"(连接)一词,因为它最初的目的是连接文件。以下是一些 cat 命令的基础参数:

  1. 显示文件内容:

    cat filename
    

    这将在标准输出中显示指定文件的内容。

  2. 连接多个文件并显示:

    cat file1 file2
    

    这将连接 file1file2 的内容,并将结果显示在标准输出中。

    1700448960629

  3. 将文件内容追加到另一文件:

    cat file1 >> file2  #注意,file1的文件内容会替换掉file2中的
    

    这将把 file1 的内容追加到 file2 的末尾。

  4. 显示行号:

    cat -n filename
    

    这将在显示文件内容时,为每一行显示行号。

    1700448297072

  5. 显示非打印字符:

    cat -v filename
    

    这将显示文件内容,并使用^和M-符号表示非打印字符。

  6. 显示文件末尾内容(类似于tail -n):

    cat filename | tail -n N
    

    这将显示文件的最后 N 行。

  7. 显示行号,但不显示空行的行号

    此选项对非空白输出行进行编号,即对包含文本的行进行编号

    cat -b filename
    

    1700448391584

  8. 合并多个空行为一行

    cat -s filename
    

    1700448454117

  9. 显示制表符(这样可以和空格做区分)

    此选项将 TAB 字符显示为 ^I,有助于可视化输出中的制表符

    cat -T filename
    

    1700448526771

  10. 每一行结尾显示$s

    方便识别行尾

    cat -E filename
    

    1700448635635

11.cat -A

此选项相当于 -vET,结合了 -v-E-T 的效果。它显示非打印字符、行尾和制表符。

cat -A filename

1700448714336

十七、wc

wc 命令是用于计算文件或文本数据的行数、字数和字符数的工具。下面是一些基础参数:

  1. 统计行数、字数和字符数:

    wc filename
    

    这将输出文件的行数、字数和字符数。

    1700449633264

  2. 只统计行数:

    wc -l filename
    

    这将只输出文件的行数。

    1700449647916

  3. 只统计字数:

    wc -w filename
    

    这将只输出文件的字数。

    image-20231120110830621

  4. 只统计字节数:

    wc -c filename
    

    这将只输出文件的字符数。

    1700449691600

  5. 同时统计多个文件的总行数、字数和字符数:

    wc file1 file2
    

    这将输出多个文件的总行数、字数和字符数的汇总。

  6. 显示每个文件的统计结果及总和:

    wc -l -w -c file1 file2
    

    这将分别输出每个文件的行数、字数和字符数,并在最后一行显示它们的总和。

    1700450258729

  7. 统计字符数(bytes)

    • 一个字符是一种符号,可以是字母、数字、标点符号、空格或其他符号。
    • 字符可以由一个或多个字节组成,具体取决于字符的编码方式。
    • 在ASCII编码中,一个字符通常占用一个字节(8位)。
    • 在Unicode编码中,某些字符可能需要多个字节来表示,特别是一些非拉丁字符
    wc -m filename
    

    1700450313211

1700450331646

十八、printf

printf 是一个格式化输出命令,用于按照指定的格式将文本输出到终端。它的语法类似于 C 语言的 printf 函数。

基本的 printf 语法如下:

printf FORMAT [ARGUMENT]...
  • FORMAT 是一个格式字符串,用于定义输出的格式。
  • ARGUMENT 是要格式化的值。

以下是一些常见的 printf 格式说明符:

  • %s:格式化字符串。
  • %d:格式化为整数。
  • %f:格式化为浮点数。
  • %c:格式化为字符。
  • %x:格式化为十六进制数。

示例:

printf "Hello, %s!\n" "World"

这将输出:

Hello, World!

更多示例:

printf "The number is %d\n" 42
# Output: The number is 42

printf "The float is %.2f\n" 3.14159
# Output: The float is 3.14

printf "The character is %c\n" 'A'
# Output: The character is A

printf "The hex number is %x\n" 255
# Output: The hex number is ff

你还可以使用字段宽度、精度和对齐等选项来定制输出。例如,左对齐:

printf "%-10s\n" "Left"
# Output: Left

或者右对齐:

printf "%10s\n" "Right"
# Output:      Right

printf 是一个强大而灵活的工具,可以根据需要进行定制化输出。

例:

printf "%-3s %2d %2d %2d\n" "xm" "11" "22" "33" \
&& printf "%-3s %2d %2d %2d\n" "xmm" "33" "44" "53"

十九、xargs

xargs 是一个用于构建和执行命令行命令的实用程序。它从标准输入读取数据,并将其作为参数传递给指定的命令。这使得 xargs 特别适用于处理由其他命令或脚本生成的大量数据。

基础参数

  1. -n, --max-args=MAX-ARGS:
    • 指定每个命令行中传递给命令的参数的最大数量。例如,-n 1 表示每个命令行只传递一个参数。
  2. -I, --replace[=REPLACE-STR]:
    • 替换字符串。默认情况下,xargs 将替换字符串 {} 视为要插入参数的位置。使用 -I 可以指定其他替换字符串。
  3. -d, --delimiter=DELIM:
    • 指定输入行分隔符,默认为空格。可以用于处理包含空格或其他特殊字符的文件名。
  4. -p, --interactive:
    • 在执行每个命令之前询问用户是否要执行。
  5. -t, --verbose:
    • 输出要执行的命令,以便查看实际执行的命令。

应用示例

  1. 从文件中读取行并执行命令:

    cat file.txt | xargs -n 1 echo
    

    将文件中的每一行作为参数传递给 echo 命令。

  2. 查找并删除文件:

    find /path/to/directory -type f -name "*.txt" -print | xargs rm
    

    查找所有 .txt 文件并使用 xargs 将它们传递给 rm 命令删除。

  3. 使用 findxargs 执行并行处理:

    find /path/to/directory -type f -print0 | xargs -0 -P 4 -n 1 echo
    

    在这个例子中,-P 4 表示并行处理的最大任务数为 4。

  4. 使用 grep 过滤文件:

    ls | xargs grep "pattern"
    

    列出当前目录的文件并将它们传递给 grep 命令进行模式匹配。

  5. 交互式执行命令:

    ls | xargs -p -n 1 rm
    

    对每个文件执行 rm 命令,并在执行之前询问用户是否要执行。

这些示例只是 xargs 的一小部分用法,它可以根据具体的需求进行更灵活的定制。请注意,xargs 在处理文件名中包含空格或其他特殊字符的情况下非常有用,因为它可以处理输入行的分隔符。

image-20231121131644997

二十、ls

ls 是用于列出文件和目录的命令。它是 Unix 和类 Unix 操作系统中常见的命令,用于查看文件系统中的文件和目录信息。下面是 ls 命令的一些基本介绍和常用参数:

基本语法

bashCopy code
ls [选项] [文件或目录]

常用选项

  1. -l:

    • 以长格式显示,包括文件的详细信息,如权限、所有者、文件大小、修改时间等。
    ls -l
    
  2. -a:

    • 显示所有文件,包括以.开头的隐藏文件。
    ls -a
    
  3. -h:

    • 以人类可读的格式显示文件大小(K、M、G 等)。
    ls -lh
    
  4. -R:

    • 递归显示子目录中的文件。
    ls -R
    
  5. -t:

    • 按修改时间排序,最新的文件先显示。
    ls -lt
    
  6. -S:

    • 按文件大小排序,最大的文件先显示。
    ls -lS
    
  7. -r:

    • 反向排序,逆序显示文件。
    ls -r
    
  8. -d:

    • 显示目录本身的信息,而不是目录中的内容。
    ls -d
    
  9. --color=auto:

    • 根据文件类型显示彩色输出。
    ls --color=auto
    

示例

  • 列出当前目录下的文件和目录:

    ls
    
  • 以长格式显示当前目录下的所有文件和目录:

    ls -l
    
  • 显示所有文件,包括隐藏文件:

    bashCopy code
    ls -a
    
  • 以人类可读的格式显示文件大小:

    ls -lh
    
  • 递归显示所有文件和子目录:

    ls -R
    

这些只是 ls 命令的一些基本用法和选项。你可以根据需要选择不同的选项来满足你的需求。如果想要查看更多选项,可以查阅 ls 命令的手册页:

man ls

1700546432105

二十一、pwd

1700548349815

有软链接testd,进入软链接后查看工作目录pwd

[root@fishman-160 test]# cd testd
[root@fishman-160 testd]# pwd
/root/test/testd

实际展示的是逻辑目录/root/test/testd

pwd -L 查看逻辑目录

[root@fishman-160 testd]# pwd -L
/root/test/testd

pwd - P查看物理目录

[root@fishman-160 testd]# pwd -P
/root/test/test

#物理目录才是真实的实际目录

1700548479295

二十二、mv

image-20231121144219947

二十三、su

1700710220138

二十四、sudo

二十五、cut

cut 命令用于从文本文件或标准输入中提取字段,它的基本语法如下:

cut OPTION... [FILE]...

cut 命令有一些常用的选项,下面是一些基础参数的介绍:

  1. -c, --characters=LIST

    • 提取指定字符位置的内容。
    • LIST 可以是单个字符的位置(例如,-c 1 提取第一个字符),也可以是字符范围(例如,-c 1-5 提取第一个到第五个字符)。
    cut -c 1-5 filename.txt
    
  2. -f, --fields=LIST

    • 提取指定字段的内容。
    • LIST 可以是单个字段的位置(例如,-f 1 提取第一个字段),也可以是字段范围(例如,-f 1,3 提取第一个和第三个字段)。
    cut -f 1,3 filename.txt
    
  3. -d, --delimiter=DELIM

    • 指定字段的分隔符,默认是制表符(tab)。
    • DELIM 可以是单个字符,也可以是多个字符。
    cut -d ":" -f 1 filename.txt
    
  4. --complement

    • 补集选项,提取除指定字段之外的内容。
    cut --complement -f 3 filename.txt
    
  5. --output-delimiter=STRING

    • 指定输出字段之间的分隔符。
    cut -d ":" -f 1 --output-delimiter="," filename.txt
    

1700722880688

二十六、tr

1. tr命令的作用

tr命令用于字符转换、替换和删除,主要用于删除文件中的控制符或进行字符串转换等。

2. tr命令格式

# 用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
commands | tr ‘string1’ ‘string2’
# 用法2:对来自于filename文件中的内容进行字符替换。
tr 'string1' 'string2' < filename
# 用法3:对来自filename文件的内容查询string1并进行相应的处理,比如删除等。
tr option 'string1' <filename

3. tr命令常用的选项

  • -d: 删除字符串
  • -s: 删除所有重复出现字符序列,只保留第一个,即将重复出现字符串压缩为一个字符串

4. 常用的匹配字符串

字符串 含义
a-z或[:lower:] 匹配所有小写字母
A-Z或[:upper:] 匹配所有大写字母
0-9或[:digit:] 匹配所有的数字
[:alnum:] 匹配所有字母和数字
[:alpha:] 匹配所有字母
[:blank:] 所有水平空白
[:punct:] 匹配所有标点符号
[:space:] 匹配所有水平或垂直的空格
[:cntrl:] 匹配所有控制字符

1700726539362

5.常用案例

5.1 如何查看文本中的控制字符

比如这里准备一个文件,demo1.conf,内容如下

name
domain
ip
area
user
password
role

vi demo1.conf 编辑文件,然后执行如下命令即可查看文件中的控制字符了‘

:set list

cat -A demo1.conf也可以实现

[root@fishman-160 ~]# cat -ET test3.txt
name$
domain$
ip$
area$
user$
password$
^Irole$
$

5.2 所有小写字母转换成大写

首相这准备一个test.txt文件

cat /etc/passwd > test.txt

内容如下

[root@fishman-160 ~]# cat test.txt
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
unbound:x:996:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pipewire:x:995:991:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
clevis:x:994:990:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
gluster:x:993:989:GlusterFS daemons:/run/gluster:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
chrony:x:992:988::/var/lib/chrony:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
dnsmasq:x:987:987:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
saslauth:x:986:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:985:986:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
sssd:x:984:985:User for sssd:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
cockpit-ws:x:983:983:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:982:982:User for cockpit-ws instances:/nonexisting:/sbin/nologin
colord:x:981:981:User for colord:/var/lib/colord:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
setroubleshoot:x:980:977::/var/lib/setroubleshoot:/sbin/nologin
flatpak:x:979:976:User for flatpak system helper:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:978:975::/run/gnome-initial-setup/:/sbin/nologin
pesign:x:977:974:Group for the pesign signing daemon:/run/pesign:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sp1:x:1001:1001::/home/sp1:/bin/bash
sp2:x:1002:1002::/home/sp2:/bin/bash
sp3:x:1003:1003::/home/sp3:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
test3:x:1004:1004:test user:/home/test3:/bin/bash

执行下面命令即可将test.txt中小写替换为大写,并写入demo.txt

tr ’a-z‘ 'A-Z' < test.txt > demo.txt	
[root@fishman-160 ~]# tr 'a-z' 'A-Z' <test.txt > demo.txt
[root@fishman-160 ~]# cat demo.txt
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
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
NOBODY:X:65534:65534:KERNEL OVERFLOW USER:/:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
SYSTEMD-COREDUMP:X:999:997:SYSTEMD CORE DUMPER:/:/SBIN/NOLOGIN
SYSTEMD-RESOLVE:X:193:193:SYSTEMD RESOLVER:/:/SBIN/NOLOGIN
TSS:X:59:59:ACCOUNT USED FOR TPM ACCESS:/DEV/NULL:/SBIN/NOLOGIN
POLKITD:X:998:996:USER FOR POLKITD:/:/SBIN/NOLOGIN
GEOCLUE:X:997:995:USER FOR GEOCLUE:/VAR/LIB/GEOCLUE:/SBIN/NOLOGIN
UNBOUND:X:996:992:UNBOUND DNS RESOLVER:/ETC/UNBOUND:/SBIN/NOLOGIN
RTKIT:X:172:172:REALTIMEKIT:/PROC:/SBIN/NOLOGIN
PIPEWIRE:X:995:991:PIPEWIRE SYSTEM DAEMON:/VAR/RUN/PIPEWIRE:/SBIN/NOLOGIN
CLEVIS:X:994:990:CLEVIS DECRYPTION FRAMEWORK UNPRIVILEGED USER:/VAR/CACHE/CLEVIS:/SBIN/NOLOGIN
USBMUXD:X:113:113:USBMUXD USER:/:/SBIN/NOLOGIN
GLUSTER:X:993:989:GLUSTERFS DAEMONS:/RUN/GLUSTER:/SBIN/NOLOGIN
RPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGIN
CHRONY:X:992:988::/VAR/LIB/CHRONY:/SBIN/NOLOGIN
AVAHI:X:70:70:AVAHI MDNS/DNS-SD STACK:/VAR/RUN/AVAHI-DAEMON:/SBIN/NOLOGIN
DNSMASQ:X:987:987:DNSMASQ DHCP AND DNS SERVER:/VAR/LIB/DNSMASQ:/SBIN/NOLOGIN
SASLAUTH:X:986:76:SASLAUTHD USER:/RUN/SASLAUTHD:/SBIN/NOLOGIN
LIBSTORAGEMGMT:X:985:986:DAEMON ACCOUNT FOR LIBSTORAGEMGMT:/VAR/RUN/LSM:/SBIN/NOLOGIN
SSSD:X:984:985:USER FOR SSSD:/:/SBIN/NOLOGIN
QEMU:X:107:107:QEMU USER:/:/SBIN/NOLOGIN
COCKPIT-WS:X:983:983:USER FOR COCKPIT WEB SERVICE:/NONEXISTING:/SBIN/NOLOGIN
COCKPIT-WSINSTANCE:X:982:982:USER FOR COCKPIT-WS INSTANCES:/NONEXISTING:/SBIN/NOLOGIN
COLORD:X:981:981:USER FOR COLORD:/VAR/LIB/COLORD:/SBIN/NOLOGIN
RPCUSER:X:29:29:RPC SERVICE USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
PULSE:X:171:171:PULSEAUDIO SYSTEM DAEMON:/VAR/RUN/PULSE:/SBIN/NOLOGIN
SETROUBLESHOOT:X:980:977::/VAR/LIB/SETROUBLESHOOT:/SBIN/NOLOGIN
FLATPAK:X:979:976:USER FOR FLATPAK SYSTEM HELPER:/:/SBIN/NOLOGIN
GDM:X:42:42::/VAR/LIB/GDM:/SBIN/NOLOGIN
GNOME-INITIAL-SETUP:X:978:975::/RUN/GNOME-INITIAL-SETUP/:/SBIN/NOLOGIN
PESIGN:X:977:974:GROUP FOR THE PESIGN SIGNING DAEMON:/RUN/PESIGN:/SBIN/NOLOGIN
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
TCPDUMP:X:72:72::/:/SBIN/NOLOGIN
SP1:X:1001:1001::/HOME/SP1:/BIN/BASH
SP2:X:1002:1002::/HOME/SP2:/BIN/BASH
SP3:X:1003:1003::/HOME/SP3:/BIN/BASH
MYSQL:X:27:27:MYSQL SERVER:/VAR/LIB/MYSQL:/SBIN/NOLOGIN
TEST3:X:1004:1004:TEST USER:/HOME/TEST3:/BIN/BASH

5.3 将文件中的数字替换为&符号

执行如下命令即可将test.txt中的所有数字转换为&符号并写入demo.txt

tr '[:digit:]' '&' <test.txt >demo.txt	
[root@fishman-160 ~]# cat demo.txt
root:x:&:&:root:/root:/bin/bash
bin:x:&:&:bin:/bin:/sbin/nologin
daemon:x:&:&:daemon:/sbin:/sbin/nologin
adm:x:&:&:adm:/var/adm:/sbin/nologin
lp:x:&:&:lp:/var/spool/lpd:/sbin/nologin
sync:x:&:&:sync:/sbin:/bin/sync
shutdown:x:&:&:shutdown:/sbin:/sbin/shutdown
halt:x:&:&:halt:/sbin:/sbin/halt
mail:x:&:&&:mail:/var/spool/mail:/sbin/nologin
operator:x:&&:&:operator:/root:/sbin/nologin
games:x:&&:&&&:games:/usr/games:/sbin/nologin
ftp:x:&&:&&:FTP User:/var/ftp:/sbin/nologin
nobody:x:&&&&&:&&&&&:Kernel Overflow User:/:/sbin/nologin
dbus:x:&&:&&:System message bus:/:/sbin/nologin
systemd-coredump:x:&&&:&&&:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:&&&:&&&:systemd Resolver:/:/sbin/nologin
tss:x:&&:&&:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:&&&:&&&:User for polkitd:/:/sbin/nologin
geoclue:x:&&&:&&&:User for geoclue:/var/lib/geoclue:/sbin/nologin
unbound:x:&&&:&&&:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rtkit:x:&&&:&&&:RealtimeKit:/proc:/sbin/nologin
pipewire:x:&&&:&&&:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
clevis:x:&&&:&&&:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
usbmuxd:x:&&&:&&&:usbmuxd user:/:/sbin/nologin
gluster:x:&&&:&&&:GlusterFS daemons:/run/gluster:/sbin/nologin
rpc:x:&&:&&:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
chrony:x:&&&:&&&::/var/lib/chrony:/sbin/nologin
avahi:x:&&:&&:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
dnsmasq:x:&&&:&&&:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
saslauth:x:&&&:&&:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:&&&:&&&:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
sssd:x:&&&:&&&:User for sssd:/:/sbin/nologin
qemu:x:&&&:&&&:qemu user:/:/sbin/nologin
cockpit-ws:x:&&&:&&&:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:&&&:&&&:User for cockpit-ws instances:/nonexisting:/sbin/nologin
colord:x:&&&:&&&:User for colord:/var/lib/colord:/sbin/nologin
rpcuser:x:&&:&&:RPC Service User:/var/lib/nfs:/sbin/nologin
pulse:x:&&&:&&&:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
setroubleshoot:x:&&&:&&&::/var/lib/setroubleshoot:/sbin/nologin
flatpak:x:&&&:&&&:User for flatpak system helper:/:/sbin/nologin
gdm:x:&&:&&::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:&&&:&&&::/run/gnome-initial-setup/:/sbin/nologin
pesign:x:&&&:&&&:Group for the pesign signing daemon:/run/pesign:/sbin/nologin
sshd:x:&&:&&:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:&&:&&::/:/sbin/nologin
sp&:x:&&&&:&&&&::/home/sp&:/bin/bash
sp&:x:&&&&:&&&&::/home/sp&:/bin/bash
sp&:x:&&&&:&&&&::/home/sp&:/bin/bash
mysql:x:&&:&&:MySQL Server:/var/lib/mysql:/sbin/nologin
test&:x:&&&&:&&&&:test user:/home/test&:/bin/bash

5.4对命令执行结果中的冒号替换为tab制表符

[root@fishman-160 ~]# cat /etc/passwd | tr ':' '\t'
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
lp      x       4       7       lp      /var/spool/lpd  /sbin/nologin
sync    x       5       0       sync    /sbin   /bin/sync
shutdown        x       6       0       shutdown        /sbin   /sbin/shutdown
halt    x       7       0       halt    /sbin   /sbin/halt
mail    x       8       12      mail    /var/spool/mail /sbin/nologin
operator        x       11      0       operator        /root   /sbin/nologin
games   x       12      100     games   /usr/games      /sbin/nologin
ftp     x       14      50      FTP User        /var/ftp        /sbin/nologin
nobody  x       65534   65534   Kernel Overflow User    /       /sbin/nologin
dbus    x       81      81      System message bus      /       /sbin/nologin
systemd-coredump        x       999     997     systemd Core Dumper     /       /sbin/nologin
systemd-resolve x       193     193     systemd Resolver        /       /sbin/nologin
tss     x       59      59      Account used for TPM access     /dev/null       /sbin/nologin
polkitd x       998     996     User for polkitd        /       /sbin/nologin
geoclue x       997     995     User for geoclue        /var/lib/geoclue        /sbin/nologin
unbound x       996     992     Unbound DNS resolver    /etc/unbound    /sbin/nologin
rtkit   x       172     172     RealtimeKit     /proc   /sbin/nologin
pipewire        x       995     991     PipeWire System Daemon  /var/run/pipewire       /sbin/nologin
clevis  x       994     990     Clevis Decryption Framework unprivileged user   /var/cache/clevis       /sbin/nologin
usbmuxd x       113     113     usbmuxd user    /       /sbin/nologin
gluster x       993     989     GlusterFS daemons       /run/gluster    /sbin/nologin
rpc     x       32      32      Rpcbind Daemon  /var/lib/rpcbind        /sbin/nologin
chrony  x       992     988             /var/lib/chrony /sbin/nologin
avahi   x       70      70      Avahi mDNS/DNS-SD Stack /var/run/avahi-daemon   /sbin/nologin
dnsmasq x       987     987     Dnsmasq DHCP and DNS server     /var/lib/dnsmasq        /sbin/nologin
saslauth        x       986     76      Saslauthd user  /run/saslauthd  /sbin/nologin
libstoragemgmt  x       985     986     daemon account for libstoragemgmt       /var/run/lsm    /sbin/nologin
sssd    x       984     985     User for sssd   /       /sbin/nologin
qemu    x       107     107     qemu user       /       /sbin/nologin
cockpit-ws      x       983     983     User for cockpit web service    /nonexisting    /sbin/nologin
cockpit-wsinstance      x       982     982     User for cockpit-ws instances   /nonexisting    /sbin/nologin
colord  x       981     981     User for colord /var/lib/colord /sbin/nologin
rpcuser x       29      29      RPC Service User        /var/lib/nfs    /sbin/nologin
pulse   x       171     171     PulseAudio System Daemon        /var/run/pulse  /sbin/nologin
setroubleshoot  x       980     977             /var/lib/setroubleshoot /sbin/nologin
flatpak x       979     976     User for flatpak system helper  /       /sbin/nologin
gdm     x       42      42              /var/lib/gdm    /sbin/nologin
gnome-initial-setup     x       978     975             /run/gnome-initial-setup/       /sbin/nologin
pesign  x       977     974     Group for the pesign signing daemon     /run/pesign     /sbin/nologin
sshd    x       74      74      Privilege-separated SSH /var/empty/sshd /sbin/nologin
tcpdump x       72      72              /       /sbin/nologin
sp1     x       1001    1001            /home/sp1       /bin/bash
sp2     x       1002    1002            /home/sp2       /bin/bash
sp3     x       1003    1003            /home/sp3       /bin/bash
mysql   x       27      27      MySQL Server    /var/lib/mysql  /sbin/nologin
test3   x       1004    1004    test user       /home/test3     /bin/bash

5.5删除文件中的所有小写字母

[root@fishman-160 ~]# tr -d 'a-z' < /etc/passwd
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://
::12:100:://://
::14:50:FTP U://://
::65534:65534:K O U:/://
::81:81:S  :/://
-::999:997: C D:/://
-::193:193: R:/://
::59:59:A   TPM ://://
::998:996:U  :/://
::997:995:U  :///://
::996:992:U DNS ://://
::172:172:RK:/://
::995:991:PW S D:///://
::994:990:C D F  :///://
::113:113: :/://
::993:989:GFS ://://
::32:32:R D:///://
::992:988::///://
::70:70:A DNS/DNS-SD S:///-://
::987:987:D DHCP  DNS :///://
::986:76:S ://://
::985:986:   :///://
::984:985:U  :/://
::107:107: :/://
-::983:983:U    :/://
-::982:982:U  - :/://
::981:981:U  :///://
::29:29:RPC S U:///://
::171:171:PA S D:///://
::980:977::///://
::979:976:U    :/://
::42:42::///://
--::978:975:://--/://
::977:974:G     ://://
::74:74:P- SSH:///://
::72:72::/://
1::1001:1001:://1://
2::1002:1002:://2://
3::1003:1003:://3://
::27:27:MSQL S:///://
3::1004:1004: ://3://

5.6 删除文件中的数字冒号和斜线和逗号

[root@fishman-160 ~]# tr -d '[:digit:]:/' < /etc/passwd
rootxrootrootbinbash
binxbinbinsbinnologin
daemonxdaemonsbinsbinnologin
admxadmvaradmsbinnologin
lpxlpvarspoollpdsbinnologin
syncxsyncsbinbinsync
shutdownxshutdownsbinsbinshutdown
haltxhaltsbinsbinhalt
mailxmailvarspoolmailsbinnologin
operatorxoperatorrootsbinnologin
gamesxgamesusrgamessbinnologin
ftpxFTP Uservarftpsbinnologin
nobodyxKernel Overflow Usersbinnologin
dbusxSystem message bussbinnologin
systemd-coredumpxsystemd Core Dumpersbinnologin
systemd-resolvexsystemd Resolversbinnologin
tssxAccount used for TPM accessdevnullsbinnologin
polkitdxUser for polkitdsbinnologin
geocluexUser for geocluevarlibgeocluesbinnologin
unboundxUnbound DNS resolveretcunboundsbinnologin
rtkitxRealtimeKitprocsbinnologin
pipewirexPipeWire System Daemonvarrunpipewiresbinnologin
clevisxClevis Decryption Framework unprivileged uservarcacheclevissbinnologin
usbmuxdxusbmuxd usersbinnologin
glusterxGlusterFS daemonsrunglustersbinnologin
rpcxRpcbind Daemonvarlibrpcbindsbinnologin
chronyxvarlibchronysbinnologin
avahixAvahi mDNSDNS-SD Stackvarrunavahi-daemonsbinnologin
dnsmasqxDnsmasq DHCP and DNS servervarlibdnsmasqsbinnologin
saslauthxSaslauthd userrunsaslauthdsbinnologin
libstoragemgmtxdaemon account for libstoragemgmtvarrunlsmsbinnologin
sssdxUser for sssdsbinnologin
qemuxqemu usersbinnologin
cockpit-wsxUser for cockpit web servicenonexistingsbinnologin
cockpit-wsinstancexUser for cockpit-ws instancesnonexistingsbinnologin
colordxUser for colordvarlibcolordsbinnologin
rpcuserxRPC Service Uservarlibnfssbinnologin
pulsexPulseAudio System Daemonvarrunpulsesbinnologin
setroubleshootxvarlibsetroubleshootsbinnologin
flatpakxUser for flatpak system helpersbinnologin
gdmxvarlibgdmsbinnologin
gnome-initial-setupxrungnome-initial-setupsbinnologin
pesignxGroup for the pesign signing daemonrunpesignsbinnologin
sshdxPrivilege-separated SSHvaremptysshdsbinnologin
tcpdumpxsbinnologin
spxhomespbinbash
spxhomespbinbash
spxhomespbinbash
mysqlxMySQL Servervarlibmysqlsbinnologin
testxtest userhometestbinbash

5.7 针对文件每一行进行压缩,即当存在连续重复的字母时只保留一个

[root@fishman-160 ~]# tr -s 'a-z' < test.txt
axc
baweaq	

二十七、uniq

uniq 命令用于从已排序的文本输入中删除重复的行。以下是 uniq 命令的一些基础参数:

  1. 不带参数的基本用法:

    uniq filename
    

    或者

    command | uniq
    

    这将从文件或命令的输出中删除相邻的重复行,只保留一个。

  2. -c:显示每行重复出现的次数(计数):

    uniq -c filename
    

    这会在输出中显示每行重复出现的次数。

  3. -d:仅显示重复的行:

    uniq -d filename
    

    这会只显示重复的行,而不显示只出现一次的行。

  4. -u:仅显示不重复的行:

    uniq -u filename
    

    这会只显示不重复的行,而不显示重复出现的行。

  5. -i:忽略大小写:

    uniq -i filename
    

    这会在比较行时忽略大小写。

  6. -f N:跳过文件的前 N 个字段:

    uniq -f N filename
    

    这会忽略每行前 N 个字段,然后比较。

  7. -s N:跳过文件的前 N 个字符:

    uniq -s N filename
    

    这会忽略每行前 N 个字符,然后比较。

  8. --version:显示版本信息:

    uniq --version
    

    这会显示 uniq 命令的版本信息。

1700792363282

二十八、watch

watch 命令是一个用于周期性执行命令并显示输出的实用程序。以下是 watch 命令的一些基础参数:

watch [options] command

其中,optionswatch 命令的选项,command 是要执行的命令。

一些常用的选项包括:

  • -n--interval: 指定执行命令的间隔时间(秒)。例如,-n 5 表示每隔 5 秒执行一次命令。
  • -d--differences: 高亮显示每次执行命令时输出发生的变化。
  • -t--no-title: 隐藏 watch 命令的顶部标题行。
  • -h--help: 显示帮助信息,列出可用的选项。
  • -v--version: 显示 watch 命令的版本信息。

示例:

watch -n 1 "ls -l"

上述命令将每秒执行一次 ls -l 命令,并在终端上显示结果。你可以根据需要调整间隔时间和要执行的命令。

实时监控系统性能并将输出追加到文件中

watch -n 1 "top -b -n 1 >> top_out.txt"

1700793985251

二十九、pstree

pstree 是一个用于显示进程树的命令,通常在类 Unix 操作系统上使用。它以树状结构展示系统中运行的进程,方便用户查看进程之间的关系和层次。

以下是 pstree 命令的基础用法和一些常见选项:

基础用法:

pstree

默认情况下,pstree 将显示当前用户的进程树。输出将以树状结构展示,其中树的根是 init 进程,子节点是其他进程。

选项:

  1. -p(--show-pids):显示进程的 PID。

    pstree -p
    
  2. -u(--uid-users):显示进程的所有者(用户)。

    pstree -u
    
  3. -h(--highlight-pid):以高亮方式显示指定的 PID。

    pstree -h 1234
    
  4. -a(--arguments):显示进程的完整命令行,包含参数。

    pstree -a
    
  5. -l:显示进程的命令行

    pstree -l
    
  6. -n(--numeric-sort):按照进程的 PID 数字顺序排序。

    pstree -n
    
  7. -c(--compact):以紧凑的形式显示树状结构。

    pstree -c
    
  8. -G(--no-highlight):不使用颜色高亮显示。

    pstree -G
    
  9. -A(--ascii):使用 ASCII 字符绘制树状结构。

    pstree -A
    

1701407496931

三十、sar

sar(System Activity Reporter)是一个系统性能分析工具,用于收集、报告和存储系统的活动数据。sar 提供了关于系统资源使用情况的详细信息,包括 CPU、内存、磁盘、网络等方面的数据。在许多 Linux 系统中,sarsysstat 工具包的一部分。

以下是 sar 命令的基础选项和参数的介绍:

基础用法:

sar [选项] [时间间隔] [次数]
  • 选项:
    • -u:显示 CPU 使用情况。
    • -r:显示内存使用情况。
    • -b:显示缓冲区和缓存的统计信息。
    • -n DEV:显示网络接口的统计信息。
    • -d:显示块设备的统计信息。
    • -q:显示运行队列和负载平衡信息。
    • -A:显示所有可用的数据。
    • -p:显示系统的交换分区使用情况。
    • -W:显示交换分区和文件系统的统计信息。
  • 时间间隔和次数:
    • 时间间隔:指定收集数据的时间间隔(秒)。
    • 次数:指定收集数据的次数。

示例用法:

  1. 显示 CPU 使用情况,每隔 1 秒采样一次,共采样 5 次:

    sar -u 1 5
    
  2. 显示内存使用情况,每隔 5 秒采样一次,共采样 3 次:

    sar -r 5 3
    
  3. 显示网络接口 eth0 的统计信息,每隔 10 秒采样一次,共采样 4 次:

    sar -n DEV -I 10 -r 4
    
  4. 显示所有可用的数据,每隔 2 秒采样一次,共采样 6 次:

    sar -A 2 6
    

例1

2s采样一次,连续采样3次,报告I/O传输速率统计情况

sar -b 2 3

1702451556959

tps->每秒物理设备的I/O传输次数总量
rtps->每秒从物理设备读取的数据次数总量
wtps->每秒写入物理设备的数据次数总量
bread/s-> 每秒从设备读取的数据总量,以块为计量单位。块相当于扇区,因此大小为512字节
bwrth/s->每秒写入物理设备的块总数

例2

查看系统swap分区的统计情况

sar -w 1 3

1702451697483

pswpin/s-> 每秒从交换分区到系统的交换页面(swap page)数量
pswpott/s-> 每秒从系统交换到swap的交换页面(swap page)的数量

例3

内存分页统计状况

sar -B 1 3

1702451777799

pgpgpgin/s->表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s->表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s->每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s->每秒钟产生的主缺页数
pgfree/s->每秒被放入空闲队列中的页个数
pgscank/s->每秒被 kswapd 扫描的页个数
pgscand/s->每秒直接被扫描的页个数
pgsteal/s->每秒钟从 cache 中被清除来满足内存需要的页个数
%vmeff->每秒清除的页(pgsteal)占总扫描页(pgscank + pgscand)的百分比

例4

sar -d 1 3

1702451963367

DEV-> 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps->每秒I/O的传输总数
rd_sec/s-> 每秒读取的扇区的总数
wr_sec/s-> 每秒写入的扇区的 总数
avgrq-sz-> 平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz-> 磁盘请求队列的平均长度
await-> 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm-> I/O的服务处理时间,即不包括请求队列中的时间
%util ->I/O请求占用的CPU百分比,值越高,说明I/O越慢

例5

报告每个cpu状态

sar -P 2 1 3 #第一个2代表CPU,第二个1代表每隔1秒 第三个数字3 代表总共3次
#如果要看所有CPU,就用ALL

1702452234678

%user ->用户空间的CPU使用
%nice ->改变过优先级的进程的CPU使用率
%system ->内核空间的CPU使用率
%iowait ->CPU等待IO的百分比
%steal ->虚拟机的虚拟机CPU使用的CPU百分比
%idle ->空闲的CPU百分比

例6

进程队列长度和平均负载状态监控

sar -q 1 3

1702452431692

runq-sz-> 运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
plist-sz ->进程列表中的进程(processes)和线程数(threads)的数量
ldavg-1-> 最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
ldavg-5-> 最后5分钟的CPU平均负载
ldavg-15-> 最后15分钟的CPU平均负载
每间隔1秒钟统计一次总共统计三次,然后获取平均值:sar -q 1 3 | grep Average

例7

进程、inode、文件和锁表状态

sar -v 1 3

1702452510191

dentunusd ->在缓冲目录条目中没有使用的条目数量
file-nr -> 被系统使用的文件句柄数量
inode-nr -> 已经使用的索引数量
pty-nr -> 使用的pty数量

例8

报告显示任务创建和系统切换活动

sar -w 1 3

1702452587922

proc/s -> 每秒创建的任务总数
cswch/s -> 每秒上下文切换的总数

例9

显示内存使用率

sar -r 1 3

1702452718678

kbmemfree -> 空闲的物理内存大小
kbmemused -> 使用中的物理内存大小
%memused ->物理内存使用率
kbbuffers-> 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcached ->缓存的文件大小
kbcommit -> 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
%commit-> 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
kbactive -> 活动内存量(以KB为单位)(最近使用过且通常不会被回收,除非绝对必要)
kbinact ->以KB为单位的非活动内存量(较早以前使用过。它更适合被回收以用于其他目的)
kbdirty -> 等待写回磁盘的内存量(KB)
每间隔1秒钟统计一次总共统计三次,然后获取平均值:sar -r 1 3 | grep Average

例10

网络统计

sar -n DEV 1 3

1702453800005

IFACE -> 本地网卡接口的名称
rxpck/s -> 每秒钟接受的数据包
txpck/s -> 每秒钟发送的数据库
rxKB/S -> 每秒钟接受的数据包大小,单位为KB
txKB/S -> 每秒钟发送的数据包大小,单位为KB
rxcmp/s -> 每秒钟接受的压缩数据包
txcmp/s -> 每秒钟发送的压缩包
rxmcst/s -> 每秒钟接收的多播数据包

例11

保存

可以把上面的输出的报告信息保存到一个二进制文件里,把二进制文件通过sadf命令转换成数据库可读的格式如csv的格式文件,方便出图标统计。

sar -o cpu.log -u 1 3# cpu每秒1次,共3次的状态信息保存到cpu.log中,是二进制文件

1702454323085

读取

sar -f cpu.log

image-20231213160000270

转换成csv

sar -d cpu.log |sed 's/;/,/g'>cpu.csv

image-20231213160258738

用于排查性能常用的命令

CPU瓶颈: sar -u 和sar -q
内存瓶颈:sar -B、sar -r、sar -W
I/O瓶颈:sar -b、sar -u、sar -d

三十一、通过脚本添加环境变量

通过在 /etc/profile.d/ 目录下创建一个新的 shell 脚本来添加环境变量是一种在 Unix 和 Linux 系统中常见的做法。这样做有几个原因:

  1. 模块化/etc/profile 通常是系统级 shell 初始化脚本,它会在系统启动时运行。通过在 /etc/profile.d/ 下添加独立的脚本文件,可以将环境变量配置拆分成多个模块,使得管理和维护更加简单。
  2. 灵活性:你可以根据需要启用或禁用 /etc/profile.d/ 目录下的特定脚本,从而在不修改主配置文件的情况下更改环境设置。
  3. 兼容性:这种方法适用于多种 shell 环境(如 bash、sh、ksh 等),因为 /etc/profile 通常会被这些 shell 在登录时执行,而它又会执行 /etc/profile.d/ 下的所有脚本。
  4. 安全性:直接编辑系统级的配置文件(如 /etc/profile)可能会因为错误而导致系统不稳定或用户环境出现问题。通过在 /etc/profile.d/ 下添加脚本,可以减少这类风险,因为即使某个脚本有误,也不太可能影响整个系统的稳定性。
  5. 清晰性:将特定应用或功能的环境变量设置放在一个单独的文件中,可以使得其他系统管理员更容易理解这些设置的用途。
echo "PATH='/app/httpd24/bin:$PATH' >/etc/profile.d/http24.sh
  • 这条命令创建了一个名为 httpd24.sh 的新脚本文件,并写入了一行设置 PATH 环境变量的命令。这会将 /app/httpd24/bin 目录添加到现有的 PATH 中,以便系统可以找到该目录下的可执行文件。
  • ./etc/profile.d/httpd24.sh:这条命令实际上是在当前 shell 会话中执行了 httpd24.sh 脚本。这可以立即更新当前会话的 PATH 环境变量,而不需要重新登录或重启 shell。

请注意,尽管这种方法可以立即更新当前 shell 会话的环境变量,但对于新启动的 shell 会话,它们会自动执行 /etc/profile 及其包含的 /etc/profile.d/ 下的脚本,因此无需在新会话中再次手动执行这些脚本。

posted @   墨香清梦  阅读(93)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示