Linux_文件处理

Linux基础命令


一.文件处理

sed //基于行的过滤和转换文本的流编辑器

  1. 不修改文件查看修改后的效果
[root@lei ~]# cat a /
123
456
789
[root@lei ~]# sed 's/123/321/g' a 
321
456
789
  1. sed - i // 修改文件内容(把123改为321)
[root@lei ~]# cat a
123
456
789
[root@lei ~]# sed -i 's/123/321/g' a
[root@lei ~]# cat a
321
456
789
  1. 1a+内容 //在文件第一行的后面加内容(lei)
[root@lei ~]# sed -i '1alei' a
[root@lei ~]# cat a
321
lei
456
789
  1. ^+指定内容/加入的内容 //匹配定位在某一行,在指定内容(lei)开头的后面加内容(haha)
[root@lei ~]# sed '/^lei/ahaha' a
321
lei
haha
456
789
  1. 1i+内容 //在第一行前面插入(hehe)
[root@lei ~]# sed -i '1ihehe' a
[root@lei ~]# cat a
hehe
321
lei
456
789
  1. 1c+内容 //修改第一行的内容(第一行改为123456)
[root@lei ~]# sed -i '1c123456' a 
[root@lei ~]# cat a
123456
321
lei
456
789
  1. 1d //把第一行内容删除
[root@lei ~]# sed -i '1d' a 
[root@lei ~]# cat a
321
lei
456
789
  1. 1p //只看第一行;sed -n 关闭显示全部内容,1p手动打印第一行
[root@lei ~]# cat a
321
lei
456
789
[root@lei ~]# sed -n '1p' a
321

二.文本排序

sort //默认升序排列,不是按照数值大小排序的

  1. sort -n // 根据数值大小进行升序排序
[root@lei ~]# sort -n ab
1 2 3 
1 3 5 
1 5 6 
4 5 6
8 9 1
10 11 12
  1. sort -nr // 根据数值大小进行降序排序
[root@lei ~]# sort -nr ab
10 11 12
8 9 1
4 5 6
1 5 6 
1 3 5 
1 2 3 
  1. sort -nk2 //第二列进行升序排序
[root@lei ~]# sort -nk2 ab
1 2 3 
1 3 5 
1 5 6 
4 5 6
8 9 1
10 11 12
  1. sort -n -t: -k3 //第三列进行升序排列,以:做分隔符
[root@lei ~]# cat abc
a:x:1:2:3
b:x:0:8:5
c:x:5:6:3
d:c:4:2:0
[root@lei ~]# sort -n -t: -k3 abc
b:x:0:8:5
a:x:1:2:3
d:c:4:2:0
c:x:5:6:3
  1. sort -nu //去重,排序后只显示一次
[root@lei ~]# cat ab
10 11 12
1 3 5
1 2 3
4 5 6
1 2 3 
1 5 6 
4 5 6
8 9 1
[root@lei ~]# sort -nu ab
1 3 5
4 5 6
8 9 1
10 11 12

uniq //text报告重复的行(连续且完全相同方为重复,先排序在去重)

  1. sort -n abc|uniq -c //显示文件重复的行数
[root@lei ~]# sort -n ab|uniq -c
      1 1 2 3
      1 1 2 3 
      1 1 3 5
      1 1 5 6 
      2 4 5 6
      1 8 9 1
      1 10 11 12
  1. sort -n abc|uniq -d //只显示重复的行
[root@lei ~]# cat ab
1 3 5
1 2 3
1 3 5
1 5 6
8 9 1
10 11 12
[root@lei ~]# sort -n ab|uniq -d
1 3 5
  1. sort -n abc|uniq -u //只显示未重复的行
[root@lei ~]# cat ab
1 3 5
1 2 3
1 3 5
1 5 6
8 9 1
10 11 12
[root@lei ~]# sort -n ab|uniq -u
1 2 3
1 5 6
8 9 1
10 11 12

二.文本统计

wc(word cont) // 单词次数

  1. wc ab // 行数(8) 单词数(18) 字符(39)
[root@lei ~]# wc ab
 6 18 39 ab
[root@lei ~]# cat ab
1 3 5
1 2 3
1 3 5
1 5 6
8 9 1
10 11 12
  1. cat ab|wc -c //显示字节数
[root@lei ~]# cat ab|wc -c
39
  1. cat ab|wc -l //显示行数
[root@lei ~]# cat ab|wc -l
6
  1. cat ab|wc -w //显示单词数
[root@lei ~]# cat ab|wc -w
18

三.大小统计

  1. 生成一个1G的test文件 //
    • /dev/zero是吐零设备
    • /dev/null是黑洞设备
[root@lei ~]# dd if=/dev/zero of=test bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.05442 s, 352 MB/s
[root@lei ~]# ls
a  ab  abc  anaconda-ks.cfg  test
  1. du -h //以人类友好的方式显示大小
[root@lei ~]# du -h test  //-h是human-readable 可读
1.0G	test
  1. du -s //显示总的占用空间大小
[root@lei ~]# du -s /root/
1048616	/root/
  1. du -sh //只显示这个文件大小
[root@lei ~]# du -sh /tmp/
4.0K	/tmp/

df //报告文件系统磁盘空间使用情况

  1. df //当前系统磁盘空间情况
[root@lei ~]#  df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                 904116       0    904116   0% /dev
tmpfs                    921916       0    921916   0% /dev/shm
tmpfs                    921916    8784    913132   1% /run
tmpfs                    921916       0    921916   0% /sys/fs/cgroup
/dev/mapper/rhel-root  52403200 2733576  49669624   6% /
/dev/nvme0n1p1          1038336  182824    855512  18% /boot
/dev/mapper/rhel-home  49209880  376152  48833728   1% /home
tmpfs                    184380       0    184380   0% /run/user/0

  1. df -h //以人类友好的方式显示大小
[root@lei ~]#  df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               883M     0  883M   0% /dev
tmpfs                  901M     0  901M   0% /dev/shm
tmpfs                  901M  8.6M  892M   1% /run
tmpfs                  901M     0  901M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   50G  2.7G   48G   6% /
/dev/nvme0n1p1        1014M  179M  836M  18% /boot
/dev/mapper/rhel-home   47G  368M   47G   1% /home
tmpfs                  181M     0  181M   0% /run/user/0
  1. df -i //显示inode信息
[root@lei ~]#  df -i
Filesystem              Inodes IUsed    IFree IUse% Mounted on
devtmpfs                226029   350   225679    1% /dev
tmpfs                   230479     1   230478    1% /dev/shm
tmpfs                   230479   551   229928    1% /run
tmpfs                   230479    17   230462    1% /sys/fs/cgroup
/dev/mapper/rhel-root 26214400 33438 26180962    1% /
/dev/nvme0n1p1          524288   301   523987    1% /boot
/dev/mapper/rhel-home 24616960     3 24616957    1% /home
tmpfs                   230479     5   230474    1% /run/user/0

四.主机名管理

1.hostname //查看或临时修改主机名,重开终端有效,重启失效

[root@lei ~]# hostname
lei
[root@lei ~]# hostname lc
[root@lei ~]# bash
[root@lc ~]# reboot
[root@lei ~]#
  1. hostnamectl //查看或永久修改主机名,重开终端生效,重启依然有效
[root@lei ~]# hostnamectl set-hostname lc
[root@lei ~]# bash
[root@lc ~]# 


五.其他

  1. time //显示命令执行的时间
[root@lc ~]# time cat /etc/hostname 
lc

real	0m0.002s
user	0m0.001s
sys	0m0.001s

2.clear //清屏 Ctrl+L

[root@lc ~]#clear

[root@lc ~]#
  1. whoami //显示当前登录用户ID
[root@lc ~]# whoami 
root
  1. w //显示当前的在线用户和显示正在运行的命令
[root@lc ~]# w
 21:33:01 up 16 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.91.1     21:16    1.00s  0.01s  0.01s w
  1. who //查看当前在线用户
[root@lc ~]# who
root     pts/0        2020-11-05 21:16 (192.168.91.1)

6.which ls //显示指令的绝对路径

[root@lc ~]# which is
/usr/bin/which: no is in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

7.date //显示或设置日期时间,不带参数的date用于显示当前系统日期时间

[root@lc ~]# date
Thu Nov  5 21:32:21 CST 2020

8.y-m-d-H-M-S //显示:年月日-时分秒 date -s以字符串方式设置时间

[root@lc ~]# date -s '2020-11-5 21:34:10'
Thu Nov  5 21:34:10 CST 2020
[root@lc ~]# date '+%y'          //年
20
[root@lc ~]# date '+%m'          //月
11
[root@lc ~]# date '+%d'          //日
05
[root@lc ~]# date '+%H'          //小时
21
[root@lc ~]# date '+%M'          //分钟
35
[root@lc ~]# date '+%S'          //秒钟
38

9.创建当前日期命名的文件

[root@lc ~]# mkdir $(date '+%y%m%d')
[root@lc ~]# ls
201105  a  ab  abc  anaconda-ks.cfg  test
[root@lc ~]# mkdir abc-$(date '+%H%M%S')
[root@lc ~]# ls
201105  a  ab  abc  abc-214625  anaconda-ks.cfg  test

10.cal //打印当前系统日历

[root@lc ~]# cal
    November 2020   
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30                       
  1. cal+年份 //可以打印任意年份
[root@lc ~]# cal 10000         //一万年
                   10000                              

       January               February      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28 29            
30 31                                      
        March                  April       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1
 5  6  7  8  9 10 11    2  3  4  5  6  7  8
12 13 14 15 16 17 18    9 10 11 12 13 14 15
19 20 21 22 23 24 25   16 17 18 19 20 21 22
26 27 28 29 30 31      23 24 25 26 27 28 29
                       30                  
         May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28 29 30   
                                           
        July                  August       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28 29 30 31      
30 31                                      
      September               October      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2    1  2  3  4  5  6  7
 3  4  5  6  7  8  9    8  9 10 11 12 13 14
10 11 12 13 14 15 16   15 16 17 18 19 20 21
17 18 19 20 21 22 23   22 23 24 25 26 27 28
24 25 26 27 28 29 30   29 30 31            
                                           
      November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                   1  2
 5  6  7  8  9 10 11    3  4  5  6  7  8  9
12 13 14 15 16 17 18   10 11 12 13 14 15 16
19 20 21 22 23 24 25   17 18 19 20 21 22 23
26 27 28 29 30         24 25 26 27 28 29 30
                       31                 

bc //数字运算时保留小数

1.安装bc //记住先连接镜像,然后挂载光驱,ls查看有没有镜像然后用rpm -ivh安装

[root@lc ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@lc ~]# rpm -ivh /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm 
warning: /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:bc-1.07.1-5.el8                  ################################# [100%]
[root@lc ~]# which bc
/usr/bin/bc
  1. 保留小数后几位 //scale后面是保留几位小数,‘/’代表除法
[root@lc ~]# echo 'scale=2;5/2'|bc
2.50                        //计算5除以2保留2位小数 
[root@lc ~]# echo 'scale=4;5/2'|bc
2.5000                      //计算2除以5保留5位小数 


程序组成?

1.ldd查看ls命令依赖哪些库文件

[root@lc ~]# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007ffe9c9fa000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f27b3bc2000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00007f27b39bc000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f27b35fa000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f27b3376000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f27b3172000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f27b4010000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f27b2f
  1. mv //移走依赖库文件
[root@lc ~]# mv /lib64/libselinux.so.1 /opt
[root@lc ~]# ls
ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
[root@lc ~]# mv /opt/libselinux.so.1 /lib64/
mv: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
[root@lc ~]# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007ffd7375c000)
	libselinux.so.1 => not found
	libcap.so.2 => /lib64/libcap.so.2 (0x00007f2494f0a000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f2494b48000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f2495333000)
[root@lc ~]# 

3.ln //软链接

[root@lc ~]# ln /opt/libselinux.so.1 /lib64/
[root@lc ~]# ls
201105  a  ab  abc  abc-214625  anaconda-ks.cfg  test
[root@lc ~]# 

上一篇:【LC刷题笔记】第一天:2+4+5(1-11)


下一篇:【题解】 「WC2021」表达式求值 按位+表达式树+树形dp LOJ3463