linux自学笔记(二)
磁盘和文件系统管理
#查看磁盘使用情况 [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自学笔记(二)相关推荐
- Linux自学笔记 | 10 常用命令 - 压缩解压类
Linux自学笔记 | 10 常用命令 - 压缩解压类 Linux自学笔记 | 01 文件系统和目录结构 Linux自学笔记 | 02 VIM编辑器的安装与使用 Linux自学笔记 | 03 Linu ...
- Linux 进阶笔记(二)
这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...
- 数据结构自学笔记二、栈
数据结构自学笔记二.栈 栈的定义 栈的作用 栈的顺序存储与随机存储 栈的基本功能的实现 先以顺序存储结构的栈为例. 然后再说说随机存储结构的栈吧 两栈共享空间 栈的一个重要应用--四则运算 算式的后缀 ...
- 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)
你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...
- linux学习笔记二
linux学习笔记二 文章目录 linux学习笔记二 finding finding hyx@hyx-computer:~$ cd mnt -bash: cd: mnt: No such file o ...
- 嵌入式Linux自学笔记(二)——文件IO
一.简介 本节讨论Unix系统中大多数文件用到的5个函数:open,read,write,lseek,close.本节描述的函数经常被称为不带缓冲的IO.不带缓冲指的是每个read和write都调用内 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的"实验截图 ...
- Linux学习笔记二Shell教程
Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...
- SUSE Linux 维护笔记二
1.实现外网访问内网的远程桌面 单位机器服务器的IP地址是10.3.198.108,可以上外网,路由器上设置了内网的外网映射地址,内网的地址是192.168.0.* 现在要实现从10.x.x.x的校园 ...
最新文章
- Android自己定义组件系列【2】——Scroller类
- win7 win10下80端口被System进程占用的解决方法
- java中isclosed_java.sql.SQLException: Conntion is closed.解决方法
- mysql 5.0 修改字符集_修改及查看mysql数据库的字符集
- 二维三角元有限元方法matlab,有限元C++编程实践.doc
- bzoj 2440: [中山市选2011]完全平方数(二分+莫比乌斯函数)
- 推荐一个Oracle数据库学习的网站
- Copula函数初了解
- 宗地图绘制要求和规范_宗地图绘制的基本要求与内容.ppt
- matlab求两个向量均值,matlab求两个总体的均值向量和协方差矩阵
- Setup Factory 卸载时出现Invalid Start mode :archive filename 无法卸载问题
- VMware虚拟机安装macOS黑苹果教程,亲测流程,全过程问题解决方案记录
- Vscode——内置浏览器
- Mysql出现Table 'performance_schema.session_status' doesn't exist
- java 取余 负数_Java中有关负数取余的计算
- 发表微信朋友圈不带图片怎么发
- rviz显示矩形框BoundingBox
- Windows Postman中文版
- 求解佩尔方程的基本解
- 【宏】【DEBUG宏】