1 Shortcuts
- 两次
Tab
键 -- 自动补全命令字、文件或目录名 \
-- 一行内容分成多行显示Ctrl+U/K
-- 删除当前光标所在处至行首/行尾的内容Ctrl+L
(clear) -- 快速清屏Ctrl+C
-- 中断,即取消命令执行Ctrl+A/Home
-- 切换到命令行首Ctrl+E
/End
-- 切换到命令行尾Shift+Page Up/Down
-- 查看上一页/下一页内容
2 目录操作命令
pwd
打印当前工作目录的位置
cd
切换工作目录(测试了用户可查看文件权限)
cd /usr/local/
-- 绝对路径cd ./share
-- 相对路径,“.”表示当前路径cd ../
-- 相对路径,“..”表示上一级路径cd ~
-- 切换到宿主目录下,“~”等同于/root
绝对路径cd -
-- 相对路径,“-”返回用户最近操作的一次目录
ls
选项 参数
ls
-- 显示指定目录下相关文件信息ls -a
-- 显示隐藏文件(包括当前目录.和上级目录..)ls -A
-- 隐藏文件ls -R
-- 递归显示所有子目录文件信息ls -l
-- 详细信息ls -d
-- 只显示当前目录ls -h
-- 以KB/MB/GB等显示文件大小ls -s
-- 文件占用磁盘空间大小(块大小)ls -i
-- 文件索引节点号(记录文件信息)
mkdir
选项 参数
创建目录
cd /opt
mkdir test1
--/opt
目录下新建空的目录test1
,相对路径mkdir test2 test3
--/opt
目录下同时新建test2
和test3
两个目录,相对路径mkdir {a..f}
/mkdir {aa,bb,cc}
-- 批量新建多个目录,使用{a..z}
或{1..10}
连续集合表示,也可使用{目录名1,目录名2,······}
取值列表方式表示mkdir -p a/b
-- 新建/opt/a/b
,选项-p
和相对路径
du
选项 参数
统计目录或文件占用的磁盘空间
du -a
-- 统计文件(默认只统计目录占用的磁盘空间)du -h
-- 以KB/MB等方式显示文件占用的磁盘空间du -B
-- 磁盘空间大小 --du -Bh /root/initial-set-ks.cfg
du -b
-- 统计文件本身占用空间 --du -bh /root/initial-set-ks.cfg
du -s
-- 统计占用的磁盘空间 --ls -hls /root/initial-set-ks.cfg
3 文件操作命令
stat
文件或目录
显示文件或目录的详细属性信息 -- stat /root/anaconda-ks.cfg
touch
选项 文件名
新建空白文件或更新文件的时间标记
touch -a
-- 只更改访问时间touch -c
-- 不创建任何文件touch -d
-- 使用指定字符串表示时间而非当前时间touch -m
-- 只更改修改时间
[root@localhost ~] # touch 1.txt 2.txt
[root@localhost ~] # touch {a.txt,b.txt}
[root@localhost ~] # touch {x..z}.txt
[root@localhost ~] # touch {1,12,123}.txt
cp
选项 源文件或目录 目标文件或目录
复制文件或目录
cp -r
-- 递归复制整个目录树,复制目录时必须使用该选项cp -p
-- 保持源文件的属性不变cp -f
-- 强制覆盖与目标文件或目录同名的文件或目录(覆盖时不提示)cp -i
-- 覆盖时提示
[root@localhost ~] # cp /opt/*.txt /opt/test1
[root@localhost ~] # cp -rf /opt/test1 /opt/test2/
[root@localhost ~] # cp /opt/1.txt /opt/test2
rm
选项 文件或目录
删除文件或目录
rm -f
-- 强行删除文件或目录并且不提醒rm -i
-- 删除文件或目录时提醒用户确认rm -r
-- 递归删除整个目录树,删除目录时必须使用该选项
mv
源文件或目录 目标文件或目录
剪切或重命名文件或目录
mv -f
-- 文件存在覆盖不提示mv -i
-- 文件存在覆盖提示mv -n
-- 不覆盖已存在文件
查找
which
命令字
在PATH环境变量中指定路径,定位与指定名字匹配的可执行命令的所在路径,同时也可判断该命令是否存在。
whereis
选项 文件名
whereis -b
-- 只搜索二进制文件whereis -m
-- 只搜索帮助文件whereis -s
-- 只搜索源代码文件
find
路径名 选项 查询结果 处理动作
在整个磁盘中搜索文件,查找速度较慢。
find -name
-- 文件名find -type
-- 文件类型find -type b
-- 块设备文件find -type c
-- 字符设备文件find -type d
-- 目录find -type f
-- 普通文件find -type l
-- 符号链接文件find -type p
-- 管道文件find -type s
-- 套接字文件
find -size
-- 文件大小find -user
-- 文件所属者find -group
-- 文件所属组find -perm
-- 文件权限find -ctime
-- 最近修改文件(权限)时间find -mtime
-- 最近修改(权限和内容)时间find -atime
-- 最近访问时间
locate
文件或目录
在后台对系统数据库(/var/lib/locatedb
)进行搜索
type
命令字
- 内部命令
builtin
- 外部命令
alias
-- 别名keyword
-- 关键字file
-- 外部命令
[root@localhost ~] # type cd
cd 是 shell 内嵌
[root@localhost ~] # type ls
ls 是 `ls --color=auto` 的别名
[root@localhost ~] # type -P ls
usr/bin/ls
[root@localhost ~] # type if
if 是 shell 关键字
ln
软链接文件
符号链接,一个文件改变另一个文件会随之发生改变,删除软链接文件对原始文件无影响。
ln -s 源文件或目录 链接文件或目录
硬链接文件
删除一个文件对另外一个文件无影响且无法硬链接目录。
ln -s 源文件 链接文件
4 文件内容操作命令
管道符
|
-- 将前面命令的结果作为后面命令的参数进行使用
重定向符
>
-- 覆盖重定向输出:将结果直接写入文件中(无文件自动创建,有文件直接覆盖)>>
-- 追加重定向输出:将结果直接写入文件中(无文件自动创建,有文件则追加)<
-- 重定向输出:命令中读取内容来自文件而不是键盘
cat
文件
查看文件内容
cat -b
-- 显示行号,不包括空行cat -n
-- 显示行号,包括空行
[root@localhost ~] # cat a.txt
[root@localhost ~] # cat >> a.txt << EOF
wc
选项 文件
wc -c
-- 统计字节数wc -l
-- 统计行数wc -w
-- 统计单词数wc -m
-- 统计字符数wc -L
-- 统计最长行的长度
more
+ less
分页
[root@localhost ~] # ls -lh /etc | more
[root@localhost ~] # more /opt/etc.txt
[root@localhost ~] # cat /opt/etc.txt | more
more
/ less
中命令快捷键
more | less | 功能 |
---|---|---|
无 | 方向键 | 向上滚动一行 |
Enter | 方向键 | 向下滚动一行 |
b | Page Up 或 b | 向上翻页 |
Space | Page Down 或 Space | 向下翻页 |
Ctrl+C 或 q | q | 退出分页显示模式 |
head
+ tail
截取文件中特定行数内容
head -n
-- 行数tail -n
-- 行数tail -f
-- 实时查看更新内容(Ctrl+C
终止)
5 解压缩操作命令
gzip
+ zcat
- 解压缩后缀名为
.gz
的归档文件gzip -d 归档文件名.gz
gunzip 归档文件名.gz
- 对
.gz
格式压缩文件不解压查看内容zcat 归档文件名.gz
gunzip -c 归档文件名.gz
gzip [-9] 文件名
-- 选项-9代表高强度压缩
bzip2
+ bzcat
- 解压缩后缀名为
.gz
的归档文件bzip2 -d 归档文件名.bz2
bunzip 归档文件名.bz2
- 对
.gz
格式压缩文件不解压查看内容bzcat 归档文件名.bz2
bunzip2 -c 归档文件名.bz2
bzip [-9] 文件名
zip
zip 归档文件名.zip 文件名
unzip [-d]
-- 指定解压路径unzip -l
-- 不解压查看
[root@localhost ~] # zip /home/test.zip /opt/1.txt /opt/2.txt
[root@localhost ~] # unzip -l /home/test.zip
[root@localhost ~] # unzip -d /mnt /home/test.zip
tar
可对文件和目录进行压缩。
创建
tar
选项 归档文件名 源文件或目录tar -c
-- 创建.tar格式的包文件tar -x
-- 解压.tar格式的包文件tar -v
-- 输出详细信息tar -f
-- 使用归档文件tar -p
-- 打包时保留原始文件及目录的权限
解压
tar
选项 归档文件名 [-C 目标路径]tar -t
-- 列表查看包内的文件tar -C
-- 解包时指定释放的目标文件夹tar -z
-- 调用gzip程序进行压缩或解压tar -j
-- 调用bzip2程序进行压缩或解压
[root@localhost ~] # tar -czvf /home/testgz.tar.gz /opt /mnt
[root@localhost ~] # tar -xzvf /home/testgz.tar.gz -C /media
6 vi
文本编辑器
命令模式
光标移动操作
- 光标移动
或 k
|或 j
、 h
或Backspace
|、 l
或Space
Enter
或+
|-
|n+
- 翻页
Page Down
或Ctrl+F
|Page Up
或Ctrl+B
Ctrl+D
|Ctrl+U
- 单词间快速跳转 --
w
|e
|b
|n+
- 行内快速跳转 --
Home
、^
或0
|End
或$
- 行间快速跳转 --
lG
或gg
|G
|nG
|n+
|n-
- 当前页跳转 --
H
|M
|L
|zt
|zz
|zb
- 行号显示 --
:set nu
|:set nonu
复制、粘贴和删除操作
- 删除 --
x
或Del
|X
|nx
|dd
|ndd
|d^
|d$
|dw
|de
|db
- 复制 --
yy
|nyy
|y^
|y$
|yw
|ye
|nyw
- 粘贴 --
p
|P
搜索操作
- 查找文件内容 --
/word
|?word
|n
|N
撤销操作
- 撤销 --
u
|U
- 保存 --
ZZ
输入模式
模式切换
- 行内添加数据 --
i
|I
|a
|A
- 行间添加数据 --
o
|O
输入模式操作
- 光标移动 --
| | | - 删除 --
Backspace
/Del
- 行内跳转 --
Home
/End
- 换行 --
Enter
末行模式
保存和退出操作
- 保存文件 --
:w
|:w /root/newfile
- 退出 --
:q
|:q!
- 保存文件并退出 --
:wq
|:wq!
打开新文件的操作
- 编辑新文件 --
:e/路径名/文件名
- 读取新文件 --
:r/路径名/文件名
替换操作
- 当前行替换 --
:s /old/new
|:s /old/new/g
- 行间替换 --
:m,n s/old/new/g
- 整行替换 --
:% s /old/new
|:% s /old/new/g
- 替换确认 --
:s /old/new/c
7 文本处理“三剑客”
元字符
^
-- 行的开始$
-- 行的终点\<
-- 匹配单词开头的位置\>
-- 匹配单词结尾的位置.
-- 匹配任意一个字符*
-- 重复匹配之前的字符0次或多次[class]
-- 匹配字符集class中的任意字符[^class]
-- 匹配任何不在字符集class中的字符[0-9]
或[a-z]
或[A-Z]
-- 匹配一组指定范围内的字符,如数字0~9a\{m\}
-- 匹配出现m次连续字符a的行a\{m,\}
-- 匹配至少出现m次连续字符a的行a\{m,n\}
-- 匹配出现m到n次连续字符a的行\
-- 转义符
grep
选项 “条件或正则表达式” 文本名
对文件数据内容的查找和定位
grep -v
-- 排除满足条件的内容grep -i
-- 忽略大小写grep -n
-- 输出的同时打印行号grep -c
-- 统计满足条件的行数grep -o
-- 仅显示匹配满足条件的字符串grep -e
-- 实现多个条件逻辑或的关系grep -A
-- 打印匹配条件的后几行grep -B
-- 打印匹配条件的前几行grep -C
-- 打印匹配条件的前后几行
[root@localhost ~] # grep -n "^a" test.txt
[root@localhost ~] # grep "5$" test.txt
[root@localhost ~] # grep "^1" test.txt | grep "5$"
[root@localhost ~] # grep -c "^$" test.txt
[root@localhost ~] # grep -c -i "^a" test.txt
[root@localhost ~] # grep -o "name" test.txt
[root@localhost ~] # grep -e "^a" -e "^y" test.txt
[root@localhost ~] # grep -C 1 "^x" test.txt
[root@localhost ~] # grep -B 2 "^x" test.txt
[root@localhost ~] # grep "^[0-9]*[0-9]$" test.txt
[root@localhost ~] # grep -i "^[a-z]*[a-z]$" test.txt
[root@localhost ~] # grep "^...$" test.txt
[root@localhost ~] # grep "h\{2\}" test.txt
[root@localhost ~] # grep "h\{3,4\}" test.txt
sed
选项
截取满足条件的特定行数以及替换
sed -n
-- 打印sed处理的那一行数据sed -e
-- 编辑,指定多个处理动作sed -f
-- 将sed的动作写入文件中sed -r
-- 使用扩展的正则表达式sed -i
-- 直接修改文件中的内容a
-- 在指定行的下一行插入数据i
-- 在指定行的上一行插入数据c
-- 替换指定行的数据d
-- 删除p
-- 打印s
-- 全部替换w
-- 保存r
-- 读取、匹配、并入y
-- 逐个替换
[root@localhost ~] # cat sed.txt
1 2 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed -n '2p' sed.txt
2
[root@localhost ~] # sed -n '2,4p' sed.txt
2 3 4
[root@localhost ~] # sed -n '2p;6p' sed.txt
2 6
[root@localhost ~] # sed -n '2,+3p' sed.txt
2 3 4 5
[root@localhost ~] # sed '3d' sed.txt
1 2 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '3,6d' sed.txt
1 2 11111 22222 33333 44444
[root@localhost ~] # sed '2ctest' sed.txt
1 test 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed 's/2/k/g' sed.txt
1 k 3 4 5 6 11111 kkkkk 33333 44444
[root@localhost ~] # sed '2itest' sed.txt
1 test 2 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '2a666' sed.txt
1 2 666 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '2,4iname' sed.txt
1 name 2 name 3 name 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed -i 's/^/#/' sed.txt
[root@localhost ~] # cat sed.txt
#1 #2 #3 #4 #5 #6 #11111 #22222 #33333 #44444
[root@localhost ~] # sed -i '2,6s/^#//' sed.txt
[root@localhost ~] # cat sed.txt
#1 2 3 4 5 6 #11111 #22222 #33333 #44444
awk
选项 ‘BEGIN{命令} pattern{命令} END{命令}’ 文件名
文件数据切片和截取满足条件的特定列数
awk -F
-- 指定分隔符,默认为空格或Tabawk -f
-- 调用awk脚本awk -v
-- 调用外部的Shell变量$1...$n$
-- 指定分隔符对应的值$0
-- 当前行的内容$NF
-- 最后一列NF
-- 指定分隔符号之后行的列数NR
-- 当前行的行号FS
-- 输入字段(列)分隔符,默认为空格或TabRS
-- 输入记录(行)分隔符,默认为换行符OFS
-- 输出字段(列)分隔符ORS
-- 输出记录(行)分隔符FILENAME
-- 保存当前的文件名
[root@localhost ~] # ls -lh /root | awk '{print $1}'
[root@localhost ~] # awk -F ":" '{print $5}' /etc/passwd
[root@localhost ~] # awk -F ":" '{print $NF} /etc/passwd'
[root@localhost ~] # awk '{print NR, $0}' /etc/passwd
[root@localhost ~] # awk -F ":" 'NR==2{print NF}' /etc/passwd
[root@localhost ~] # awk 'NR==8{print $0}' /etc/passwd
[root@localhost ~] # awk -v FS=':' -v OFS='\t' 'NT==2{print $1 $1}' /etc/passwd
[root@localhost ~] # awk -v FS=':' -v OFS='\t' -v ORS='\n' 'NR=2{print $1,$2} NR==3{print $1,$2}' /etc/passwd
[root@localhost ~] # awk 'BEGIN{print "hello"}{print $0}END{print FILENAME}' /etc/passwd
8 vim
的使用
命令模式
光标移动操作
- 光标移动
或 k
|或 j
、 h
或Backspace
|、 l
或Space
Enter
或+
|-
|n+
- 翻页
Page Down
或Ctrl+F
|Page Up
或Ctrl+B
Ctrl+D
|Ctrl+U
- 单词间快速跳转 --
w
|e
|b
|n+
- 行内快速跳转 --
Home
、^
或0
|End
或$
- 行间快速跳转 --
lG
或gg
|G
|nG
|n+
|n-
- 当前页跳转 --
H
|M
|L
|zt
|zz
|zb
- 行号显示 --
:set nu
|:set nonu
复制、粘贴和删除操作
- 删除 --
x
或Del
|X
|nx
|dd
|ndd
|d^
|d$
|dw
|de
|db
- 复制 --
yy
|nyy
|y^
|y$
|yw
|ye
|nyw
- 粘贴 --
p
|P
搜索操作
- 查找文件内容 --
/word
|?word
|n
|N
撤销操作
- 撤销 --
u
|U
- 保存 --
ZZ
输入模式
模式切换
- 行内添加数据 --
i
|I
|a
|A
- 行间添加数据 --
o
|O
输入模式操作
- 光标移动 --
| | | - 删除 --
Backspace
/Del
- 行内跳转 --
Home
/End
- 换行 --
Enter
末行模式
保存和退出操作
- 保存文件 --
:w
|:w /root/newfile
- 退出 --
:q
|:q!
- 保存文件并退出 --
:wq
|:wq!
打开新文件的操作
- 编辑新文件 --
:e/路径名/文件名
- 读取新文件 --
:r/路径名/文件名
替换操作
- 当前行替换 --
:s /old/new
|:s /old/new/g
- 行间替换 --
:m,n s/old/new/g
- 整行替换 --
:% s /old/new
|:% s /old/new/g
- 替换确认 --
:s /old/new/c
作业
使用
vim
打开本目录下的./man.config
文本文件,设定行号;bashvi /etc/man.config :set nu
移动到第58行行首,再向右移动30个字符,移动到第8行行尾,再向左移动3个单词:
bash58G 30→ 8G $ 3b
移动到第一行行首,并且向下搜索“man"这个字符串:
bashgg /man n
将50到100行之间的man替换为MAN,并且一个一个挑选是否需要修改;
bash:50,100s/man/MAN/gc
复制51到60行这十行的内容,并且贴到最后一行之后:
bash51G 10yy G p
删除11到30行之间的20行,去第29行首,并且删除15个字符;
bash11G 20dd 29G 15x
撤销全部操作,将文件复原:
bashu···/ :e!
将文件另存成一个名为
man.config.bak
的文件;bash:w man.config.bak
在
man.config.bak
文件最后一行后插入当前目录下turtle.txt
文件内容并保存;bashr ./turtle.txt
同时打开
man.config.bak
和man.config
bashvi ./man.config.bak ./man.config
将文件
man.config.bak
中添加的新内容的第1列到第10列拷贝并粘贴到man.config
中;bashctrl + v :set nu 152↓ 10→ y :n p
储存两个文件后离开vim。
bash:wq