Shell 是命令行解释器,其实一个用C 语言写的程序,是介于用户与Linux内核之间的“翻译官”,即用户和Linux 内核之间的接口程序,当从Shell或其他程序向Linux 发送命令时,内核会做出相应的响应。
Shell 作为命令语言解释器,它拥有自己内建的Shell命令集,以交互式地解释和执行用户发送的命令,将请求的命令加以“翻译”并传给Linux内核。
Shell 作为程序设计语言,拥有自己的语法规则。可以通过shell调用系统内核的大部分功能执行程序、创建文档,并以并行的方式协调各个程序的运行。
shell | Command |
---|---|
Bourne Shell | /bin/sh |
C Shell | /bin/csh |
Korn Shell | /bin/ksh |
Bourne again Shell | /bin/bash |
Tenex C Shell | /bin/tcsh |
查看当前系统支持的Shell:
[root@localhost ~]# cat /etc/shells #当前系统支持的Shell
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@localhost ~]# echo $SHELL # 当前的Shell
/bin/bash
其主要负责解释命令行提示符下输入的命令。Shell 在分析命令时,将它分解成以空白符分开的符号,空白符:空格、换行符、。
Shell 的处理命令的顺序为:
[root@localhost ~]# type history
history is a shell builtin #内部命令
[root@localhost ~]# type man
man is /usr/bin/man #别名
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto'
[root@localhost ~]# type bash #关键字
bash is /usr/bin/bash
命令、选项、参数之间必须由一个或多个空格隔开,如 ls -al;cat test.file
命令的参数指定命令运行的对象,
命令的选项指定命令对象进行特殊的操作
选项,以“-”开始,有长短格式如 -a == --all ,且短格式之间可以合并,长短格式之间不可以合并。
Linux 系统的查看帮助的方式:
bash 的实用功能 Tab 键:命令和文件名的自动补全功能
bash 通过历史命令文件保留一定数目的已经在Shell里使用过的命令,数目取决于环境变量 HISTSIZE(默认保存1000条)。
在bash Shell 中执行的命令并不会立即直接将命令写入历史命令文件,而是先存放到内存的缓冲区中,该缓冲区称为历史命令列表,当bash 退出时将历史命令列表写入历史命令文件。或是执行 history -w 命令,要求bash 立即将历史命令列表写入历史命令文件。
history [-a|n|r|w] [filename]
选项 | 功能 |
---|---|
-a | 把当前的历史命令列表(记录)追加到历史命令文件 |
-c | 清空当前的历史命令列表(记录) |
-n | 把历史命令文件的内容加入到当前历史命令列表 |
-r | 把历史命令文件的内容更新(替换)当前历史命令列表 |
-w | 把当前的历史命令列表(记录)的内容写入历史命令文件,并覆盖历史命令文件的原来内容(慎重操作) |
filename | 把当前的历史命令列表(记录)写入到filename的文件 |
别名,就是给复杂的指令创建一个简单的名字,当用户使用这个别名时,系统会自动的找到并执行这个别名对应的真实指令。
可以通过 alias 别名= 命令
alias 查看当前的别名列表:
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# alias showhome='ls -l /home' #定义一个临时别名
[root@localhost ~]# showhome #执行别名
total 0
drwx------. 3 test test 78 Apr 11 2018 test
[root@localhost ~]# unalias showhome #取消别名
[root@localhost ~]# showhome #再次执行报错
bash: showhome: command not found...
通过编辑 ~/.bashrc 文件定义永久生效的别名
[root@localhost ~]# vim ~/.bashrc #编辑文件
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias showtmp='ls -l /tmp' #查看 /tmp 目录
[root@localhost ~]# showtmp #尝试执行别名命令
bash: showtmp: command not found...
[root@localhost ~]# logout #注销
[root@localhost ~]# showtmp #再次执行别名命令
total 1016
-rw-------. 1 root root 342778 Oct 31 21:23 cciCaQ59.out
-rw-------. 1 root root 342778 Oct 31 21:39 ccjyUrNg.out
-rw-------. 1 root root 342778 Oct 31 21:24 ccKOE45J.out
注: 定义别名时,等号两边不能有空格。等号右边的命令一般会包含空格或特殊字符,必须使用引号。