RHCSA笔记-03
vim 编辑文件
vim -o FILE1 FILE2 水平分屏方式显示两个文件内容
vim -O FILE1 FILE2 垂直分屏方式显示两个文件内容
- 切换编辑内容 ctrl+w+w
vim file+ 进入文件的末尾编辑
命令模式:
执行vim后最先进入命令模式,直接按键盘即可执行对应的命令。
dd 删除光标所在行
d enter 删除光标以及光标所在下一行的内容
dG 删除光标所在行以及文档尾的所有内容
dgg 删除光标所在行以及文档首的所有内容
d^ 删除光标到行首的内容(光标所在字符不会删除)
d$ 删除光标到行尾的内容
x 删除光标所在字符
cc 剪切 光标所在行 (进入插入模式---退出到命令模式(ESC))
NUMcc 从光标开始剪切指定行
yy 复制,复制光标所在行
NUMyy 从光标开始复制指定行 2yy
p 粘贴 (光标所在的下一行)
^ 跳转光标所在行的行首
$ 跳转光标所在行的行尾
gg 跳转到文档首
G 跳转到文档尾(末尾行行首)
NUMG 跳转到指定行
u 撤销 左撤销
ctrl+r 重做 右撤销
插入模式:
方向键移动光标,编辑内容
i 进入插入模式,插入在光标前
I 进入插入模式,插入在光标所在行的行首
a 进入插入模式,插入在光标后
A 进入插入模式,插入在光标所在行的行尾
o 进入插入模式,插入在光标所在的下一行
O 进入插入模式,插入在光标所在的上一行
s 删除光标所在字符,并进入插入模式
S 删除光标所在行,并进入插入模式
末行模式:
在命令模式输入“:”即可进入末行模式,会在屏幕最下一行左侧显示“:”
:w 将内容写入
:w /NEWFILE 将内容写到指定文件
:q 退出
:q!强制退出
:wq 保存并退出
:wq!强制保存并退出
:set nu 行号标记
:set nonu 取消行号标记
:24 跳转到指定行
/字符 匹配指定字符高亮标记
n 向下匹配关键字啊
N 向上匹配关键字
:2,4 d 删除2-4行
:2,4 co 10 复制2-4到第十行下
:r /file 将/file文件内容读取到当前文件
:%s /aaa/bbb/g 替换每一行中所有的aaa字符为bbb
可视模式:
在命令模式按下ctrl+v
-
通过上下键选取要编辑行
-
按下I 进入插入模式,编辑一行内容
-
esc 退出,对所有选取的行进行相同内容的编辑
echo 标准输出==打印命令
$引用变量
用$提取出变量的值,通过echo输出
[root@zhujd ~]# echo $SHELL
/bin/bash
[root@zhujd ~]# echo $HOSTNAME
zhujd
引号的区别
-
“ ” 双引号 弱引用 (可以实现变量替换 )
-
‘ ’ 单引号 强引用 (不能实现变量替换 )
-
`` 反引号 命令替换 $()
[root@zhujd ~]# echo $HOSTNAME
zhujd
[root@zhujd ~]# echo "$HOSTNAME"
zhujd
[root@zhujd ~]# echo '$HOSTNAME'
$HOSTNAME
[root@zhujd ~]# echo Today is date
Today is date
[root@zhujd ~]# echo Today is `date`
Today is Sat Nov 20 02:19:23 CST 2021
[root@zhujd ~]# echo Today is $(date)
Today is Sat Nov 20 02:19:40 CST 2021
数据流 “>” “>>” “<” “<<”
> 重定向符:可以将标准输出覆盖到指定文件,若文件没有则创建
[root@localhost ~]# echo this is a
this is a
[root@localhost ~]# echo this is a > aaa
[root@localhost ~]# cat aaa
this is a
[root@localhost ~]# echo this is aaa > aaa
[root@localhost ~]# cat aaa
this is aaa
重定向到空设备,垃圾站
>/dev/null
**>> 追加重定向符 **
[root@localhost ~]# echo this is a >> aaa
[root@localhost ~]# cat aaa
this is aaa
this is a
[root@localhost ~]# cat aaa > bbb
[root@localhost ~]# cat bbb
this is aaa
this is a
< 输入重定向符
[root@localhost ~]# cat file
this is file
[root@localhost ~]# cat < file 正常显示文件内容时会用到,表示将指定文件的内容输入给cat命令显示
this is file
<< 指定终止结束符,输入定义的字符即可退出
[root@localhost ~]# cat << EOF
> 123
> 55
> 44
> EOF
123
55
44
[root@localhost ~]# cat << EOF > newfile ==
[root@localhost ~]# cat > newfile <<EOF
\> this is file
\> EOF
文件三个描述字符:
0 标准输入
1 标准输出(正确输出)
2 错误输出
& 正确或者错误输出
| 管道符
前一个命令输出作为后一个命令的标准输入
[root@localhost ~]# echo 123456 |passwd --stdin redhat
|tee T型管道
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
[root@localhost ~]# cat file |tee ddd
this is file
[root@localhost ~]# cat ddd
this is file
[root@localhost ~]# echo this is aaa > aaa
[root@localhost ~]# cat aaa |tee ddd
this is aaa
[root@localhost ~]# cat ddd
this is aaa
[root@localhost ~]# cat file |tee -a ddd
this is file
[root@localhost ~]# cat ddd
this is aaa
this is file
-a或–append 附加到既有文件的后面,而非覆盖它
[command] | tee -a [file]
[command] | tee [file1] [file2] [file3] 写入多个文件
grep 过滤显示命令
grep命令用于按行提取文本内容
grep root /etc/passwd 把/etc/passwd文件中有root关键字的行显示到终端
-v 反过滤
grep -v root /etc/passwd 把/etc/passwd文件中没有root关键字的行显示到终端
-i 忽略大小写
grep -i ROOT /etc/passwd
-o 只显示关键字
-n 显现过滤信息标记行号
grep -n root /etc/passwd
把/etc/passwd文件中有root关键字的行标记行号显示到终端
-A 2 显示指定关键的行以及下两行
grep -A 2 root /etc/passwd
-B 2 显示指定关键的行以及上两行
-C 2 显示指定关键的行以及上下两行
-c 只显示匹配关键字行号
-w 按照单词过滤
ll /usr/bin | grep -w passwd
cut 文本剪切
-c 指定字符剪切
[root@kongd ~]#cut -c 1-3 /etc/passwd 剪切文件的前三个字符
-d 指定分割符
-f 指定字段
[root@kongd ~]# cut -d: -f 1 /etc/passwd | head -3 剪切/etc/passwd文件,通过:分割将第一个字段剪切并只显示前三行
root
bin
daemon
uniq 去重命令(重复行相邻)
该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行
-c 显示每一行以及重复行的 次数
[root@localhost ~]# cat b.txt
ccc
ccc
ccc
ddd
ddd
-d 只显示重复行
[root@localhost ~]# uniq -d b.txt
ccc
ddd
-D 显示所有重复行
[root@localhost ~]# uniq -D b.txt
ccc
ccc
ccc
ddd
ddd
sort 排序
- 按照字符比较进行排序
- sort命令执行后默认会按照字母顺序进行排序
-n 指定按照数值进行排序(默认升序)
-r 逆序排序 -nr
-u 去重,不论内容之间是否夹杂有其它内容,只要有两个一摸一样的内容
行,就可以去重
-f 忽略大小写
-t 指定分隔符
-k 指定字段
sort -t : -k 3 -n /etc/passwd
将/etc/passwd的内容安照:分割通过第三个字符基于数值进行升序排序显示
tr 字符替换或者字符删除
echo this is aaa | tr a b 把a字符替换为b字符
-c 反向替换
echo this is aaa | tr -c a b 把不是a的字符全替换为b
-d 删除指定字符
echo this is aaa | tr -d a
-s 将多个连续重复字符替换为单个字符
将多个连续的空格替换,成一个空格
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 887M 0 887M 0% /dev
tmpfs 904M 0 904M 0% /dev/shm
tmpfs 904M 9.7M 894M 2% /run
tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/nvme0n1p2 20G 4.3G 16G 22% /
/dev/nvme0n1p1 195M 147M 48M 76% /boot
tmpfs 181M 1.2M 180M 1% /run/user/42
tmpfs 181M 3.5M 178M 2% /run/user/0
/dev/sr0 7.4G 7.4G 0 100% /run/media/root/RHEL-8-1-0-BaseOS-x86_64
[root@localhost ~]# df -h | tr -s " " " "
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 887M 0 887M 0% /dev
tmpfs 904M 0 904M 0% /dev/shm
tmpfs 904M 9.7M 894M 2% /run
tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/nvme0n1p2 20G 4.3G 16G 22% /
/dev/nvme0n1p1 195M 147M 48M 76% /boot
tmpfs 181M 1.2M 180M 1% /run/user/42
tmpfs 181M 3.5M 178M 2% /run/user/0
/dev/sr0 7.4G 7.4G 0 100% /run/media/root/RHEL-8-1-0-BaseOS-x86_64
[root@localhost ~]# df -h | tr -s " " " " | cut -d " " -f 2
容量
887M
904M
904M
904M
20G
195M
181M
181M
7.4G
wc 文本统计命令
wc命令用于统计指定文本文件的行数、字数或字节数
行 单词数 字节数 文件名
-l 统计行数
-w 统计单词数
-c 统计字节数
-m 统计字符数
[root@zhujd ~]# wc -l /etc/passwd
45 /etc/passwd
stat 查看文件属性
[root@zhujd ~]# stat user
File: user
Size: 365 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34935670 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2021-11-19 23:57:51.661692584 +0800
Modify: 2021-11-19 23:57:36.780692815 +0800
Change: 2021-11-19 23:57:36.780692815 +0800
Birth: -
四种文件查找
-
whereis 查找文件匹配范围是环境变量路径(echo $PATH)查找所有文件
[root@zhujd ~]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [root@zhujd ~]# whereis pwd pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
-
which 查找文件匹配范围是环境变量路径(echo $PATH)查找所有可执行文件(x执行权限)
[root@zhujd ~]# which locate /usr/bin/locate [root@zhujd ~]# which whereis /usr/bin/whereis
-
locate 基于数据库查找(匹配速度快)–所有文件—确保所有数据文件更新到数据库文件updatedb
[root@zhujd ~]# updatedb [root@zhujd ~]# locate whereis /usr/bin/whereis /usr/share/bash-completion/completions/whereis /usr/share/man/man1/whereis.1.gz
-
find 全盘搜索所有文件 (比较慢)
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -name:按照文件名搜索 -iname:按照文件名搜索,不区分文件名大小写 -inum:inode 号搜索 -mtime +4 -4 4 :匹配修改内容的时间 • +4代表大于等于5天前的档名: find /var -mtime +4 • -4代表小于等于4天内的文件档名:find /var -mtime -4 • 4则是代表4-5那一天的文件档名: find /var -mtime 4 -type (f d l b c s p ):文件类型 find / -name FILENAME
常见压缩档
- .zip | zip 程序压缩打包的档案;(常见,但是因为不包含文档名编码信息,跨平台可能会乱码)
- .rar | rar 程序压缩打包的档案;(在windows上很常见,但是个商业软件)
- .gz | gzip 程序压缩的档案;(linux目前使用最广泛的压缩格式)
- .bz2 | bzip2 程序压缩的档案;
- .xz | xz 程序压缩的档案;
- .tar | tar 程序打包的资料,并没有压缩过;
- .tar.gz | tar 程序打包的档案,其中并且经过 gzip 的压缩 (最常见)
- .tar.bz2 | tar 程序打包的档案,其中并且经过 bzip2 的压缩
- .tar.xz | tar 程序打包的档案,其中并且经过 xz 的压缩 (新一代压缩选择)
- .7z | 7zip 程序压缩打包的档案。
windows 上推荐使用 7z,而 linux 上 推荐使用 tar.gz tar.xz 7z 之一。此外 rar 的损坏很容易修复,zip 受众多(需要注意乱码问题)
tar 压缩解压缩
-c 创建.tar格式的包文件
-x 解.tar包
-t 查看包的文件列表
-z 压缩为gzip .gz
-j 压缩为bzip2 .bz2
-J 压缩为xz .xz
-v 详细信息
-f 跟上包文件名,后面紧跟包文件名
tar -cf 789.tar 7 8 9 对7 8 9 三个文件打包
tar -cfz 789.tar.gz 7 8 9 格式错误
tar -czf 789.tar.gz 7 8 9 对7 8 9三个文件压缩为gzip
tar -cjvf 789.tar.bz2 7 8 9 对7 8 9三个文件压缩为bzip2,并显示详细信息
练习题:
- 将/etc/passwd 中第一个字段(用户名)截取到user文件中
- 将3,4 字段分别截取出来写入文件UID和文件GIU但是要使这两个文件中的信息是以数值由大到小的形式显示;
- 截取当前日期的年月日时分显示在文件A.txt
- 将3,4 字段分别截取出来写入文件UID和文件GIU但是要使这两个文件中的信息是以数值由小到大的形式显示;
- 通过查看时间命令将分别将年月日时分写入A文件,将当前显示为星期几追加写入A文件。或者在屏幕上输出“the day is (星期几)”
- 并将文件通过合并命令将UID与GID文件中的信息写入USERID文件 。
- 告诉用户当前系统有多少用户?
- 通过过滤指令将/etc/login.defs 文件中关键的配置信息显示在file文件中。
- 显示系统中执行频率最高的前三个命名
答:
-
1. [root@zhujd ~]#cut -d : -f 1 /etc/passwd > ~/user 2. [root@zhujd ~]# cut -d : -f 3 /etc/passwd |sort -nr > ~/UID [root@zhujd ~]# cut -d : -f 4 /etc/passwd |sort -nr > ~/GID 3. [root@zhujd ~]# date "+%Y-%m-%d %H:%M:%S" > ~/A.txt 4. [root@zhujd ~]# cut -d : -f 3 /etc/passwd |sort -n > ~/UID [root@zhujd ~]# cut -d : -f 4 /etc/passwd |sort -n > ~/GID 5. [root@zhujd ~]# date "+%Y-%m-%d %H:%M:%S" > ~/A [root@zhujd ~]# date "+%A" >> ~/A [root@zhujd ~]# echo the day is $(date "+%A") 或者[root@zhujd ~]# echo the day is $( date "+%A" |tee -a ~/A) 6. [root@zhujd ~]# cat GID UID > ~/USERID 7. [root@zhujd ~]# echo 当前系统用户数量为: $(cat -n ~/user |tail -1 |tr -s " " " "|cut -c 1-3) 或者[root@zhujd ~]# wc -l ~/user 8. [root@zhujd ~]# grep ^# -v /etc/login.defs |tee ~/file 9. [root@zhujd ~]# echo 系统中执行频率最高的前三个命令为:$(history |tr -s " " " "|cut -d " " -f 3|sort|uniq -c|sort -nr|head -3)