1.1 tab补全
tab一次:输入的内容能够唯一标识,直接跳出命令。
tab两次:输入的命令不能唯一标识,再tab,显示出所有匹配的命令
tab命令的补全:vi,系统根据环境变量$PATH去文件下寻找命令
1.2 shell命令操作
cat:查看文件
Ctrl+a:跳转光标至最前
Ctrl+e:跳转光标至最后
Ctrl+k:删除光标后的内容
Ctrl+u:删除光标前的内容
Ctrl+l:清空屏幕
Ctrl+r:进入寻找界面,搜索历史命令
ping+ip :测试网络是否连通
Ctrl+c:停止当前正在运行的程序
touch:创建文件
mkdir:创建目录
1.3 vi/vim操作
vim是vi的升级版(命令模式,输入模式,末行模式)
1.3.1命令模式
光标移动h:左 l:右 j:下 k:上
数字 +h/l/k/j:移动多少格(不是按字节跳)
w:跳过空格后的第一个字符(跳到下一个单词的开头)
e:跳到下一个单词的末尾
b:从后往前跳空格(跳到上一个单词的开头)
数字+w/e/b:跳过几个空格
CTRL+f、pgup:向下翻页 CTRL+b、pgdn:向上翻页 pgUP
所在行行首:home和0(有空格直接跳到最前面)、^(有空格跳到最前面的第一个单词即略过首行空格)
所在行行尾:end、$
全文行首:gg
全文行尾:G
行数+gg:跳到第几行
标出行号:set nu
取消行号:set nonu
删除整行:dd
删除多行:数字+dd,从当前行开始删除
删除一个字符:x、delete
删除光标及之后的内容:D,d+$
删除光标之前的内容:d+^
复制光标所在行:yy
复制多行:数字+yy,从当前光标行开始复制
粘贴到光标的下一行:p
粘贴到光标的上一行:P
查找:/+要查找的内容(从上往下查找)、?+要查找的内容(从下往上查找)按n
替换光标所在字符:r
可替换一串字符:R ====> ESC退出
u:撤销一次编辑操作
数字+u:撤销多次操作
Ctrl+r:恢复上一次的撤销操作
.:重复了上一步操作
v:按照字符选择
Ctrl+v:按矩形选取,但可以上下左右调整所选区域大小
1.3.2从命令模式到编辑模式
i:光标前插入
I:行首插入
a:光标后插入
A:行尾插入
o:光标下行输入
O:光标上行输入
1.3.3末行模式
:w /文件路径/文件名(文件不存在自行创建,存在的话覆盖):将该文件复制到另一个文件中
:e /文件路径/文件名 打开一个新的文件 编辑
e ~/passwd1 ===> e /root/passwd1 ===> e./passwd1
r /文件路径/文件名 读入一个文件内容
r /etc/passwd
s /旧的字符/新的字符/:替换光标所在行的第一个匹配的字段
s /旧的字符/新的字符/g:替换光标所在行的所有字段
行号1,行号2 s /旧的字符/新的字符/:指定行间所有行的第一个匹配的字段
行号1,行号2 s /旧的字符/新的字符/g:指定行间所有行的所有字段
% s /旧的字符/新的字符/:全文所有行的第一个匹配的字段
% s /旧的字符/新的字符/g:全文所有行的所有字段
% s /old/new/gc c:提示用户是否替换
% s /old/new/gci:忽略大小写
:!+shell命令 “在文档中执行shell命令”
1.3.4打开文件
vi+行号(空格)+文件夹:表示打开文件夹到指定(行号)的行
vi+/关键字+文件夹:表示打开文件锁定到指定的关键字
1.3.5关闭文件
ctrl+z,ZZ
.vimrc:配置在用户的家目录下,/home/user1/
set nu
set ai:缩进
. /etc/vimrc:配置全局
1.4 查看历史命令history
!行数:直接执行该行的命令
!$:执行最后的一个命令
echo $HISTSIZE:表示只能保存的命令个数
[root@localhost ~]# echo $HISTSIZE
1000
echo $HISTFILE:显示出保存历史命令的文件名/文件位置
[root@localhost ~]# echo $HISTFILE
/root/.bash_history
help history:查看帮助,显示history操作的其他命令
history -w:把历史命令列表同步到历史命令文件中
vim /etc/profile:可修改可保存的命令个数
HISTSIZE=1000
source /etc/profile:更新profile文件
如何设置历史命令的保存数量
vi或vim /etc/profile 进入修改 HISTSIZE=1000,再更新文件
如何设置历史命令的时间戳和使用用户
vi或vim /etc/profile 进入插入export HISTTIMEFORMAT="%F %T whoami
"退出再更新文件。
- a=name #当前shell进程,子进程。
echo $SHELL:显示shell的环境变量
1.5 别名alias
alias net=“vi /etc/sysconfig/network-scripts/ifcfg-ens33”#定义别名
unalias net #取消别名
\net #跳过别名
进入 vi /etc/bashrc,在最低下添加“ alias net=“vi /etc/sysconfig/network-scripts/ifcfg-ens33”” #让别名永久生效
source /etc/bashrc 更新文件
1.6变量
vi text1. sh:编辑shell语言
sh text1. sh:执行text1.sh文件
环境变量:针对于当前的shell下的所有进程及子进程都生效
1.7标准输入,输出
> filename 标准输出到文件
2> eername 错误输出到文件
> filename 2>eername 将标准输出到filename文件,错误输出到eername
将标准输入到file3文件
标准输出和错误输出都放到一个文件中
>> 表示追加,不会覆盖前一个内容
$?:判断上一条命令是否成功,若成功,返回0;失败,返回非0.
shell语言,判断网络是否连通
1.8 特殊符号,通配符
管道符:“|”把上一个命令的执行结果交给了下一个命令继续处理
grep:过滤结果
grep ^root passwd :以root开头的行
grep -i root passwd:不区分大小写
grep -c root passwd:统计打印的行数
grep -n root passwd:打印行号
grep-v:取反
[root@localhost log]# ip a |grep inet |grep -v inet6
inet 127.0.0.1/8 scope host lo
inet 192.168.220.15/24 brd 192.168.220.255 scope global noprefixroute ens33
[root@localhost log]# ip a |grep inet
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 192.168.220.15/24 brd 192.168.220.255 scope global noprefixroute ens33
inet6 fe80::b7f7:d485:e3be:f754/64 scope link noprefixroute
tee:把过滤的结果打印到文件中
“.”:代表当前目录,两个点代表上级目录
ll ./
“;”:代表多条目录的分割
``:把内容还原成命令
“*”:匹配所有
“?”:匹配单个任意字符
‘ ’(单引号):强引用,可见即可得
“ ”(双引号):弱引用,把变量正常输出( \t:tab \n:换行 )
[root@localhost test1]# echo -e “womendoushi\nhaohaizi”
womendoushi
haohaizi
touch text{2…5}:创建text2,text3,text4,text5文件
[root@localhost ~]# touch text{2…5}
[root@localhost ~]# ll
total 16
-rw-------. 1 root root 1536 Jul 24 09:31 anaconda-ks.cfg
-rw-r–r--. 1 root root 29 Jul 25 08:59 file
-rw-r–r--. 1 root root 29 Jul 25 09:00 file1
-rw-r–r--. 1 root root 210 Jul 24 17:48 test
-rw-r–r--. 1 root root 0 Jul 25 09:31 text1
-rw-r–r--. 1 root root 0 Jul 25 09:33 text2
-rw-r–r--. 1 root root 0 Jul 25 09:33 text3
-rw-r–r--. 1 root root 0 Jul 25 09:33 text4
-rw-r–r--. 1 root root 0 Jul 25 09:33 text5
ll text[0-9]( ll text[[:digit:]]):查找text后数字为1-9的所有文件
[root@localhost ~]# ll text[0-9]
-rw-r–r--. 1 root root 0 Jul 25 09:31 text1
-rw-r–r--. 1 root root 0 Jul 25 09:33 text2
-rw-r–r--. 1 root root 0 Jul 25 09:33 text3
-rw-r–r--. 1 root root 0 Jul 25 09:33 text4
-rw-r–r--. 1 root root 0 Jul 25 09:33 text5
[root@localhost ~]# ll text[[:digit:]]
-rw-r–r--. 1 root root 0 Jul 25 09:31 text1
-rw-r–r--. 1 root root 0 Jul 25 09:33 text2
-rw-r–r--. 1 root root 0 Jul 25 09:33 text3
-rw-r–r--. 1 root root 0 Jul 25 09:33 text4
-rw-r–r--. 1 root root 0 Jul 25 09:33 text5
ll text1.[a-z](ll text1.[[:alpha:]]):查找以a-z为后缀的所有文件
[root@localhost ~]# ll text[a-z]
-rw-r–r--. 1 root root 0 Jul 25 09:52 texta
-rw-r–r--. 1 root root 0 Jul 25 09:52 textb
-rw-r–r--. 1 root root 0 Jul 25 09:52 textc
-rw-r–r--. 1 root root 0 Jul 25 09:52 textd
-rw-r–r--. 1 root root 0 Jul 25 09:52 texte
[root@localhost ~]# ll text[[:alpha:]]
-rw-r–r--. 1 root root 0 Jul 25 09:52 texta
-rw-r–r--. 1 root root 0 Jul 25 09:52 textb
-rw-r–r--. 1 root root 0 Jul 25 09:52 textc
-rw-r–r--. 1 root root 0 Jul 25 09:52 textd
-rw-r–r--. 1 root root 0 Jul 25 09:52 texte
^为非,与本意相反
[root@localhost ~]# ll text[ ^ [: alpha :] ]
-rw-r–r--. 1 root root 0 Jul 25 09:31 text1
-rw-r–r--. 1 root root 0 Jul 25 09:33 text2
-rw-r–r--. 1 root root 0 Jul 25 09:33 text3
-rw-r–r--. 1 root root 0 Jul 25 09:33 text4
-rw-r–r--. 1 root root 0 Jul 25 09:33 text5