shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口,它接受用户输入的命令并送入到内核去执行。
实际是一个命令解释符。
系统终端切换
虚拟终端由mingetty程序生成
物理机执行本地终端
tty
/dev/tty1
网络使用模拟终端
tty
/dev/pts/1
who #查看当前登陆的用户
w
pkill -9 -t tty2 #断开一个模拟终端
bash
echo $SHELL #查看当前使用的shell
cat /etc/shells #查看有哪些shell
ls -l /bin/sh
echo $PS1
PS1=
没有提示符
PS1
date
date --help
date +%F_%R #按照时间的固定格式
whoami
命令补全
命令快捷键
ctrl + A # 跳至行首
ctrl + E # 跳至行尾
ctrl + C # 终止前台程序
ctrl + D # 退出当前shell
ctrl + Z # 任务暂停,挂至后台
ctrl + L #清屏
ctrl + K #删除光标到行尾
ctrl + U #删除光标到行首
ctrl + R #搜索历史命令
history
-w #保存历史命令到文件
ls -a
cat .bash_history
echo $HISTSIZE #保存历史命令行数
-c #清空历史命令
-d # 删除第N行命令
!! # 执行上一条命令
!cat #最近的一次cat 命令
!num #第num行命令
!$ # 调用上一条命令的参数 #或者按esc,松开,按.
vi /etc/sysconfig/network-scripts/ifcfg-ens33
cat !$
命令别名
alias cmd='cmd' #设置别名
unalias cmd # 取消
# 对所有用户生效
echo "alias ifconfig='ifconfig eth0'" >> ~/.bashrc
~/.bash_profile # 当前用户,局部配置文件
~/.bashrc # 当前用户,局部配置文件
/etc/profile # 所有用户,全局配置文件
/etc/bashrc # 所有用户,全局配置文件
命令流程
1.判断命令是否通过绝对路径执行
2.判断命令是否存在别名
3.判断用户输入的是内部命令还是外部命令
内部命令:shell程序自带命令
外部命令:在系统PATH变量的某个路径下可执行程序
4.内部命令直接执行,外部命令检测是否存在缓存
bash #查看缓存
bash - d ifconfig #删除之前的缓存,
5.检测PATH路径,有则执行,无则报错
type -a cd #查看命令是否是内部命令
路径展开
在/tmp下创建目录
mkdir -pv /tmp/{etc/{init.d,sysconfig}}
tree /tmp
转义字符
反斜杠(\) #使湖面的变量变为字符串
单引号('') #转义其中所有的变量为字符串
双引号("") #保留其中的变量属性,不进行转义处理
反引号(``) #把其中的命令执行后返回结果
echo "shopping is $500"
echo "shopping is \$500"
echo 'shopping is $500'
echo "The Directory is $(pwd)"
echo "The Directory is `pwd`"
IP=`ifconfig | awk 'NR==2{print $2}'`
重定向输出
0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)
* 2>&1 就是将 stderr 并进 stdout 作输出
* 1>&2 或 >&2 就是将 stdout 并进 stderr 作输出
command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 &
1)command:表示shell命令或者为一个可执行程序
2)>:表示重定向到哪里
3)/dev/null:表示Linux的空设备文件
4)2:表示标准错误输出
5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于1
6)&:表示后台执行,即这条指令执行在后台运行
总而言之,这条命令的意思是:在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空。