首页 > 系统相关 >Linux常用命令(每日两更)

Linux常用命令(每日两更)

时间:2024-10-14 14:50:13浏览次数:9  
标签:10 -- 每日 常用命令 zy Linux txt root Rocky9

 一、Linux基础命令

1、bc数字计算器

作用:用于数字计算以及进制转换
# 安装bc工具
[root@192 ~]# yum -y install bc > /dev/null ; echo -e "\a"
​
# bc用于数字计算
[root@192 ~]# echo "1+1" | bc
2
​
# bc用于进制转换 obase表示输出的进制,ibase表示输入的进制
[root@192 ~]# echo "obase=2;ibase=10;100" | bc
1100100

2、arch打印硬件信息

# 查看当前系统多少位
[root@192 ~]# arch 
x86_64
​
# getconf LONG_BIT查看当前系统多少位
[root@192 ~]# getconf LONG_BIT
64
​
# uname -m也可以查看当前系统多少位
[root@192 ~]# uname -m
x86_64

3、tty显示当前终端信息

连接Linux服务器的时候会开启一个终端端口,每个终端都有独自的编号
# pts伪终端,如ssh连接
[zy@192 ~]$ tty
/dev/pts/0
​
# tty串行终端
[zy@192 ~]$ tty 
/dev/tty1
​
# pts1终端向pts0终端发送消息
[root@192 fd]# tty ; for i in $(seq 3);do  echo $i > /dev/pts/0 ; sleep 1 ;done
/dev/pts/1
​
[root@192 fd]# tty
/dev/pts/0
[root@192 fd]# 1
2
3 

4、who显示当前已登录的用户的信息

#显示当前用户名称
[zy@192 ~]$ whoami
zy
​
#显示当前用户的信息
[zy@192 ~]$ tty ; who am i
/dev/pts/0
zy       pts/0        2024-10-10 09:42 (192.168.106.1)
​
#显示所有用户的的信息
[zy@192 ~]$ who
zy       pts/0        2024-10-10 09:42 (192.168.106.1)
zy       pts/1        2024-10-10 09:43 (192.168.106.1)
​
#显示所有用户的信息以及当前的操作
[zy@192 ~]$  w
 09:48:32 up  1:12,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
zy       pts/0     09:42    0.00s  0.03s  0.00s w
zy       pts/1     09:43    4:57   0.00s  0.00s -bash
#使用column -t方便显示
[zy@192 ~]$  w | column -t
09:47:49  up     1:11,   2      users,  load   average:  0.00,  0.00,  0.00
USER      TTY    LOGIN@  IDLE   JCPU    PCPU   WHAT                    
zy        pts/0  09:42   4.00s  0.03s   0.00s  column    -t            
zy        pts/1  09:43   4:14   0.00s   0.00s  -bash  

5、hostnamectl设置主机名

主机名仅支持数字、横线、字母; 修改hostname需要root权限
#临时修改主机名,hostname中的配置不变
[root@192 ~]# cat /etc/hostname 
​
[root@192 ~]# hostname Rocky9
[root@192 ~]# exit
[zy@Rocky9 ~]$ cat /etc/hostname
​
#永久修改主机名
[root@Rocky9 ~]# hostnamectl set-hostname Rocky9
[root@Rocky9 ~]# cat /etc/hostname
Rocky9

6、PS1修改命令提示符


#当前的默认命令提示符 \u:用户 \h:服务器名 \W:当前所在的路径
[root@Rocky9 etc]# echo $PS1
[\u@\h \W]\$
​
#修改命令提示符的颜色 1表示高亮 32表示字体颜色 颜色范围:30~37
[root@Rocky9 etc]# PS1='\e[1;32m[\u@\h \W]\$ \e[0m'
#如果想要永久保存配置需要编写在配置文件中
[root@Rocky9 etc]# echo "PS1='\e[1;32m[\u@\h \W]\$ \e[0m'" >> /root/.bashrc
[root@Rocky9 etc]# tail -n 1 /root/.bashrc ; source /root/.bashrc
PS1='\e[1;32m[\u@\h \W]$ \e[0m'

效果展示:

7、type显示命令类型

内部命令:由shell自带,随着用户登录自动加载到内存中
外部命令:在文件系统路径下有对应的可执行文件,当执行命令时才从磁盘加载到内存中,完毕后再从内存中删除
常用选项:
-a 列出所有命令的类型
​
#内部命令
[root@192 ~]# type cd
cd is a shell builtin
​
#外部命令
[root@192 ~]# type mkdir
mkdir is /usr/bin/mkdir
​
#别名
[root@192 ~]# type ls
ls is aliased to `ls --color=auto'
​
#hash 经常使用的外部命令会将路径保存到hash表中,当需要使用该命令时直接从缓存中寻找到该文件路径,不必再从$PATH目录下寻址
[root@192 ~]# type vi
vi is hashed (/usr/bin/vi)
​
​
#有些命名既是内部命令也是外部命令(为了防止由于sheel版本不一致导致cmd not found 的问题)
[root@192 ~]# type -a echo
echo is a shell builtin
echo is /usr/bin/echo

8、hash记住或显示程序位置

作用:记住或显示程序位置,临时有效退出用户无效
常见选项:
-r 清空hash表
-d 删除hash某条数据
​
[root@192 ~]# hash
hits    command
   1    /usr/bin/yum
   2    /usr/bin/vi
   1    /usr/sbin/ip
   3    /usr/bin/clear
​
#清空hash表
[root@192 ~]# hash -r 
[root@192 ~]# hash
hash: hash table empty
​
#清楚某条hash数据
[root@192 ~]# hash
hits    command
   1    /usr/bin/ls
[root@192 ~]# hash -d ls
[root@192 ~]# hash
hash: hash table empty

9、alias别名

对于经常执行的较长命令可以将其定义成别名方便执行,想要永久保存需要写入到bashrc或者profile文件中
​
#定义别名
[root@192 ~]# cd /etc/sysconfig/network-scripts/
[root@192 network-scripts]# cd -
/root
[root@192 ~]# alias cdn="cd /etc/sysconfig/network-scripts/" 
[root@192 ~]# cdn
[root@192 network-scripts]# 
​
#查看别名
[root@192 network-scripts]# alias | grep cdn
alias cdn='cd /etc/sysconfig/network-scripts/'
​
#删除别名
[root@192 network-scripts]# unalias cdn
[root@192 network-scripts]# alias | grep cdn
[root@192 network-scripts]# 
​
#命令执行的优先级
绝对路径/相对路径 》 别名  》 内部命令 》 hash表  》 内部命令

10、lscpu查看cpu信息

#查看cpu的信息
[root@192 ~]# lscpu 
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           2
​
#cat /proc/cpuinfo 也可以查看cpu的信息
[root@192 ~]# cat /proc/cpuinfo | head -n 3
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 25

11、free查看内存信息

[root@192 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.5Gi       278Mi       2.9Gi       8.0Mi       335Mi       3.1Gi
Swap:         3.9Gi          0B       3.9Gi
​
swap空间是虚拟内存,用于扩展物理内存;当系统的物理内存被充满的时候,不活跃的数据被移动到swap空间中,当这些数据需要再次被使用的时候再从swap空间中恢复到数据内存中

12、lsblk查看硬盘和分区情况

[root@192 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 13.2G  0 rom  
nvme0n1         259:0    0  100G  0 disk 
├─nvme0n1p1     259:1    0    1G  0 part /boot
└─nvme0n1p2     259:2    0   99G  0 part 
  ├─rl_192-root 253:0    0 63.9G  0 lvm  /
  ├─rl_192-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─rl_192-home 253:2    0 31.2G  0 lvm  /home
​
#cat /proc/partitions也可以查看硬盘情况
[root@192 ~]# cat /proc/partitions 
major minor  #blocks  name
​
 259        0  104857600 nvme0n1
 259        1    1048576 nvme0n1p1
 259        2  103808000 nvme0n1p2
  11        0   13880704 sr0
 253        0   66985984 dm-0
 253        1    4116480 dm-1
 253        2   32702464 dm-2

13、lsb_release查看系统发行版本

(test)root@ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:    24.04
Codename:   noble
​
#cat /etc/os-release也可以查看发行版本
[root@192 ~]# cat /etc/os-release | head -n 3
NAME="Rocky Linux"
VERSION="8.10 (Green Obsidian)"
ID="rocky"

14、date显示时间

默认显示当前时间
常见选项:
  -d, --date=字符串          显示给定<字符串>描述的时间,而非“当前时间”
常见日期:
 %Y 年份
 %m 月份(01..12)
 %d 按月计的日期(例如:01)
 %H 小时(00-23)
 %M 分钟(00..59)
 %S 秒(00-60)
 %s 1970-01-01 00:00:00 UTC 以来的秒数
 %T 时间,等于%H:%M:%S
 %F 完整日期格式,等价于 %+4Y-%m-%d
 
#显示当前时间
[root@Rocky9 ~]# date +"%Y年%m月%d日 %H时%M分%S秒"
2024年10月10日 16时02分14秒
​
#显示前一天
[root@Rocky9 ~]# date -d "-1day" +"%Y年%m月%d日 %H时%M分%S秒"
2024年10月09日 16时02分41秒

15、timedatectl修改时区

#修改ubuntu默认时区为东八区
(test)root@ubuntu:~# date 
Thu Oct 10 08:19:05 AM UTC 2024
(test)root@ubuntu:~# timedatectl set-timezone Asia/Shanghai
(test)root@ubuntu:~# date
Thu Oct 10 04:19:44 PM CST 2024

16、screen会话管理工具

打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话" ;会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完,为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,继续运行,等到以后需要的时候,再让会话"绑定" 其他窗口
​
常用选项:
screen –S [SESSION] #创建新screen会话  
screen –x [SESSION] #加入screen会话
screen -r [SESSION] #恢复某screen会话
screen -ls #显示所有已经打开的screen会话
​
#创建一个PING_baidu的会话
[root@192 ~]# screen -S PING_baidu
[root@192 ~]# screen -ls
There is a screen on:
        2650.PING_baidu (Attached)
1 Socket in /run/screen/S-root.
#使用一个持续的命令
[root@192 ~]# ping www.baidu.com
PING www.a.shifen.com (157.148.69.74) 56(84) bytes of data.
#关闭终端,使用其它终端打开
[root@192 ~]# screen -r 2650
​
64 bytes from 157.148.69.74 (157.148.69.74): icmp_seq=63 ttl=128 time=29.1 ms

17、echo打印字符

显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号
常见选项:
-n  #输出完成后不换行
-e  #转义特定字符串
-E  #不转义,原样输出,默认选项
​
#启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a #发出警告声
\b #退格键
\c #最后不加上换行符号
\e #escape,相当于\033 
\n #换行且光标移至行首
\r #换行
\t #输入制表符
​
#打印一串字符串并发出告警声
[root@192 ~]# echo -e "hello\a"
hello
​
[root@192 ~]# echo -e "hello\tworld"
hello   world

18、{}符号扩展

#打印数字1~3
[root@192 ~]# echo {1..3}
1 2 3
#设置步长为2
[root@192 ~]# echo {1..5..2}
1 3 5
[root@192 ~]# echo {a,b}
a b
[root@Rocky9 ~]# echo {a..c}
a b c
​
#可以用于批量创建文件
[root@192 ~]# ll
total 4
-rw-------. 1 root root 1333 Oct  9 18:10 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 10 16:55 test
[root@192 ~]# touch  ./test/{a,b}.txt
[root@192 ~]# ll ./test/
total 0
-rw-r--r--. 1 root root 0 Oct 10 16:56 a.txt
-rw-r--r--. 1 root root 0 Oct 10 16:56 b.txt

19、history查看命令历史

当执行某个命令后,系统会在内存中记录下此命令,此时只记录在内存中,
当正常退出终端后,内存中记录下来的执行命令的历史,会保存到用户家目录下的 .bash_history 文件中
[root@192 ~]# ll .bash_history 
-rw-------. 1 root root 2330 Oct 10 16:46 .bash_history
[root@192 ~]# cat .bash_history
ip a
tty
​
#显示当前用户的命令
[root@192 ~]# history
    1  ip a
    2  tty
    
#可以设置变量查看当前用户执行命令的时间
[root@192 ~]# echo "HISTTIMEFORMAT='%F %T '" >> .bashrc ; source .bashrc
[root@192 ~]# history | head -n 2
    1  2024-10-10 16:44:59 ip a
    2  2024-10-10 16:44:59 tty

二、文件管理

1、Linux七种文件类型

文件类型标识符说明
普通文件-file
目录文件ddirectory
链接文件llink
块设备文件bblock
字符设备文件ccharacter
管道文件ppipe
套接字文件ssocket

  • 文件系统的目录结构

文件和目录被组织成一个单根倒置树的结构
文件系统从根目录开始,用/表示
文件名称大小写敏感
每个文件都有两类相关数据: 元数据 、 数据

2、cd切换目录

常见用法:
cd - 切换到上次所在的目录
cd ~ 切换到用户的家目录
cd .. 返回父目录
cd ~user 切换到某用户的家目录

3、pwd显示当前用户所在目录

常用选项:
-P 显示当前所在的物理路径
-L 显示当前所在的逻辑路径(默认)
​
[root@Rocky9 ~]# ls -ld /bin /usr/bin
lrwxrwxrwx. 1 root root     7  5月 16  2022 /bin -> usr/bin
dr-xr-xr-x. 2 root root 20480 10月  9 18:11 /usr/bin
​
[root@Rocky9 bin]# pwd 
/bin
[root@Rocky9 bin]# pwd -L
/bin
[root@Rocky9 bin]# pwd -P
/usr/bin
​
#绝对路径和相对路径
绝对路径:以根目录为开始的路径
相对路径:相对于现在目录所在的路径

4、基名和目录名

basename:只取文件名,不取目录名
dirname:只取目录名,不要文件名
​
#案例
[root@Rocky9 ~]# mkdir -pv /dir1/dir2/dir3 ; touch /dir1/dir2/dir3/{1..3}.txt
mkdir: 已创建目录 '/dir1'
mkdir: 已创建目录 '/dir1/dir2'
mkdir: 已创建目录 '/dir1/dir2/dir3'
[root@Rocky9 ~]# dirname /dir1/dir2/dir3/1.txt
/dir1/dir2/dir3
[root@Rocky9 ~]# basename /dir1/dir2/dir3/1.txt
1.txt
​
#也可以取链接名
[root@Rocky9 ~]# basename https://dowhttps://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz
mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz
​
#-s移除后缀
[root@Rocky9 ~]# basename -s .tar.xz https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz
mysql-8.4.0-linux-glibc2.28-x86_64

5、ls列出目录内容

常用选项:
-a|--all    #包含隐藏文件
-l          #显示额外的信息
-R|--recursive      #目录递归
-d|--directory      #仅显示当前目录
-1                  #数字1,文件分行显示
-S                  #按从大到小排序
-t                  #按mtime排序,时间新的靠前
​
#案例
[root@Rocky9 ~]# ls 
anaconda-ks.cfg  dir1
​
[root@Rocky9 ~]# ls -1
anaconda-ks.cfg
dir1
​
#文件从大到小排序
[root@Rocky9 ~]# ls -S -1 /etc | head -n4
总用量 1044
-rw-r--r--. 1 root root   692252  6月 23  2020 services
-rw-r--r--. 1 root root    13859 10月  9 19:07 ld.so.cache
-rw-r--r--. 1 root root     8979 10月  9 18:11 kdump.conf
​
#文件修改时间排序
[root@Rocky9 ~]# ls -t  -l /etc | head -n4
总用量 1044
-rw-r--r--. 1 root root       98 10月 11 12:20 resolv.conf
-rw-r--r--. 1 root root        7 10月 10 10:15 hostname
drwxr-xr-x. 4 root root     4096 10月  9 19:07 ssh

5、stat显示文件状态

[root@Rocky9 ~]# stat dir1
  文件:dir1
  大小:18         块:0          IO 块:4096   目录
设备:fd00h/64768d Inode:34546034    硬链接:3
权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-10-11 16:18:18.342529807 +0800  #atime
最近更改:2024-10-11 16:18:18.344529817 +0800  #mtime
最近改动:2024-10-11 16:18:18.344529817 +0800  #ctime
创建时间:2024-10-11 16:18:18.342529807 +0800  #birth
​
#atime不是随时发生改变的,由于文件存在大量的访问所以一般只有ctime和mtime比atime新的时候 atime才会发生改变或者当前atime距离上次atime超过24小时才会更新
​
[root@Rocky9 ~]# echo 1 > dir1/dir2/dir3/1.txt
[root@Rocky9 ~]# stat dir1/dir2/dir3/1.txt 
  文件:dir1/dir2/dir3/1.txt
  大小:2          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:101912498   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-10-11 17:06:14.974608171 +0800
最近更改:2024-10-11 17:11:07.171476227 +0800
最近改动:2024-10-11 17:11:07.171476227 +0800
创建时间:2024-10-11 17:06:14.974608171 +0800
[root@Rocky9 ~]# cat dir1/dir2/dir3/1.txt
1
[root@Rocky9 ~]# stat dir1/dir2/dir3/1.txt 
  文件:dir1/dir2/dir3/1.txt
  大小:2          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:101912498   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-10-11 17:12:06.511855596 +0800
最近更改:2024-10-11 17:11:07.171476227 +0800
最近改动:2024-10-11 17:11:07.171476227 +0800
创建时间:2024-10-11 17:06:14.974608171 +0800
​
#再次访问atime不会发生变化
[root@Rocky9 ~]# cat dir1/dir2/dir3/1.txt
1
[root@Rocky9 ~]# stat dir1/dir2/dir3/1.txt 
  文件:dir1/dir2/dir3/1.txt
  大小:2          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:101912498   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-10-11 17:12:06.511855596 +0800
最近更改:2024-10-11 17:11:07.171476227 +0800
最近改动:2024-10-11 17:11:07.171476227 +0800
创建时间:2024-10-11 17:06:14.974608171 +0800

6、通配符

通配符用于匹配文件名称,采用特定的符号匹配多个文件
*       #匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
?       #匹配任何单个字符,一个汉字也算一个字符,
~       #当前用户家目录
.       #当前工作目录
[0-9]   #匹配数字范围
[a-z]   #一个字母 在Ubuntu中区分大小写 Rocky中不区分
[A-Z]   #一个字母
[zy]    #匹配列表中的任何的一个字符
[^zy]   #匹配列表中的所有字符以外的字符
[^a-z]  #匹配列表中的所有字符以外的字符
​
#案例
[root@Rocky9 ~]# ls dir1/dir2/dir3/
1.org  1.txt  2.org  2.txt  3.org  3.txt  a.org  b.org  c.org
​
[root@Rocky9 ~]# ls dir1/dir2/dir3/3*
dir1/dir2/dir3/3.org  dir1/dir2/dir3/3.txt
​
[root@Rocky9 ~]# ls dir1/dir2/dir3/[1-2].txt
dir1/dir2/dir3/1.txt  dir1/dir2/dir3/2.txt
​
[root@Rocky9 ~]# ls dir1/dir2/dir3/[abzy].org
dir1/dir2/dir3/a.org  dir1/dir2/dir3/b.org
​
[root@Rocky9 ~]# ls dir1/dir2/dir3/[^a].org
dir1/dir2/dir3/1.org  dir1/dir2/dir3/2.org  dir1/dir2/dir3/3.org  dir1/dir2/dir3/b.org  dir1/dir2/dir3/c.org
​
特殊符号:
[:digit:] #任意数字,相当于0-9
[:lower:] #任意小写字母,表示 a-z
[:upper:] #任意大写字母,表示 A-Z 
[:alpha:] #任意大小写字母
[:alnum:] #任意数字或字母
[:space:] #水平或垂直空白字符
​
[root@Rocky9 ~]# ls dir1/dir2/dir3/[:[:digit:]:].txt
dir1/dir2/dir3/1.txt  dir1/dir2/dir3/2.txt  dir1/dir2/dir3/3.txt

7、cp复制文件和目录

格式:
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
​
常用选项:
-i|--interactive    #如果目标文件己存在,则提示是否覆盖
-n|--no-clobber     #如果目标文件己存在,则跳过此文件复制
-R|-r|--recursive   #递归复制,可用于目录的复制
-a|--archive        #保留所有属性
-b                  #先备份再覆盖只能存在一个备份文件
--backup=numbered #目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多个版本
​
[root@Rocky9 ~]# echo "abc" > a.txt ; cp a.txt b.txt ; ll *.txt
-rw-r--r--. 1 root root 4 10月 11 18:12 a.txt
-rw-r--r--. 1 root root 4 10月 11 18:12 b.txt
​
#如果目标文件存在,那么先备份成filename~
[root@Rocky9 ~]# cp -b a.txt b.txt
cp:是否覆盖'b.txt'? y
[root@Rocky9 ~]# ll *.txt*
-rw-r--r--. 1 root root 4 10月 11 18:12 a.txt
-rw-r--r--. 1 root root 4 10月 11 18:13 b.txt
-rw-r--r--. 1 root root 4 10月 11 18:12 b.txt~

8、mv移动或重命名文件

mv可以实现文件或者目录的移动和改名
同一分区移动,速度快,数据位置没有发生变化
不同分区移动,速度慢,数据位置发生了了变化
格式:
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
​
-b                  #如果目标存在,则先备份
-i|--interactive    #如果目标文件己存在,则提示是否覆盖
​
#移动文件
[root@Rocky9 ~]# mv dir1 /home/zy/
[root@Rocky9 ~]# cd ~zy
[root@Rocky9 zy]# ll
总用量 0
drwxr-xr-x. 3 root root 18 10月 11 16:18 dir1

9、rename批量修改文件名

#把所有org后缀的文件修改为.txt的文件
[root@Rocky9 dir3]# ls
1.org  2.org  3.org  a.org  b.org  c.org
[root@Rocky9 dir3]# rename ".org" ".txt" *.org
[root@Rocky9 dir3]# ls
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt

10、rm删除文件

生产环境谨慎使用,使用mv替代rm
常用选项:
-i      #删除前确认
-r      #递归删除
-f      #强制删除
​
[root@Rocky9 zy]# rm dir1
rm: 无法删除 'dir1': 是一个目录
[root@Rocky9 zy]# rm -rf dir1

11、mkdir创建目录

常用选项:
-m|--mode       #目录权限属性
-p|--parents    #如果要创建的目录父级目录不存在,则一起创建,是递归的意思
-v|--verbose    #显示创建过程
​
#递归创建目录
[root@Rocky9 zy]# mkdir -pv dir1/dir2/dir3 : touch dir1/dir2/dir3
mkdir: 已创建目录 'dir1'
mkdir: 已创建目录 'dir1/dir2'
mkdir: 已创建目录 'dir1/dir2/dir3'
​
#创建目录并设置权限
[root@Rocky9 zy]# mkdir -m 111 dir1
[root@Rocky9 zy]# ls -dl  dir1
d--x--x--x. 2 root root 6 10月 11 18:43 dir1

12、inode表

每个文件,分为文件元数据和具体内容两个部分,每个文件都有一个inode和n(n>=1)个block 数据块,inode 存储文件元数据,数据块存储文件具体内容数据;当系统在找一个文件的时候,先通过文件名找到文件的inode编号,通过inode编号找到文件indoe信息,然后再通过inode信息中的block指针寻找到文件的内容
#可以使用df -i 查看当前分区inode编号的使用情况
[root@Rocky9 zy]# df -i | column -t
文件系统                 Inodes    已用(I)  可用(I)   已用(I)%  挂载点
devtmpfs                 459053    390      458663    1%        /dev
tmpfs                    464338    1        464337    1%        /dev/shm
tmpfs                    819200    697      818503    1%        /run
/dev/mapper/rl_192-root  33495040  31327    33463713  1%        /
/dev/nvme0n1p1           524288    358      523930    1%        /boot
/dev/mapper/rl_192-home  16353280  9        16353271  1%        /home
tmpfs                    92867     14       92853     1%        /run/user/1000
​
#如果inode用完也会出现No space left on device的问题
[root@Rocky9 zy]# df -i
文件系统                  Inodes 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs                  459053     390   458663       1% /dev
tmpfs                     464338       1   464337       1% /dev/shm
tmpfs                     819200     698   818502       1% /run
/dev/mapper/rl_192-root 33495040   31327 33463713       1% /
/dev/nvme0n1p1            524288     358   523930       1% /boot
/dev/mapper/rl_192-home 16353280       9 16353271       1% /home
tmpfs                      92867      14    92853       1% /run/user/1000
​
[root@Rocky9 zy]# echo /run/test/{1..818503} | xargs -n 10000 touch 
touch: 无法创建 '/run/test/818503': 设备上没有空间
#inode节点已被使用完毕
[root@Rocky9 zy]# df -i | grep "/run"
tmpfs                     819200  819200        0     100% /run
tmpfs                      92867      14    92853       1% /run/user/1000
#磁盘上还有空间
[root@Rocky9 zy]# df -hT | grep "/run"
tmpfs                   tmpfs     726M  9.0M  717M    2% /run
tmpfs                   tmpfs     363M     0  363M    0% /run/user/1000

13、软链接和硬链接

区别硬链接 hard link软链接 soft link
inode编号inode编号相同inode编号不同
链接数创建硬链接链接数增加链接数不变
分区不支持跨分区创建支持跨分区创建
目录不支持对目录创建支持对目录创建
删除链接删除链接,链接数减1 直到链接数为0 文件彻底删除如果涉及到对目录创建软链接,使用rm即可 如果使用rm -rf会删除原文件
本质多个文件名,指向同一个inode,实则是同一个文件相当于快捷方式
#创建硬链接
[root@Rocky9 zy]# ll
总用量 0
-rw-r--r--. 1 root root 0 10月 11 23:01 a.txt
d--x--x--x. 2 root root 6 10月 11 18:43 dir1
[root@Rocky9 zy]# ln a.txt b.txt ; ll -i *.txt
137 -rw-r--r--. 2 root root 0 10月 11 23:01 a.txt
137 -rw-r--r--. 2 root root 0 10月 11 23:01 b.txt
​
[root@Rocky9 zy]# \rm b.txt
[root@Rocky9 zy]# ll *.txt
-rw-r--r--. 1 root root 0 10月 11 23:01 a.txt
​
#创建软链接
[root@Rocky9 zy]# ln -s dir1 dir1_link ; ls -dli dir*
136 d--x--x--x. 2 root root 6 10月 11 18:43 dir1
138 lrwxrwxrwx. 1 root root 4 10月 11 23:06 dir1_link -> dir1
#删除软链接
[root@Rocky9 zy]# rm dir1_link
rm:是否删除符号链接 'dir1_link'?y

14、重定向

Linux系统中有三个基本的IO设备
1. 标准输入设备(stdin):对应终端键盘
2. 标准输出设备(stdout):对应终端的显示器
3. 标准错误输出设备(stderr):对应终端的显示器
​
[zy@Rocky9 ~]$ ll /proc/$BASHPID/fd
总用量 0
lrwx------. 1 zy zy 64 10月 12 12:54 0 -> /dev/pts/0
lrwx------. 1 zy zy 64 10月 12 12:54 1 -> /dev/pts/0
lrwx------. 1 zy zy 64 10月 12 12:54 2 -> /dev/pts/0
  • 标准输出 >

Linux系统中有三个基本的IO设备
1. 标准输入设备(stdin):对应终端键盘
2. 标准输出设备(stdout):对应终端的显示器
3. 标准错误输出设备(stderr):对应终端的显示器
​
[zy@Rocky9 ~]$ ll /proc/$BASHPID/fd
总用量 0
lrwx------. 1 zy zy 64 10月 12 12:54 0 -> /dev/pts/0
lrwx------. 1 zy zy 64 10月 12 12:54 1 -> /dev/pts/0
lrwx------. 1 zy zy 64 10月 12 12:54 2 -> /dev/pts/0
  • 标准错误 2>

[root@Rocky9 zy]# ls a.txt x.txt 2> a.txt ; echo "-----cat file------" ;cat a.txt
a.txt
-----cat file------
ls: 无法访问 'x.txt': 没有那个文件或目录
​
#标准错误和标准错误同时输出到同一个文件
[root@Rocky9 zy]# ls a.txt x.txt > a.txt 2>&1 ; echo "-----cat file------" ;cat a.txt
-----cat file------
ls: 无法访问 'x.txt': 没有那个文件或目录
a.txt
[root@Rocky9 zy]# ls a.txt x.txt &> a.txt ; echo "-----cat file------" ;cat a.txt
-----cat file------
ls: 无法访问 'x.txt': 没有那个文件或目录
a.txt
​
#标准错误和标准错误输出到不同文件
[root@Rocky9 zy]# ls a.txt x.txt > true.txt 2> false.txt; echo "---cat true---"; cat true.txt;echo "---cat false---";cat false.txt
---cat true---
a.txt
---cat false---
ls: 无法访问 'x.txt': 没有那个文件或目录
  • 标准输入 <

# 将file中的内容输入到bc中
[root@Rocky9 zy]# echo "1+1" > num.txt
[root@Rocky9 zy]# bc < num.txt 
2
​
# 在命令行中输入内容并且以EOF结尾结束输入
[root@Rocky9 zy]# bc <<EOF
> 1+1
> EOF
2
​
# 将命令结果作为输入内容
[root@Rocky9 zy]# bc < <(seq -s "+" 100)
5050
​
# 将字符串作为输入内容
[root@Rocky9 zy]# bc <<<"1+1"
2

15、tr字符处理

用于转换字符、删除字符和压缩重复的字符。它从标准输入读取数据并将结果输出到标准输出
格式: tr [OPTION]... SET1 [SET2]
常用选项:
选项
-c|-C|--complement      #用SET2替换SET1中没有包含的字符
-d|--delete             #删除SET1中所有的字符,不转换
-s|--squeeze-repeats    #压缩SET1中重复的字符,即删除重复的字符
-t|--truncate-set1      #将SET1用SET2替换,SET2中不够的,就不处理
​
# 将除了a以为的字符都变成b,由于echo输出会在结尾处添加换行,所以会将换行符也换成b
[root@Rocky9 zy]# echo "abcd" | tr -c "a" "b"
abbbb[root@Rocky9 zy]#
​
#将ac字符删除
[root@Rocky9 zy]# echo "abcd" | tr -d "ac"
bd
​
#压缩字符b
[root@Rocky9 zy]# echo "abbbbbc" | tr -s "b"
abc
​
#替换字符
[root@Rocky9 zy]# echo "abcd" | tr -t "a" "x"
xbcd
​
#输出10个随机数
[root@Rocky9 zy]# cat /dev/random | tr -dc [:alnum:] | head -c 10
p8kxFXRv1J
​
#将小写字符转换为大写字符
[root@Rocky9 zy]# echo "abcd" | tr -t [:lower:] [:upper:]
ABCD

16、管道

将前一个命令的标准输出作为后一个命令的输入,所有命令会在当前shell进程的子shell进程中执行
格式: cmd1|cmd2|cmd3
#求100以内的偶数和
[root@Rocky9 zy]# seq -s "+"  0 2 100  | bc
2550

三、用户和权限管理

1、用户类型

Linux系统是多用户系统,可以同时存在多个用户,每个用户之间是互相隔离的,在Linux系统中 每个用户通过UID来唯一标识

普通用户普通用户
uid0普通用户: 1000+ | 系统用户: 1~999
权限对系统有完整的控制权限权限有限

程序是否有可执行权限由用户决定,文件是否由可访问权限由用户决定

2、用户组

组类型组名组id
超级管理员组root0
普通系统组自定义1~999
普通用户组自定义100+
一个用户至少有一个组,也可以有多个组;
一个组至少有0个用户,或者多个用户
用户的主要组(私有组),一个用户必须要有一个主组

3、useradd用户创建

格式:useradd [options] LOGIN
常见选项:
-u|--uid UID             #指定UID
-g|--gid GID             #指定用户组,-g groupname|--gid GID
-d|--home-dir HOME_DIR   #指定家目录,可以是不存在的,指定家目录,并不代表创建家目录
-s|--shell SHELL         #指定 shell,可用shell在/etc/shells 中可以查看 ubuntu默认是/bin/sh
-r|--system              #创建系统用户
-m|--create-home         #创建家目录,一般用于登录用户 
-M|--no-create-home      #不创建家目录,一般用于不用登录的用户
-G|--groups GROUP1[,GROUP2,...]   #为用户指明附加组,组须事先存在
​
#创建一个普通用户
[root@Rocky9 ~]# useradd -u 1001 -d /home/ygnahz -m -s /bin/bash ygnahz 
[root@Rocky9 ~]# ll  -d /home/ygnahz ; id ygnahz
drwx------. 2 ygnahz ygnahz 62 10月 12 16:14 /home/ygnahz
用户id=1001(ygnahz) 组id=1001(ygnahz) 组=1001(ygnahz)
​
#由于skel目录存在,普通用户家目录会存在很多隐藏文件
[root@Rocky9 ~]# ll /etc/skel -a
总用量 24
drwxr-xr-x.  2 root root   62 10月  9 18:10 .
drwxr-xr-x. 79 root root 8192 10月 12 16:14 ..
-rw-r--r--.  1 root root   18  4月 30 19:28 .bash_logout
-rw-r--r--.  1 root root  141  4月 30 19:28 .bash_profile
-rw-r--r--.  1 root root  492  4月 30 19:28 .bashrc
[root@Rocky9 ~]# ll /home/ygnahz -a
总用量 12
drwx------. 2 ygnahz ygnahz  62 10月 12 16:14 .
drwxr-xr-x. 4 root   root    30 10月 12 16:14 ..
-rw-r--r--. 1 ygnahz ygnahz  18  4月 30 19:28 .bash_logout
-rw-r--r--. 1 ygnahz ygnahz 141  4月 30 19:28 .bash_profile
-rw-r--r--. 1 ygnahz ygnahz 492  4月 30 19:28 .bashrc
​
#/etc/default/useradd目录设定了一些用户创建的默认值
[root@Rocky9 ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

4、usermod用户属性修改

常见选项:
-d|--home HOME_DIR           #修改家目录
-g|--gid GROUP               #修改组
-G|--groups GROUPS           #groupName|GID... 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-l|--login LOGIN             #新的登录名称
-L|--lock                    #锁定用户帐号,在/etc/shadow 密码栏的增加 !
-U                           #解锁用户帐号,将 /etc/shadow 密码栏的!拿掉
​
#锁定用户
[root@Rocky9 ~]# getent shadow zy
zy:$6$JXLxhBoXpMBswiv6$w5WZoHHeJiLkpWYtq5ZjTilnQfgCMRQG4HtWSFIICRFCRv9bqi2LXyU0mj0E7vvBNNneiksED8GAOrCKe0qma/::0:99999:7:::
[root@Rocky9 ~]# usermod -L zy
[root@Rocky9 ~]# getent shadow zy
zy:!$6$JXLxhBoXpMBswiv6$w5WZoHHeJiLkpWYtq5ZjTilnQfgCMRQG4HtWSFIICRFCRv9bqi2LXyU0mj0E7vvBNNneiksED8GAOrCKe0qma/::0:99999:7:::

5、userdel删除用户

常见选项:
-f|--force     #强制删除,哪怕用户正在登录状态
-r|--remove    #删除家目录和邮件目录
​
[root@Rocky9 ~]# ll /home/ ; userdel  -r ygnahz ; ll /home/
总用量 0
drwx------. 2 ygnahz ygnahz  62 10月 12 17:12 ygnahz
drwx------. 3 zy     zy     178 10月 12 13:12 zy
总用量 0
drwx------. 3 zy zy 178 10月 12 13:12 zy

6、su切换用户

su username: 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - username:登录式切换,会读取目标用户的配置文件,切换到自己的家目录
#使用完全切换
[root@Rocky9 ~]# echo $PATH 
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
​
[root@Rocky9 ~]# su - zy 
上一次登录: 六 10月 12 17:24:30 CST 2024 pts/0 上
[zy@Rocky9 ~]$ echo $PATH
/home/zy/.local/bin:/home/zy/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

7、passwd设置密码

常用选项:
--stdin                #从标准输入接收密码,Ubuntu无此选项
​
#交互式修改密码
[root@Rocky9 ~]# passwd zy
更改用户 zy 的密码 。
新的密码: 
无效的密码: 密码少于 8 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
​
#非交互式修改密码
[root@Rocky9 ~]# echo "123456" | passwd --stdin zy
更改用户 zy 的密码 。
passwd:所有的身份验证令牌已经成功更新。

8、文件的三种权限

权限对文件对目录
r可以查看文件内容可以读取目录中的文件名,但文件元数据无法查看
w可以修改文件内容可以在目录中创建和删除文件,如果没有x权限 那么无法操作
x可执行,发起为一个进程可以进入目录,可以查看文件元数据,属于目录最小权限

9、chown修改文件所有者

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
#用法说明
OWNER       #只修改所有者
OWNER:GROUP #同时修改所有者和属组
​
常见选项
-R|--recursive        #递归操作
​
#修改文件权限
[root@Rocky9 zy]# ll -d dir2 ll -d dir2 ; chown ygnahz:ygnahz dir2 ; ll -d dir2
drwxr--r--. 2 zy zy 22 10月 12 17:41 dir2
drwxr--r--. 2 ygnahz ygnahz 22 10月 12 17:41 dir2

10、chmod修改文件属性

  • 角色定义

角色在命令中的字符备注
useru属主
groupg属组
othero其它用户
alla所有人
  • 赋值

命令中的字符备注
+增加权限
-删除权限
=覆盖权限
  • 权限表示方法

权限命令中的字符八进制表示备注
可读r4读权限
可写w2写权限
可执行x1执行权限
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
#用法说明
OWNER       #只修改所有者
OWNER:GROUP #同时修改所有者和属组
​
常见选项
-R|--recursive        #递归操作
​
#修改文件权限
[root@Rocky9 zy]# ll -d dir2 ll -d dir2 ; chown ygnahz:ygnahz dir2 ; ll -d dir2
drwxr--r--. 2 zy zy 22 10月 12 17:41 dir2
drwxr--r--. 2 ygnahz ygnahz 22 10月 12 17:41 dir2

11、umask新建文件默认权限

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
#用法说明
OWNER       #只修改所有者
OWNER:GROUP #同时修改所有者和属组
​
常见选项
-R|--recursive        #递归操作
​
#修改文件权限
[root@Rocky9 zy]# ll -d dir2 ll -d dir2 ; chown ygnahz:ygnahz dir2 ; ll -d dir2
drwxr--r--. 2 zy zy 22 10月 12 17:41 dir2
drwxr--r--. 2 ygnahz ygnahz 22 10月 12 17:41 dir2

12、特殊权限

除了常见的rwx权限以外,还有三种特殊权限 分别为SUID SGID Stick三种权限
权限二进制文件目录
SUID作用在二进制文件上,用户将继承此程序所有者的权限\
SGID作用在目录上,用户将继承此程序所属组的权限此目录新建的文件所属组将自动从此目录继承
Stick\此目录的文件只能由文件所有者自己来删除
#suid 使cat程序拥有suid权限,那么普通用户也能查看无法查看的文件内容
[zy@Rocky9 ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
​
[root@Rocky9 ~]# ll -d $(which cat)
-rwxr-xr-x. 1 root root 36440  4月 21 02:43 /usr/bin/cat
[root@Rocky9 ~]# chmod u+s /usr/bin/cat
[root@Rocky9 ~]# ll -d /usr/bin/cat
-rwsr-xr-x. 1 root root 36440  4月 21 02:43 /usr/bin/cat
[zy@Rocky9 ~]$ cat /etc/shadow
tss:!!:20005::::::
sshd:!!:20005::::::
​
#sgid 在设置sgid的目录下创建文件 所属组和目录一致
[root@Rocky9 zy]# ll
总用量 0
drwxr-xr-x. 2 root zy 6 10月 12 21:31 dir1
[root@Rocky9 zy]# chmod g+s dir1
[root@Rocky9 zy]# touch dir1/b.txt ; ll dir1/b.txt
-rw-r--r--. 1 root zy 0 10月 12 22:14 dir1/b.txt
​
#stick 目录下的文件只能由所有者自己删除
[root@Rocky9 zy]# chmod o+t dir1
[root@Rocky9 zy]# ll
总用量 0
drwxrwxrwt. 2 root zy 32 10月 12 22:14 dir1

13、ACL访问控制列表

ACL可以单独对指定的用户设定各不相同的权限;提供颗粒度更细的权限控制
#suid 使cat程序拥有suid权限,那么普通用户也能查看无法查看的文件内容
[zy@Rocky9 ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
​
[root@Rocky9 ~]# ll -d $(which cat)
-rwxr-xr-x. 1 root root 36440  4月 21 02:43 /usr/bin/cat
[root@Rocky9 ~]# chmod u+s /usr/bin/cat
[root@Rocky9 ~]# ll -d /usr/bin/cat
-rwsr-xr-x. 1 root root 36440  4月 21 02:43 /usr/bin/cat
[zy@Rocky9 ~]$ cat /etc/shadow
tss:!!:20005::::::
sshd:!!:20005::::::
​
#sgid 在设置sgid的目录下创建文件 所属组和目录一致
[root@Rocky9 zy]# ll
总用量 0
drwxr-xr-x. 2 root zy 6 10月 12 21:31 dir1
[root@Rocky9 zy]# chmod g+s dir1
[root@Rocky9 zy]# touch dir1/b.txt ; ll dir1/b.txt
-rw-r--r--. 1 root zy 0 10月 12 22:14 dir1/b.txt
​
#stick 目录下的文件只能由所有者自己删除
[root@Rocky9 zy]# chmod o+t dir1
[root@Rocky9 zy]# ll
总用量 0
drwxrwxrwt. 2 root zy 32 10月 12 22:14 dir1

四、文本管理

1、cat查看文本内容

常见选项
-A          #显示所有控制符 ^I为制表符 $显示为行结束符
-n          #对显示出的每一行编号
-b          #非空行编号
-s          压缩连续的空行成一行
​
#案例
[zy@Rocky9 ~]$ echo -e "a\tb " > a.txt
[zy@Rocky9 ~]$ cat -A a.txt 
a^Ib $
​
[zy@Rocky9 ~]$ cat -n a.txt 
     1  hello linux
     2  
     3  this is a test
     4  
     5  
     6  thanks

2、tac逆向显示内容

#将输出的内容逆向显示
[zy@Rocky9 ~]$ cat a.txt 
1
2
3
[zy@Rocky9 ~]$ tac a.txt 
3
2
1

3、more分页查看文件内容

可以分页查看文件内容,对于比较长的文件可以使用
#常用选项
-s      #压缩连续的空行
​
#使用enter下一行 使用空格下一页
[root@Rocky9 ~]# cat ~zy/a.txt ;echo "----more----" ; more -s ~zy/a.txt 
hello linux
​
this is a test
​
​
thanks
----more----
hello linux
​
this is a test
​
thanks

4、less分页查看文件内容

实现分页查看文件或者STDIN输出,支持搜索比more更加强大
#常用选项
-N      #显示行号
-s      #压缩连续空行
-S      #不换行显示较长的内容
​
#输入\进行搜索,使用N向下查找,使用n向上查找
#使用enter下一行,使用空格换页
[root@Rocky9 ~]# cat /etc/passwd | less -N
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin

5、head显示文件前面行

常用选项:
-c|--bytes=N    #指定获取前N字节
-n|--lines=N    #指定获取前N行,N如果为负数,表示从文件头取到倒数第N前
​
#案例一: 显示文件前几行
[root@Rocky9 ~]# seq 10 | head -n 3
1
2
3
​
#案例二: 显示文件前几个字节
[root@Rocky9 ~]# echo "abcd" | head -c 2
ab[root@Rocky9 ~]# 
​
#案例三: n值取负数
[root@Rocky9 ~]# seq 7 | head -n -3
1
2
3
4

6、tail取文件的倒数行

-c|--bytes=N        #指定获取后N字节
-n|--lines=N        #指定获取后N行,如果写成+N,表示从第N行开始到文件结束
-f                  #跟踪显示文件fd新追加的内容,常用日志监控,当删除再新建同名文件,将无法继续跟踪
​
#案例1:显示后几行
[root@Rocky9 ~]# seq 7 | tail -n 2
6
7
​
#案例2:显示后几个字符 由于echo结尾有一个换行符 那么实际上显示效果为c\n
[root@Rocky9 ~]# echo "abc" | tail -c 2
c
​
#案例3:n值取+数
[root@Rocky9 ~]# seq 4 | tail -n +2
2
3
4

7、cut按列抽取文本

常用选项:
-d|--delimiter=DELIM            #指定分割符,默认是tab
-f|--fields=LIST                #要显示的列,-f1, -f1,2,3, -f 1-3,4
--output-delimiter=STRING       #输出的时候用指定字符代替分割符
​
[root@localhost ~]# df -Th | tr -s " " | cut -d " " -f 2-5,7  | grep -E "\/home"
xfs 32G 255M 31G /home

8、paste合并多个文件

将相同行号的列合并在一起
常用选项:
#常用选项
-d|--delimiters=LIST            #指定分割符,默认用TAB
-s|--serial                     #合成一行显示
-z|--zero-terminated            #以 NUL 字符而非换行符作为行尾分隔符
​
#案例1:将passwd和username文件两个合并在一起
​
[zy@Rocky9 ~]$ for i in $(seq 3) ; do \
> echo $(cat /dev/random  | tr -dc [:alnum:] | head -c 8) >> passwd.txt ;
> done
[zy@Rocky9 ~]$ cat passwd.txt 
RiNa7Qzs
C3S14oMQ
Cwnvmvrf
​
[zy@Rocky9 ~]$ for i in $(seq 3);do echo user${i} >> user.txt;done
[zy@Rocky9 ~]$ cat user.txt 
user1
user2
user3
​
[zy@Rocky9 ~]$ paste user.txt passwd.txt -d ":"
user1:RiNa7Qzs
user2:C3S14oMQ
user3:Cwnvmvrf
​
#案例2: 将纵向内容修改为横向内容
[zy@Rocky9 ~]$ paste -s  user.txt passwd.txt -d ":"
user1:user2:user3
RiNa7Qzs:C3S14oMQ:Cwnvmvrf

9、wc文本统计数据


wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数,可以对文件或STDIN中的数据统计
#常用选项
-l|--lines      #只计数行数
-w|--words      #只计数单词总数
-c|--bytes      #只计数字节总数
-m|--chars      #只计数字符总数
​
#查看内核有多少行
[zy@Rocky9 ~]$ wc -l  /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64 
47558 /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
​
#查看内核有多少个单词
[zy@Rocky9 ~]$ wc -w /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
278485 /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
​
#查看内核有多少字节
[zy@Rocky9 ~]$ wc -c /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
13605704 /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
[zy@Rocky9 ~]$ ll /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
-rwxr-xr-x. 1 root root 13605704  5月  2 03:23 /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64

10、sort文本排序

常用选项:
随机排序
-h|--human-numeric-sort     #人类可读排序
-n|--numeric-sort           #以数字大小排序
-r|-reverse                 #倒序
-t|--field-separator=SEP    #指定列分割符
-k|--key=KEYDEF             #指定排序列
-u|--unique                 #去重
​
#生成7个1到5的随机数,并对随机数排序
[zy@Rocky9 ~]$ for i in $(seq 7);do echo $(echo $RANDOM%5+1 | bc ) >> num.txt ; done ;cat num.txt
5
2
2
1
5
2
1
​
#默认从小到大
[zy@Rocky9 ~]$ sort -n num.txt 
1
1
2
2
2
5
5
​
#去掉重复,并从大到小排序
[zy@Rocky9 ~]$ sort -n -ru num.txt 
5
2
1
​
#统计分区大小并排序
[zy@Rocky9 ~]$ df -hT | tr -s " " | cut -d " " -f 2,3,7 | tail -n +2 | sort -rh -t " " -k 2 | column -t
xfs       64G   /
xfs       32G   /home
tmpfs     1.8G  /dev/shm
xfs       960M  /boot
tmpfs     726M  /run
tmpfs     363M  /run/user/1000
devtmpfs  4.0M  /dev

11、uniq去除重复行

uniq从输入中删除前后相互连接的重复的行,常和sort配合使用
​
常用格式:
-c|--count             #显示每行出现次数
-d|--repeated          #仅显示有重复行
-u|--unique            #仅显示不重复的行
​
#案例1
[zy@Rocky9 ~]$ sort num.txt 
1
1
2
2
2
5
5
#显示唯一出现的行
[zy@Rocky9 ~]$ sort num.txt  | uniq -u 
#显示重复出现的行
[zy@Rocky9 ~]$ sort num.txt  | uniq -d
1
2
5
#显示重复出现的行数
[zy@Rocky9 ~]$ sort num.txt  | uniq -c
      2 1
      3 2
      2 5

12、正则表达式

本节采用拓展正则表达式
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式;类似于增强版的通配符功能;但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
​
字符匹配:
[]              #匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z]   [a-zA-Z]
[^]             #匹配指定范围外的任意单个字符,示例:[^wang] 
[:alnum:]       #字母和数字
[:alpha:]       #代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]       #小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]       #大写字母
[:blank:]       #空白字符(空格和制表符)
[:space:]       #包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
​
#匹配单个单词
[zy@Rocky9 ~]$ echo -e "rot\nroot" | grep  -E "r.t"
rot
[zy@Rocky9 ~]$ echo -e "rot\nroot" | grep  -E "r..t"
root
​
匹配次数
*           #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*          #任意长度的任意字符
?           #匹配其前面的字符出现0次或1次,即:可有可无
+           #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
{n}         #匹配前面的字符n次
{m,n}       #匹配前面的字符至少m次,至多n次
{,n}        #匹配前面的字符至多n次,<=n
{n,}        #匹配前面的字符至少n次
​
#字符o显示三次
[zy@Rocky9 ~]$ echo -e "rooot" | grep -E 'ro{,2}t'
[zy@Rocky9 ~]$ echo -e "rooot" | grep -E 'ro{3}t'
rooot
​
#匹配正负数
[zy@Rocky9 ~]$ echo -e "-100\n100" | grep -E '^[0-9]*$'
100
[zy@Rocky9 ~]$ echo -e "-100\n100" | grep -E '^\-?[0-9]*$'
-100
100
​
#匹配IP地址
[root@Rocky9 ~]# ifconfig ens160 | grep -Eo  "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | head -n 1
192.168.106.131
​
位置锚定
^                    #行首锚定, 用于模式的最左侧
$                    #行尾锚定,用于模式的最右侧
^PATTERN$            #用于模式匹配整行
< 或 b               #词首锚定,用于单词模式的左侧
> 或 b               #词尾锚定,用于单词模式的右侧
<PATTERN>            #匹配整个单词
​
#匹配整个单词
[root@Rocky9 ~]# cat a.txt 
helloworld
hellopytho
hello
[root@Rocky9 ~]# cat a.txt | grep -E "hello"
helloworld
hellopytho
hello
[root@Rocky9 ~]# cat a.txt | grep -E "^hello$"
hello
​
#匹配非空行
[root@Rocky9 ~]# cat a.txt 
helloworld
​
hellopytho
​
hello
[root@Rocky9 ~]# cat a.txt | grep -vE "^$"
helloworld
hellopytho
hello
​
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+ 
#可以匹配abcabcabc
[root@Rocky9 ~]# echo "abcabcabc" | grep -E "(abc){3}"
abcabcabc
​
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ... 
#可以匹配abcabc
[root@Rocky9 ~]# echo "abcabcabc" | grep -E "(abc)\1"
abcabcabc

13、文本处理三剑客之grep

文本搜索工具,根据用户指定的 “模式” 对目标文本逐行进行匹配检查;打印匹配到的行
-E      #使用扩展的正则表达式
-e      #实现多个选项之间or关系
-i      #忽略大小写
-v      #显示没有被匹配上的行,即取反
-w      #匹配整个单词
-B      #显示匹配到的字符串所在的行以及前N行
-A      #显示匹配到的字符串所在的行以及后N行
-C      #显示匹配到的字符串所在的行以及前后N行
m|--max-count=N              #只匹配N行,是行,不是次数,一行可能匹配两个
-n|--line-number             #显示匹配的行号
-o|--only-matching           #仅显示匹配到的字符串
-r|--recursive               #递归目录,但不处理软链接
-R|--dereference-recursive   #递归目录,但处理软链接
-c|--count                   #统计匹配的行数,是行数,一行可以匹配一次到多次
​
#取包含/bin/bash的第一行
[zy@Rocky9 ~]$ grep -m 1 "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
​
#取非空的行,^$取空行 -v取相反的行
[zy@Rocky9 ~]$ cat file.txt 
hello world
​
hello python
​
​
hello java
[zy@Rocky9 ~]$ grep -v "^$" file.txt 
hello world
hello python
hello java
​
​
#忽略大小写查找字符串
[zy@Rocky9 ~]$ grep -I root /etc/passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
​
#显示服务器有多少核
[zy@Rocky9 ~]$ cat /proc/cpuinfo | grep -Eic "processor"
4
​
#显示以#开头的行的数量
[zy@Rocky9 ~]$ grep -c "^#" /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64 
313
​
#输出年纪之和
[zy@Rocky9 ~]$ cat age.txt 
xiaowang=24
xiaozhang=24
xiaolu=16
[zy@Rocky9 ~]$ cut -d "=" -f 2 age.txt | tr -t "\n" "+" | grep -Eo ".*[0-9]+" | bc
64

14、文本处理三剑客之sed

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n|--quiet|--silent                             #不输出模式空间内容到屏幕,即不自动打印
-e script|--expression=script                   #多个script,or 的关系
-i[SUFFIX]|--in-place[=SUFFIX]                  #-i 直接修改文件,-i.bak 以.bak后缀备份原文件
-c|--copy                                       #配合i一起使用,保留原文件
-E|-r|--regexp-extended                         #扩展正则表达式
​
注意配合模式
-ir                                             #此组合不支持         
-ri                                             支持
-i-r                                            支持 
-ni                                             危险,会清空文件
​
地址格式:
空                          #对全文进行处理
N                           #显示具体行号
$                           #最后一行
/pattern/                   #能被匹配到的每一行
M,N                         #第M行到第N行
M,+N                        #第M行到第M+N行 3,+4 表示从第3行到第7行
/pattern1/,/pattern2/       #从第一个匹配行开始,到第二个匹配行中间的行
M,/pattern/                 #行号开始,匹配结束
/pattern/,N                 #匹配开始,行号结束
​
#步长
1~2                         #奇数行
2~2                         #偶数行
​
命令:
p                           #打印当前模式空间内容
Ip                          #忽略大小写输出
d                           #删除模式空间匹配的行
a [\]text                   #在指定行后面追加文本,支持使用\n实现多行追加
i [\]text                   #在行前面插入文本
c [\]text                   #替换行为单行或多行文本
w file                      #保存模式匹配的行至指定文件
r file                      #读取指定文件的文本至模式空间中匹配到的行后
​
#在结尾出添加一行内容
[zy@Rocky9 ~]$ cat age.txt 
xiaowang=24
xiaozhang=24
xiaolu=16
[zy@Rocky9 ~]$ cat age.txt | sed  '$a \hello world'
xiaowang=24
xiaozhang=24
xiaolu=16
hello world
​
查找替换:
s/parttern/replace/修饰符  #查找替换,支持其它分隔符
修饰符:
g       #行内全局替换
p       #显示替换成功的行
i       #忽略大小写
后向引用:
\1      第一个分组
\2      第二个分组
&       所有搜索内容
​
[zy@Rocky9 ~]$ echo "abcabcabc" | sed -n 's/abc/xyz/p'
xyzabcabc
[zy@Rocky9 ~]$ echo "abcabcabc" | sed -n 's/abc/xyz/gp'
xyzxyzxyz
#后向引用
[zy@Rocky9 ~]$ echo "abcabcabc" | sed -En 's/(abc).*/\1hello/p'
abchello
#在bbb后面添加---符号
[zy@Rocky9 ~]$ sed  '/bbb/a\---' test.txt
aaa
bbb
---
ccc
bbb
---
[zy@Rocky9 ~]$ cat test.txt 
aaa
bbb
ccc
bbb
​

标签:10,--,每日,常用命令,zy,Linux,txt,root,Rocky9
From: https://blog.csdn.net/Ygnah_Z/article/details/142891294

相关文章

  • linux free 解释
    [root@kafka-1node_export]#free-mtotalusedfreesharedbuff/cacheavailableMem:3896391303094743273在Linux系统中,free-m命令用于显示系统内存的使用情况。输......
  • Linux NFS
    NFS网络文件系统,英文NetworkFileSystem(NFS),是由SUN公司研制的UNIX表示层协议(presentationlayerprotocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。用vm虚拟两个linux;并同时关闭firewalld&SELINUXsystemctldisablefirewalldsetenforce0 s......
  • arm Linux中dma的cache管理
    概述前两周有人询问DMA下的cache操作和dma-coherent。以前零碎看过代码。临时找,还没有找到。这两天整理了调用流程,也找到了dma-coherent的用法。Linux的文档里没有详细说明dma-coherent的用法。根据代码,如果dma的设备树里有dma-coherent,Linux则认为硬件会维护cache一致性,不会在d......
  • Linux系统之ipcalc命令的基本使用
    (Linux系统之ipcalc命令的基本使用)一、ipcalc命令介绍ipcalc命令是一个用于计算和显示IP地址和子网掩码相关信息的工具。它可以帮助用户快速计算出IP地址、子网掩码、网络地址、广播地址等信息。二、ipcalc命令的使用帮助2.1ipcalc命令的help帮助信息使用--help,查询ipca......
  • 【Linux】useradd和adduser的区别
    先说结论:useradd是Linux本身自带的命令,属于原始级命令,有很多的参数可以设置,但对初学者使用不太友好。         adduser是一个Perl脚本,【推荐使用】在Linux系统中,创建用户是一个常见的操作,而useradd和adduser是两个常用的命令。虽然这两个命令的主要功能相似,但......
  • Linux集群架构搭载高可用负载均衡集群
    一.Linux集群概述•根据功能划分为两大类:高可用和负载均衡•高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务•实现高可用的开源软件有:heartbeat、keepalived•负载均衡集群,需要有一台服务器作为分发器,它负责把用......
  • 【Linux权限维持】红队1.0
    原创白安全组今年的红队评分标准,红队维持权限时间越久,得分越高,所以权限维持迫在眉睫。一、隐藏技巧1.1修改文件属性蓝队如果根据时间来判断文件是否为后门,可以通过参考index.php的时间,来比对,来排出shell文件我们可以使用touch命令,来修改文件或者目录的时间属性。包括存......
  • Linux
    基本概念简单分类Windows:微软公司的操作系统。Mac:苹果公司的类Unix操作系统。Linux:基于Linux内核的类Unix操作系统总称,如Ubuntu和CentOS。Unix是最早的多用户、多任务操作系统。文件管理在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘......
  • Linux部署Java项目脚本
    1、新建startup.sh文件,写入内容:注意:1、"--spring.profiles.active=prod",是在springBoot项目中实际的生产环境配置2、"-Xms128m-Xmx1024m",可根据实际资源分配内存大小3、"/home/jenkins-build/workspace/8888/springBootProject.jar",实际jar包所在路径4、"springBoo......
  • 软考架构-每日综合知识14
    三级模式与两层映射三级模式:外模式对应视图,模式(也称为概念模式)对应数据库表,内模式对应物理文件。两层映像:外模式-模式映像,模式-内模式映像;两层映像可以保证数据库中的数据具有较高的逻辑独立性和物理独立性。数据库设计过程三个范式第一范式(......