磁盘和文件系统管理

#查看磁盘使用情况
[root@192 ~]# df -Th
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  886M     0  886M   0% /dev
tmpfs               tmpfs     904M     0  904M   0% /dev/shm
tmpfs               tmpfs     904M  8.7M  895M   1% /run
tmpfs               tmpfs     904M     0  904M   0% /sys/fs/cgroup
/dev/mapper/cl-root xfs        26G  1.5G   25G   6% /
/dev/sda1           ext4      976M  136M  774M  15% /boot
tmpfs               tmpfs     181M     0  181M   0% /run/user/0
tmpfs               tmpfs     181M     0  181M   0% /run/user/1000
[root@192 ~]# df
Filesystem          1K-blocks    Used Available Use% Mounted on
devtmpfs               907128       0    907128   0% /dev
tmpfs                  924780       0    924780   0% /dev/shm
tmpfs                  924780    8856    915924   1% /run
tmpfs                  924780       0    924780   0% /sys/fs/cgroup
/dev/mapper/cl-root  27245572 1547844  25697728   6% /
/dev/sda1              999320  138464    792044  15% /boot
tmpfs                  184956       0    184956   0% /run/user/0
tmpfs                  184956       0    184956   0% /run/user/1000
[root@192 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             886M     0  886M   0% /dev
tmpfs                904M     0  904M   0% /dev/shm
tmpfs                904M  8.7M  895M   1% /run
tmpfs                904M     0  904M   0% /sys/fs/cgroup
/dev/mapper/cl-root   26G  1.5G   25G   6% /
/dev/sda1            976M  136M  774M  15% /boot
tmpfs                181M     0  181M   0% /run/user/0
tmpfs                181M     0  181M   0% /run/user/1000
[root@192 ~]#
​
#查看文件占用情况
[root@192 ~]# du -h
44K     .
[root@192 ~]# du -ah
4.0K    ./.bash_logout
4.0K    ./.bash_profile
4.0K    ./.bashrc
4.0K    ./.cshrc
4.0K    ./.tcshrc
4.0K    ./anaconda-ks.cfg
4.0K    ./.bash_history
4.0K    ./.lesshst
4.0K    ./test
4.0K    ./ll
4.0K    ./test1
44K     .
[root@192 ~]#

硬链接与符号连接:ln

#不加参数创建硬链接、-s 创建软连接
[root@192 ~]# ll
total 16
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-r--r--. 1 root root  611 Mar 26 03:19 ll
-rw-r--r--. 1 root root  266 Mar 26 01:17 test
-rw-r--r--. 1 root root   81 Mar 26 03:36 test1
drwxr-xr-x. 2 root root    6 Mar 26 03:43 testdir
lrwxrwxrwx. 1 root root    7 Mar 26 03:47 testdirln -> testdir
lrwxrwxrwx. 1 root root    4 Mar 26 03:44 testln -> test
[root@192 ~]# ll -i
total 16
34072132 -rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
34072184 -rw-r--r--. 1 root root  611 Mar 26 03:19 ll
34072183 -rw-r--r--. 1 root root  266 Mar 26 01:17 test
34072186 -rw-r--r--. 1 root root   81 Mar 26 03:36 test1
16808713 drwxr-xr-x. 2 root root    6 Mar 26 03:43 testdir
34072185 lrwxrwxrwx. 1 root root    7 Mar 26 03:47 testdirln -> testdir
34072182 lrwxrwxrwx. 1 root root    4 Mar 26 03:44 testln -> test
[root@192 ~]# ln test1 testln1
[root@192 ~]# ll -i
total 20
34072132 -rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
34072184 -rw-r--r--. 1 root root  611 Mar 26 03:19 ll
34072183 -rw-r--r--. 1 root root  266 Mar 26 01:17 test
34072186 -rw-r--r--. 2 root root   81 Mar 26 03:36 test1
16808713 drwxr-xr-x. 2 root root    6 Mar 26 03:43 testdir
34072185 lrwxrwxrwx. 1 root root    7 Mar 26 03:47 testdirln -> testdir
34072182 lrwxrwxrwx. 1 root root    4 Mar 26 03:44 testln -> test
34072186 -rw-r--r--. 2 root root   81 Mar 26 03:36 testln1
[root@192 ~]#
​

观察磁盘分区情况

[root@192 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             886M     0  886M   0% /dev
tmpfs                904M     0  904M   0% /dev/shm
tmpfs                904M  8.7M  895M   1% /run
tmpfs                904M     0  904M   0% /sys/fs/cgroup
/dev/mapper/cl-root   26G  1.5G   25G   6% /
/dev/sda1            976M  136M  774M  15% /boot
tmpfs                181M     0  181M   0% /run/user/0
​
[root@192 ~]# lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0    0  30G  0 disk
├─sda1        8:1    0   1G  0 part /boot
└─sda2        8:2    0  29G  0 part├─cl-root 253:0    0  26G  0 lvm  /└─cl-swap 253:1    0   3G  0 lvm  [SWAP]
sr0          11:0    1   7G  0 rom
[root@192 ~]#
​
​
[root@192 ~]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
​
Number  Start   End     Size    Type     File system  Flags1      1049kB  1075MB  1074MB  primary  ext4         boot2      1075MB  32.2GB  31.1GB  primary               lvm
​
[root@192 ~]# blkid
/dev/sda1: UUID="64ec4d3a-d3ea-4aa6-931e-1fe06bc6a11c" TYPE="ext4" PARTUUID="5d0c8e2f-01"
/dev/sda2: UUID="y4NDvp-3WGy-oAPF-ceTb-OP7n-BeiW-RxcP3F" TYPE="LVM2_member" PARTUUID="5d0c8e2f-02"
/dev/sr0: UUID="2020-01-03-21-42-40-00" LABEL="CentOS-8-1-1911-x86_64-dvd" TYPE="iso9660" PTUUID="087a73cc" PTTYPE="dos"
/dev/mapper/cl-root: UUID="489bc07d-91d5-4c42-bea8-7ed0f59c9cf7" TYPE="xfs"
/dev/mapper/cl-swap: UUID="5c75ef5e-64d4-4eeb-b152-4fad4e711f73" TYPE="swap"
​

磁盘分区

[root@192 ~]# fdisk /dev/sda
​
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
​
​
Command (m for help): m
​
Help:
​DOS (MBR)a   toggle a bootable flagb   edit nested BSD disklabelc   toggle the dos compatibility flag
​Genericd   delete a partition   #删除一个分区F   list free unpartitioned spacel   list known partition typesn   add a new partition  #新增一个分区p   print the partition table    #在屏幕上显示分区表t   change a partition typev   verify the partition tablei   print information about a partition
​Miscm   print this menuu   change display/entry unitsx   extra functionality (experts only)
​ScriptI   load disk layout from sfdisk script fileO   dump disk layout to sfdisk script file
​Save & Exitw   write table to disk and exit #保存q   quit without saving changes  #不保存推退出
​Create a new labelg   create a new empty GPT partition tableG   create a new empty SGI (IRIX) partition tableo   create a new empty DOS partition tables   create a new empty Sun partition table
​
​
Command (m for help):

磁盘格式化

xfs文件格式化

[root@192 ~]# grep  'processor' /proc/cpuinfo
processor       : 0
processor       : 1
[root@192 ~]# mkfs.xfs -f -d agcount=2 /dev/sda3
meta-data=/dev/sda3              isize=512    agcount=2, agsize=655360 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1
data     =                       bsize=4096   blocks=1310720, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@192 ~]#

ext4文件格式化

[root@192 ~]# mkfs.ext4  /dev/sda3
mke2fs 1.44.6 (5-Mar-2019)
/dev/sda3 contains a ext4 file systemcreated on Sat Mar 26 18:26:53 2022
Proceed anyway? (y,N) y
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: d418717d-a381-405d-a996-8d0a8efb39ef
Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736
​
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
​
[root@192 ~]#

文件系统检验

#xfs文件系统
[root@192 ~]# xfs_repair /dev/sda3
Phase 1 - find and verify superblock...
Phase 2 - using internal log- zero log...- scan filesystem freespace and inode maps...- found root inode chunk
Phase 3 - for each AG...- scan and clear agi unlinked lists...- process known inodes and perform inode discovery...- agno = 0- agno = 1- process newly discovered inodes...
Phase 4 - check for duplicate blocks...- setting up duplicate extent list...- check for inodes claiming duplicate blocks...- agno = 0- agno = 1
Phase 5 - rebuild AG headers and trees...- reset superblock...
Phase 6 - check inode connectivity...- resetting contents of realtime bitmap and summary inodes- traversing filesystem ...- traversal finished ...- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
[root@192 ~]#
#ext4文件系统检测#
[root@192 ~]# fsck.ext4 /dev/sda3
e2fsck 1.44.6 (5-Mar-2019)
/dev/sda3: clean, 11/327680 files, 42078/1310720 blocks
[root@192 ~]# fsck.ext4 -f /dev/sda3
e2fsck 1.44.6 (5-Mar-2019)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda3: 11/327680 files (0.0% non-contiguous), 42078/1310720 blocks
[root@192 ~]#
​

文件系统挂载

[root@192 ~]# mount UUID="aabdb654-abcc-460f-bd36-42d4122db3e1" /root/mounttest/

[root@192 ~]# mkdir  mounttest
[root@192 ~]# ls
anaconda-ks.cfg  ll  mounttest  test  test1  testdir  testdirln  testln  testln1
[root@192 ~]# blkid
/dev/sr0: UUID="2020-01-03-21-42-40-00" LABEL="CentOS-8-1-1911-x86_64-dvd" TYPE="iso9660" PTUUID="087a73cc" PTTYPE="dos"
/dev/sda1: UUID="64ec4d3a-d3ea-4aa6-931e-1fe06bc6a11c" TYPE="ext4" PARTUUID="5d0c8e2f-01"
/dev/sda2: UUID="y4NDvp-3WGy-oAPF-ceTb-OP7n-BeiW-RxcP3F" TYPE="LVM2_member" PARTUUID="5d0c8e2f-02"
/dev/sda3: UUID="aabdb654-abcc-460f-bd36-42d4122db3e1" TYPE="xfs" PARTUUID="5d0c8e2f-03"
/dev/mapper/cl-root: UUID="489bc07d-91d5-4c42-bea8-7ed0f59c9cf7" TYPE="xfs"
/dev/mapper/cl-swap: UUID="5c75ef5e-64d4-4eeb-b152-4fad4e711f73" TYPE="swap"
[root@192 ~]# mount UUID="aabdb654-abcc-460f-bd36-42d4122db3e1" /root/mounttest/
[root@192 ~]#   lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0    0  35G  0 disk
├─sda1        8:1    0   1G  0 part /boot
├─sda2        8:2    0  29G  0 part
│ ├─cl-root 253:0    0  26G  0 lvm  /
│ └─cl-swap 253:1    0   3G  0 lvm  [SWAP]
└─sda3        8:3    0   5G  0 part /root/mounttest
sr0          11:0    1   7G  0 rom
[root@192 ~]# cd mounttest/
[root@192 mounttest]# touch test
[root@192 mounttest]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 26 18:44 test
[root@192 mounttest]#
#卸载目录
[root@192 mounttest]# umount /root/mounttest/
umount: /root/mounttest/: target is busy.  #在这个目录位置无法卸载
[root@192 mounttest]# cd ../
[root@192 ~]# umount /root/mounttest/
​

设置启动挂载

设置开机自动挂载/dev/sda3挂载到 /root/mounttest

​
[root@192 ~]# lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0    0  35G  0 disk
├─sda1        8:1    0   1G  0 part /boot
├─sda2        8:2    0  29G  0 part
│ ├─cl-root 253:0    0  26G  0 lvm  /
│ └─cl-swap 253:1    0   3G  0 lvm  [SWAP]
└─sda3        8:3    0   5G  0 part /root/mounttest
sr0          11:0    1   7G  0 rom
[root@192 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Mar 22 05:09:47 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=64ec4d3a-d3ea-4aa6-931e-1fe06bc6a11c /boot                   ext4    defaults        1 2
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/sda3               /root/mounttest         xfs     defaults        0 0
[root@192 ~]#
​

文件与文件系统的压缩

#单一文件
[root@192 ~]# gzip fiel.txt #压缩
[root@192 ~]# ll
total 12
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-r--r--. 1 root root   35 Mar 26 19:45 fiel.txt.gz
drwxr-xr-x. 2 root root   18 Mar 26 18:44 mounttest
-rw-r--r--. 1 root root  266 Mar 26 01:17 test
[root@192 ~]# zcat fiel.txt.gz  #查看压缩文件内容
sdasdasdas
[root@192 ~]# gzip -d fiel.txt  #解压缩
[root@192 ~]# ll
total 12
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-r--r--. 1 root root   11 Mar 26 19:45 fiel.txt
drwxr-xr-x. 2 root root   18 Mar 26 18:44 mounttest
-rw-r--r--. 1 root root  266 Mar 26 01:17 test
[root@192 ~]#
​

tar命令

#多个文件
tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]
-c 打包文件-    t 查看包文件     -x 解包  -j bz2文件后缀 -J xz文件后缀 -z gz文件后缀
​
[root@192 ~]# tar -zcv -f testfile3.tar.gz testfile3
testfile3
[root@192 ~]# ll
total 20
-rw-r--r--. 1 root root    0 Mar 26 19:51 testfile3
-rw-r--r--. 1 root root  115 Mar 26 20:11 testfile3.tar.gz
[root@192 ~]# tar -ztv -f testfile3.tar.gz testfile3
-rw-r--r-- root/root         0 2022-03-26 19:51 testfile3
[root@192 ~]# rm testfile3
rm: remove regular empty file 'testfile3'? yes
[root@192 ~]# ll
total 20
-rw-r--r--. 1 root root  115 Mar 26 20:11 testfile3.tar.gz
[root@192 ~]# tar -zxv -f testfile3.tar.gz
testfile3
[root@192 ~]# ll
total 20
-rw-r--r--. 1 root root    0 Mar 26 19:51 testfile3
-rw-r--r--. 1 root root  115 Mar 26 20:11 testfile3.tar.gz
[root@192 ~]#
​

XFS文件备份还原 xfsdump 备份 xfsrestor 还原

vi和vim编辑器

命令 说明
0 一行最前面
$ 一行最后面
H、M、L 屏幕第一个字符、中间、对后一个
G 文章最后一行
:set nu / nonu = 设置行号/ 取消行号
gg 文章第一行
1 ::::
/word 查找字符
n/N 向下朝朝/向上查找
x/X 后删除/前删除
dd 删除行
yy 复制
p 粘贴
J 光标所在行和下一行结合成1行
o/O 在光标所在前插入一行输入数据/在光标所在后插入一行输入数据
i/i 光标前后输入数据
w、q 、! 保存、退出、强制
r file_name 在光标后插入另一个文件内容
n1:n2 w file_name 将n1到n2行的内容保存到另一个文件
Ctrl V 区块选择
sp file_name
ctrl w +j 切换窗口

shell

shell

[root@192 ~]# echo $SHELL
/bin/bash

变量设置规则

变量名称只能是数字字母,不能以数字开头

用 ”=“ 连接

[root@192 ~]# myname=lxf
[root@192 ~]# echo ${myname}
lxf
[root@192 ~]# myinfo="myname is $myname"
[root@192 ~]# echo ${myinfo}
myname is lxf
#命令作为变量名称
[root@192 ~]# version=$(uname -r)
[root@192 ~]# echo $version
4.18.0-147.el8.x86_64
#追加变量内容
[root@192 ~]# myname=${myname}:jzj
[root@192 ~]# echo $myname
lxf:jzj
[root@192 ~]# myname=${myname}jzj
[root@192 ~]# echo $myname
lxf:jzjjzj
#取消变量
[root@192 ~]# unset myname
​

环境变量

[root@192 ~]# env
SSH_CONNECTION=192.168.1.2 54800 192.168.1.8 22
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=192.168.1.8
OLDPWD=/root/root
XDG_SESSION_ID=1
USER=root
SELINUX_ROLE_REQUESTED=
PWD=/root
HOME=/root
SSH_CLIENT=192.168.1.2 54800 22
SELINUX_LEVEL_REQUESTED=
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
TERM=xterm
SHELL=/bin/bash
SELINUX_USE_CURRENT_RANGE=
SHLVL=1
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
[root@192 ~]#read 从键盘输入
[root@192 / 22:08]#read myname
lxf
[root@192 / 22:10]#echo $myname
lxf
#数组[root@192 / 22:12]#arr[2]="2"
[root@192 / 22:12]#arr[1]="1"
[root@192 / 22:12]#echo $arr[2]
[2]
[root@192 / 22:12]#echo "${arr[1]},${arr[2]}"
1,2
[root@192 / 22:13]#

变量内容的删除、取代、替换

root@192 / 22:19]#echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@192 / 22:19]#echo ${path#/*usr/local/sbin:}
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@192 / 22:20]#echo ${path##/*:}
/root/bin
[root@192 / 22:21]#
[root@192 ~ 22:28]#alias vim=/bin/vi #设置别名
[root@192 ~ 22:28]#alias  #查看别名
alias rm='rm -i'
alias vim='/bin/vi'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-
[root@192 ~ 22:28]#unalias vim  #取消别名
[root@192 ~ 22:28]#alias
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-
[root@192 ~ 22:28]#
#history 相关操作886  ll887  history
[root@192 ~ 22:32]#!886
ll
total 20
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
drwxr-xr-x. 2 root root   18 Mar 26 19:47 mounttest
-rw-r--r--. 1 root root  135 Mar 26 21:18 test.test
-rw-r--r--. 1 root root  135 Mar 26 21:23 test1.test
-rw-r--r--. 1 root root  135 Mar 26 21:23 test2.test
[root@192 ~ 22:32]#!!  #执行上一条命令
ll
total 20
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
drwxr-xr-x. 2 root root   18 Mar 26 19:47 mounttest
-rw-r--r--. 1 root root  135 Mar 26 21:18 test.test

命令判断依据

cmd1 || cmd2 或 cmd1 && cmd2 且

[root@192 ~]# ll /root/dir || touch dir.txt
ls: cannot access '/root/dir': No such file or directory
[root@192 ~]# ll
-rw-r--r--. 1 root root    0 Mar 26 23:47 dir.txt
[root@192 ~]# ll /root/dir &&  touch dir1.txt
ls: cannot access '/root/dir': No such file or directory
[root@192 ~]# ll
total 24
-rw-r--r--. 1 root root    0 Mar 26 23:47 dir.txt
[root@192 ~]# ll /root/mounttest &&  touch /root/mounttest/dir1.txt
total 0
-rw-r--r--. 1 root root 0 Mar 26 18:44 test
[root@192 ~]#
[root@192 ~]# cd mounttest/
[root@192 mounttest]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 26 23:48 dir1.txt
[root@192 mounttest]#

数据流重定向

标准输入:< 、<<

标准输出:>、>>

标准错误输出:2>、2>>

标准输出和标准错误输出一起输出:&>等价 2>&1

[root@192 ~]# ll /root/ls &> ll.log
[root@192 ~]# cat ll.log
ls: cannot access '/root/ls': No such file or directory
[root@192 ~]# ll /root &> ll.log
[root@192 ~]# cat ll.log
total 8
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
-rw-r--r--. 1 root root    0 Mar 26 23:55 ll.log
drwxr-xr-x. 2 root root   34 Mar 26 23:48 mounttest
[root@192 ~]#

管道符[ | ]

管道符后第一个数据必定是命令 ,且这个命令能够接受标准输入的数据。

例如:less、more、head、tail等都是管道符命令

例如:ls、cp、mv等就不是

#cut 分割数据
[root@192 ~]# cat ll.log
total 8
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
-rw-r--r--. 1 root root    0 Mar 27 00:20 ll.log
drwxr-xr-x. 2 root root   50 Mar 27 00:18 mounttest
[root@192 ~]# cat ll.log | cut -d ' ' -f 1,2,3,4
total 8
-rw-------. 1 root root
-rw-------. 1 root root
-rw-r--r--. 1 root root
drwxr-xr-x. 2 root root
#grep 支持正则表达式
[root@192 ~]# cat ll.log | grep root
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
-rw-r--r--. 1 root root    0 Mar 27 00:20 ll.log
drwxr-xr-x. 2 root root   50 Mar 27 00:18 mounttest
[root@192 ~]#
#sort 排序的使用
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | sort -n
1
1
1
2
8
[root@192 ~]# cat ll.log | sort -t ' ' -n -k 2
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
-rw-r--r--. 1 root root    0 Mar 27 00:20 ll.log
drwxr-xr-x. 2 root root   50 Mar 27 00:18 mounttest
total 8
#列出重复的数据此时
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | uniq -c1 83 11 2
#统计多少行
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | wc5       5      10
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | wc -l   #行数
5
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | wc -w    #多少字
5
[root@192 ~]# cat ll.log | cut -d ' ' -f 2 | wc -m    #多少字符
10

双向重定向

#tee 输入到文件同时输出到屏幕
[root@192 ~]# ping 192.168.1.1 | tee ping.log
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.54 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.08 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.95 ms
^C
[root@192 ~]# ll
total 16
-rw-------. 1 root root 1377 Mar 22 05:13 anaconda-ks.cfg
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
-rw-r--r--. 1 root root  228 Mar 27 00:20 ll.log
drwxr-xr-x. 2 root root   50 Mar 27 00:18 mounttest
-rw-r--r--. 1 root root  227 Mar 27 00:35 ping.log
[root@192 ~]#

字符转换命令 tr、col、join、paste、expand

#tr
[root@192 ~]# cat ping.log
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms
64 bytes from 192.168.1.1: icmp_seq=206 ttl=64 time=1.52 ms
#删除指定字符串
[root@192 ~]# cat ping.log | tr -d from
64 bytes  192.168.1.1: icp_seq=1 ttl=64 tie=1.75 s
64 bytes  192.168.1.1: icp_seq=2 ttl=64 tie=1.86 s
64 bytes  192.168.1.1: icp_seq=206 ttl=64 tie=1.52 s
#将小写换成大写
[root@192 ~]# cat ping.log | tr '[a-z]' '[A-Z]'
64 BYTES FROM 192.168.1.1: ICMP_SEQ=1 TTL=64 TIME=1.75 MS
64 BYTES FROM 192.168.1.1: ICMP_SEQ=2 TTL=64 TIME=1.86 MS
64 BYTES FROM 192.168.1.1: ICMP_SEQ=206 TTL=64 TIME=1.52 MS
[root@192 ~]#
#join 两个文件要用共同点
[root@192 ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@192 ~]# head -n 3 /etc/shadow
root:$6$pu3H2LauUZyuWUto$0xWrLZgEbT2zegn0zGINhmqdJfyawY.Ta0D8TpxRh5LCMeXJVlNEnei2eJWw4KZnDMfx3z9/ItDcOMP9QL9Em/::0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
[root@192 ~]# join -t ':' /etc/passwd /etc/shadow | head -n 3
root:x:0:0:root:/root:/bin/bash:$6$pu3H2LauUZyuWUto$0xWrLZgEbT2zegn0zGINhmqdJfyawY.Ta0D8TpxRh5LCMeXJVlNEnei2eJWw4KZnDMfx3z9/ItDcOMP9QL9Em/::0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:18078:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:18078:0:99999:7:::
[root@192 ~]# join -t ':' -1 4 /etc/passwd -2 4 /etc/shadow | head -n 3
0:root:x:0:root:/root:/bin/bash:root:$6$pu3H2LauUZyuWUto$0xWrLZgEbT2zegn0zGINhmqdJfyawY.Ta0D8TpxRh5LCMeXJVlNEnei2eJWw4KZnDMfx3z9/ItDcOMP9QL9Em/::99999:7:::
join: 0:root:x:0:root:/root:/bin/bash:bin:*:18078:99999:7:::
0:root:x:0:root:/root:/bin/bash:daemon:*:18078:99999:7:::
/etc/passwd:6: is not sorted: sync:x:5:0:sync:/sbin:/bin/sync
[root@192 ~]#
#paste 将第二个文件内容与第一个文件内容 tab 键隔开
[root@192 ~]# paste anaconda-ks.cfg anaconda-ks.cfg#expand 将tab 转换成空格
expand -t 5 file_name    #默认tab 是8个空格 可以用 -t 修改

split 将大文件拆分成小文件

[root@192 ~]# split -b 300b anaconda-ks.cfg.bk anac
[root@192 ~]# ll
total 24
-rw-r--r--. 1 root root 1377 Mar 27 00:58 anacaa
-rw-------. 1 root root 1377 Mar 26 20:38 anaconda-ks.cfg.bk
[root@192 ~]# ll

正则表达式

[root@192 ~]# grep -n '20' ping.log  #指定字符所在行
3:64 bytes from 192.168.1.1: icmp_seq=206 ttl=64 time=1.52 ms
[root@192 ~]# grep -vn '20' ping.log #不含指定字符的行
1:64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms
2:64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms
[root@192 ~]# grep -in 'a' ping.log  #不区分大小写
2:64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  A
3:64 bytes from 192.168.1.1: icmp_seq=206 ttl=64 time=1.52 ms a
[root@192 ~]# grep -n 'f[sb]om' ping.log   #[]或的关系s或b 不能是sb
1:64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms  fbom
2:64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  fsom
RE字符 说明
^word 查找特定字符开头的行:grep -n '^#' anaconda-ks.cfg
word$ 查找特定字符结尾的行:grep -n 'end$' anaconda-ks.cfg
. 通配符 1个任意字符
\ 转义符 grep -n \" anaconda-ks.cfg
* 重复前一个字符 grep -n 'add*' anaconda-ks.cfg #d*代表0或多个
[list] #[]或的关系s或b 不能是sb grep -n 'f[sb]om' ping.log
[n1-n2] 两个字符之间的连续字符 [a-z] 、[A-Z]、[1-9]
[^list] 非指定字符 [^A-Z]
\{n,m\} 连续n到m个字符 grep -n 'ab\{2,\3}' anaconda-ks.cfg #abb、abbb 为结果
+ 前一个字符1个或1个以上
前一个字符0个或1个
|
() 找出群组字符串 god gld = g(o|l)d
()+ 多个重复的字符串 AasdasdasdQ =A(asd)+Q

sed

   sed -option [操作]

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

option 说明
-n sed操作过的行才会显示
-e 直接在命令行模式进行sed编辑
-i 直接修改读取文件内容
n1,n2 在指定n1,n2 行直接操作
操作 说明
a 在下一行新增
c 替换cword
d 删除
i 在前一行新增
p 打印
s 替换 正则表达式
#显示2、3行
[root@192 ~]# nl ping.log | sed -n '2,3p'2  64 bytes fsbom 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  fsom3  64 bytes from 192.168.1.1: icmp_seq=206 ttl=64 time=1.52 ms a
#删除2-22行
[root@192 /]# nl /etc/passwd | sed '2,21d'1  root:x:0:0:root:/root:/bin/bash22  centos8_user:x:1000:1000:centos8_user:/home/centos8_user:/bin/bash
#在第2行前后(i\a)插入指定字符
[root@192 ~]# nl ping.log | sed '2a drink tea'1  64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms  fbom2  64 bytes fsbom 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  fsom
drink tea[root@192 ~]# nl ping.log | sed '2i drink tea'1  64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms  fbom
drink tea2  64 bytes fsbom 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  fsom
#\n换行 插入2行
[root@192 ~]# nl ping.log | sed '2i drink tea \n aaaaaa'1  64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms  fbom
drink teaaaaaaa2  64 bytes fsbom 192.168.1.1: icmp_seq=2 ttl=64 time=1.86 ms  fsom
#c替换 将第二行替换成aaaaaaaaa
[root@192 ~]# nl ping.log | sed '2c aaaaaaaa '1  64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.75 ms  fbom
aaaaaaaa3  64 bytes from 192.168.1.1: icmp_seq=206 ttl=64 time=1.52 ms a
#提取IP地址
[root@192 ~]# cat ping.log | grep -n fsbom | sed 's/^.*fsbom //g' | sed 's/:.*$//g'
192.168.1.1
​
​

linux自学笔记(二)相关推荐

  1. Linux自学笔记 | 10 常用命令 - 压缩解压类

    Linux自学笔记 | 10 常用命令 - 压缩解压类 Linux自学笔记 | 01 文件系统和目录结构 Linux自学笔记 | 02 VIM编辑器的安装与使用 Linux自学笔记 | 03 Linu ...

  2. Linux 进阶笔记(二)

    这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...

  3. 数据结构自学笔记二、栈

    数据结构自学笔记二.栈 栈的定义 栈的作用 栈的顺序存储与随机存储 栈的基本功能的实现 先以顺序存储结构的栈为例. 然后再说说随机存储结构的栈吧 两栈共享空间 栈的一个重要应用--四则运算 算式的后缀 ...

  4. 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)

    你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...

  5. linux学习笔记二

    linux学习笔记二 文章目录 linux学习笔记二 finding finding hyx@hyx-computer:~$ cd mnt -bash: cd: mnt: No such file o ...

  6. 嵌入式Linux自学笔记(二)——文件IO

    一.简介 本节讨论Unix系统中大多数文件用到的5个函数:open,read,write,lseek,close.本节描述的函数经常被称为不带缓冲的IO.不带缓冲指的是每个read和write都调用内 ...

  7. Linux 读书笔记 二

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的"实验截图 ...

  8. Linux学习笔记二Shell教程

    Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...

  9. SUSE Linux 维护笔记二

    1.实现外网访问内网的远程桌面 单位机器服务器的IP地址是10.3.198.108,可以上外网,路由器上设置了内网的外网映射地址,内网的地址是192.168.0.* 现在要实现从10.x.x.x的校园 ...

最新文章

  1. Android自己定义组件系列【2】——Scroller类
  2. win7 win10下80端口被System进程占用的解决方法
  3. java中isclosed_java.sql.SQLException: Conntion is closed.解决方法
  4. mysql 5.0 修改字符集_修改及查看mysql数据库的字符集
  5. 二维三角元有限元方法matlab,有限元C++编程实践.doc
  6. bzoj 2440: [中山市选2011]完全平方数(二分+莫比乌斯函数)
  7. 推荐一个Oracle数据库学习的网站
  8. Copula函数初了解
  9. 宗地图绘制要求和规范_宗地图绘制的基本要求与内容.ppt
  10. matlab求两个向量均值,matlab求两个总体的均值向量和协方差矩阵
  11. Setup Factory 卸载时出现Invalid Start mode :archive filename 无法卸载问题
  12. VMware虚拟机安装macOS黑苹果教程,亲测流程,全过程问题解决方案记录
  13. Vscode——内置浏览器
  14. Mysql出现Table 'performance_schema.session_status' doesn't exist
  15. java 取余 负数_Java中有关负数取余的计算
  16. 发表微信朋友圈不带图片怎么发
  17. rviz显示矩形框BoundingBox
  18. Windows Postman中文版
  19. 求解佩尔方程的基本解
  20. 【宏】【DEBUG宏】

热门文章

  1. 黑马Redis笔记高级篇 | 多级缓存
  2. 理想边界尺寸怎么算_预算10万,沃兰多与哈弗F7应该怎么选?网友:论油耗它的优势明显...
  3. 简单的网址导航,何以长盛不衰?
  4. 全志A23方案硬件去掉电池后软件如何修改?
  5. 游戏后台数据存储解决方案
  6. 2021 程序媛跳槽记:百度阿里字节等各大厂面经篇
  7. 做个小游戏吧~貌似还挺准
  8. 阿里巴巴CTO线一面二面面经
  9. vue路由守卫的使用
  10. android 无障碍辅助,无障碍Daemon(辅助服务锁定)