1、系统基础管理和维护
1.1、tab补全
- 命令补全:
shell程序在接受到用户执行命令的请求,分析完成后,最左则的字符串会被当做命令;查找内部命令;根据PATH环境变量中设定的目录,自左向右逐个搜索目录下的文件名。
给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;不能唯一标识某命令程序文件,再按tab键一次,会给出列表。 - 路径补全(和命令机制不一样)
在给定的起始路径下,以对应路径下的打头字符串逐一匹配起始路径下的每个文件。
tab 补全
tab一次输入的内容能够唯一标识,直接跳出命令;输入内容不能唯一标识,再tab,显示出所有匹配的命令
tab命令补全的原理:vi,系统根据环境变量$PATH去文件下寻找命令
1.2、shell命令操作:
ctrl+a 光标移至最前边
ctrl+e 光标移至最后边
ctrl+k 删除光标后边内容
ctrl+u 删除光标前边内容
ctrl+l 清屏
ctrl+r 搜索历史命令
ctrl+c 停止当前正在运行的程序
1.3、vim操作:
1.3.1、vim,命令模式下
- 光标移动
h:左
l:右
j:下
k:上
(数字+h/l/j/k 移动多少格)
w跳到下一个单词的开头
e跳到下一个单词的末尾
b跳到上一个单词的开头
数字+w/e/b/ 跳多少格
ctrl+f、shift+PgDo:向下翻页
ctrl+b、shift+PgUp:向上翻页 - 在一行中
跳到行首:ctrl+home(跳到最前边)、0(跳到最前边) 、>(略过行首空格)
跳到行尾:end、shift+$ - 在行间
gg:跳到行首
shift+g:跳到行尾
:set nu:显示行号
行号+gg:跳到指定行 - 删除
- x、delete:删除光标所在行的字符
- dd:删除整行
- 数字+dd:删除当前行开始后的几个
- 行间之间的删除:
光标之后;D、d+$
光标之前:d+^ - 复制、粘贴
- yy复制光标所在行
- 数字+yy复制光标及光标以下的几行
- p粘贴在光标下边
- shift+p粘贴在光标上边
- 查找
- /要查找的内容 从上到下,光标所在位置
- ?要查找的内容 从下到上,光标所在位置
- 替换
- r:替换光标所在字符
- R:整体替换字符
- 撤销
- u:撤销一次操作
- 数字+u:撤销多次操作
- ctrl+r:恢复上一次撤销操作
- . 重复上一次操作
- 可视化
- v:按照字符选择
- V:按照矩形选择,选一行
- ctrl+v:按照字符选择,可以上下左右选择区域大小
1.3.2、命令模式——>编辑模式
- i、I
i:光标前插入
I:行首插入 - a、A
a:光标后插入
A:行尾插入 - o、O
o:在下一行插入
O:在上一行插入
1.3.3、末行模式
- :w+路径+文件名 另存为到路径下文件
- :e 文件路径/文件名 打开一个新的文件
- e ~/passwd1 ==>e /root/passwd ==>e ./passwd
- r /文件路径/文件名 读入一个文件内容
r /etc/passwd - s /old/new/ 替换光标所在行的第一个匹配的字段
s /old/new/g 替换光标所在行的所有字段 - 行号1,行号2 s/old/new/ 替换指定行间所在行的第一个匹配的字段
行号1,行号2 s/old/new/g 替换指定行间所在行的所有字段 - % s /old/new/ 替换全文所在行的第一个匹配的字段
% s /old/new/g 替换全文所在行的所有字段
% s /old/new/gc 提示用户是否替换全文所在行的
% s /old/new/gci
1.3.4、打开文件
- vim
- vim +行号
- vim+/关键字+文件名
(从上次光标所在位置以后开始匹配编辑)
1.3.5关闭文件
- ZZ,命令模式关闭
1.4、history
- !10 !+历史命令的列表行数
- !$ 执行最后一次的历史命令
- help history 查看帮助
- history -w 把历史命令列表同步到历史命令文件中
- echo $HISTFILE查看历史命令文件位置
- 如何设置历史命令的保存数量
echo $HISTFILE
vim /ect/profile
HISTSIZE=1000
:wq
source /etc/profile 重新加载这个文件 - 如何设置历史命令的时间戳,和使用用户
(时间戳:一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一标识某一刻的时间。)
1.4、alias命令
- [root@localhost ~]# alias net=“vim /etc/sysconfig/network-scripts/ifcfg-eth0” #定义别名
- [root@localhost ~]# unalias net #取消别名
(临时别名查看不了) - [root@localhost ~]# \net #跳过别名
- 让别名永久生效
[root@localhost ~]# vim /etc/bashrc
alias net=“vim /etc/sysconfig/network-scripts/ifcfg-eth0”
:wq
[root@localhost ~]# source /etc/bashrc
1.5、变量
- vi test 写一个文件
- sh test 执行文件
#!/bin/bash
who=whoami #全局变量,作用于当前文件
test(){
IP=‘192.1668.254.125’ #局部变量,作用于一行代码,或者代码块
#ping $IP
echo $who
}
#test
ping $IP
环境变量:针对于当前的shell下的所有进程及子进程都生效
1.6、标准输入输出
-
>filename 标准输出到文件
[root@localhost ~]# ls >file1 -
把filename覆盖输出到test >filename>test
-
把filename追加输出到test >filename>>test
-
2> eername 错误输出到文件
[root@localhost ~]# mysql 2>err -
1>filename 2>eernamed
将标准输出到filename文件,错误输出到errname文件 -
标准输入到文件file3
[root@localhost ~]# ll > test1
[root@localhost ~]# ll >>test1
[root@localhost ~]# fdisk 2>test2
[root@localhost ~]# fdisk 2>>test2
[root@localhost ~]# ll anaconda-ks.cfg anaconda-ks1.cfg >test3 2>test4
[root@localhost ~]# ll anaconda-ks.cfg anaconda-ks1.cfg &>test5
可以将错误信息或者普通信息都重定向输出
[root@localhost ~]# ll anaconda-ks.cfg anaconda-ks1.cfg >>test5 2>&1
将标准错误也输出到标准输出当中
扩展 -
$?判断上一条命令执行是否成功,若成功,返回;失败,返回非0;
-
#! /bin/bash
IP=‘192.168.108.3’
ping -c1 $IP &>/dev/null
if [ $? -eq 0 ]
then
echo ‘tong…’
fi -
pwd 显示当前路径
-
pwd -P显示链接文件的真实路径
1.7、特殊符号,通配符
- [] 匹配括号里边的内容
[^] 匹配括号里边没有的内容 - 匹配所有字母
[A-Z]和[[:alpha:]] - 匹配小写字母
[a-z]
匹配一个数字
[0-9]
[[:digit:]]- 同时创建多个文件 touch test{m…n} 创建testm-testn
- 同时查询多个文件 ll test[m-n] 查询testm-testn
- 同时显示多个 echo {0…20} 显示出0-20
- “|”:把上个命令的执行结果交给了下一个命令继续处理
[root@localhost ~]# ll |grep err
[root@localhost ~]# ip a |grep inet - “tee”把过滤的结果打印到文件中
- “…” 代表上级目录
[root@localhost test]# ll …/ - “.” 代表当前目录
[root@localhost test]# ll ./ - List item";" 代表多条命令的分割
[root@localhost test]# a=abc;echo $a - " `` " 把内容还原成命令
[root@localhost test]# a=‘ls’;echo $a - “?” 匹配单个任意字符
[root@localhost ~]# ll te?
-rw-r–r--. 1 root root 0 7月 23 16:37 tec
-rw-r–r--. 1 root root 0 7月 23 16:34 tes - “" 表示匹配所有
[root@localhost ~]# "” 表示匹配所有