shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 shell 来启动、挂起、停止甚至是编写一些程序
它还是一个功能强大的编程语言,易编写,易调试,灵活性强。shell 是解释执行的脚步语言,在 shell中可以直接调用 Linux 系统命令
//查看当前Shell 类型
[root@localhost ~]# echo $SHELL
/bin/bash
//查看 Bash 兼容 Shell
[root@localhost ~]vim /etc/shells // 在shells目录下可以看到与 bash 兼容的 Shell,也就是说可以使用兼容 Shell
[root@localhost ~]sh //调用 sh
sh-4.1# exit //退出 sh
输出命令:echo
echo [选项] [输出内容]
选项:
-e:支持反斜杠控制的字符转换
[root@localhost ~]# echo "hello world" //有空格时需要加 双引号
hello world
[root@localhost ~]# echo hello
hello
控制字符:
[root@localhost ~]# echo -e "hello \t world"
hello world
[root@localhost ~]# echo -e "hello \r world"
world
[root@localhost ~]# echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t" //按照十六进制ASCII码也同样可以输出(x 表示十六进制,68表示h ...)
h e l
l o
输出颜色:
// 30m=黑色,31m=红色,32=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色
\e:表示调用颜色,[1:表示开启颜色选项,\e[0m:表示关闭颜色
[root@localhost ~]# echo -e "\e[1;31m 我爱你 \e[0m " //输出颜色(红色)
我爱你
PS:Linux 中 ! 有特殊含义,一般不加;Linux 纯字符界面不支持 中文,xshell 和 图形界面支持中文
Shell 可以直接调用运行脚本,Linux 中 # 代表注释,但是脚本语言中 #!/bin/bash 不是注释,也不能省略,它是标准的脚本语言格式
[root@localhost ~]# vim hello.sh //创建一个名为 hello.sh 的脚本
#!/bin/bash
#The first program //注释
echo -e "\e[1;34m 天上掉下一个林妹妹 \e[0m"
脚本执行:
chmod 755 hello.sh
./hello.sh //相对路径,./ 表示当前路径
/root/hello.sh //或者绝对路径执行
bash hello.sh
01、查看和设定别名:
alias //查看系统中所有的命令别名
alias 别名= '原命令' //设定命令别名,重启失效
alias ls='ls --color=auto'
alias vi='vim' //将 vim 设定为 vi
02、别名永久生效与删除别名:
vim ~/.bashrc //写入环境变量配置文件,~ 表示家目录
alias vi='vim'
source .bashrc //使bashrc生效
unalias 别名 //删除别名,永久删除也需要删除配置文件里的命令
03、命令生效顺序:
04、常用快捷键:
history [选项] [历史命令保存文件]
cat .bash_history
history -w
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令的调用:
在 Bash 中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按 “Tab” 键就会自动进行补全;依赖 PATH
还可以补全目录,按两下 Tab 键
01、标准输入输出:
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
02、输出重定向:
标准输出是输出到显示屏,输出重定向是将输出结果输出到指定文件/目录或设备中,这样的好处是在没人值守时也能看到输出结果
[root@localhost ~]# ifconfig > test.log //将网卡信息输出到 test.log文件中,文件不存在则会自动创建
PS:
[root@localhost ~]# cat xdy >> access.log 2>>error.log
[root@localhost ~]# cat error.log
cat: xdy: 没有那个文件或目录
03、Linux中的黑洞:
ls &>/dev/null // /dev/null 相当于win中的回收站,输出进去即不会显示在显示屏,也不会显示在文件中(相当于消失了),适用于程序运行时,不要看程序进程(把进程丢弃),只看结果
一般用于打补丁,其他情况很少用到
[root@localhost ~]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
//输入 wc 后,回车再输入 字符,输入完成后再 ctrl + d
[root@localhost ~]# wc
ssss ss ss
ss
2 4 15
01、多命令顺序执行:
系统自动判别脚本 / 命令是否错误的方法:
通过多命令顺序执行,简化成最后只要判断是否是 yes 或 no 就能判断
[root@localhost ~]# ls && echo yes || echo no //命令正确运行,则打印 yes,不正确打印 no
abc anaconda-ks.cfg hello.sh install.log.syslog
abc.tar.gz error.log install.log
yes
02、管道符:
管道符(|),命令 1 的正确输出作为命令2 的操作对象
[root@localhost ~]# 命令1 | 命令2 //命令 1 的正确输出作为命令2 的操作对象
ls -l /etc | more //表示,more(分屏)查看ls 的结果,more命令用来查看文件
查看服务器中所有的连接,并统计
[root@localhost ~]# netstat -an //查看系统中所有的网络连接
[root@localhost ~]# netstat -an | grep ESTABLISHED //显示所有的正在连接的会话
tcp 0 52 192.168.0.139:22 192.168.0.132:50625 ESTABLISHED
[root@localhost ~]# netstat -an | grep ESTABLISHED | wc -l //统计所有连接数
1
01、通配符:
Linux 中用来通配符来匹配目录或文件名,用正则表达式来匹配文件内容
[root@localhost film]# ls
dy1 dy2 dy34 dyab dyc
[root@localhost film]# ls dy*
dy1 dy2 dy34 dyab dyc
[root@localhost film]# ls dy?
dy1 dy2 dyc
[root@localhost film]# ls dy[0-9]
dy1 dy2
[root@localhost film]# ls dy[0-9][0-9]
dy34
[root@localhost film]# ls dy[^0-9]
dyc
[root@localhost film]# ls dy[^0-9]*
dyab dyc
02、Bash 中其他特殊符号:
变量:
//变量的定义
[root@localhost ~]# aa=123
[root@localhost ~]# echo $aa
123
单引号双引号:
//单引号双引号
[root@localhost ~]# aa=123
[root@localhost ~]# echo '$aa' //特殊字符无特殊含义
$aa
[root@localhost ~]# echo "$aa"
123
反引号:
//反引号
[root@localhost ~]# bb=`ls`
[root@localhost ~]# echo "$bb"
abc
abc.tar.gz
anaconda-ks.cfg
error.log
film
hello.sh
install.log
install.log.syslog
$()、转义字符:
//$()、转义字符
[root@localhost ~]# cc=$(ls) //与反引号结果一致
[root@localhost ~]# echo $cc
abc abc.tar.gz anaconda-ks.cfg error.log film hello.sh install.log install.log.syslog
[root@localhost ~]# echo \$cc
$cc