什么是shell
Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
shell也被称为LINUX的命令解释器(command interpreter)
shell是一种高级程序设计语言
bash shell
GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是 Linux标准的shell,与sh兼容
CentOS默认使用
显示当前使用的shell
echo ${SHELL}
显示当前系统使用的所有shell
cat /etc/shells
执行命令
输入命令后回车
提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
在shell中可执行的命令有两类
内部命令:由shell自带的,而且通过某命令形式提供
help 内部命令列表
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令
外部命令:在文件系统路径下有对应的可执行程序文件
查看路径:which -a |–skip-alias ; whereis
区别指定的命令是内部或外部命令
type COMMAND
Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但也有些细微差别。
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin…等等。可通过“echo
$PATH”命令查看外部命令的存储路径,比如:ls、vi等。
用type命令可以分辨内部命令与外部命令
[root@localhost account]# type cd
cd is a shell builtin
pwd命令用于显示当前工作目录,是Linux系统下最常用的命令之一。在不太能确定当前位置时,可以使用pwd命令来判断目录在文件系统内的确切位置。而涉及pwd指令,就不得不提及三个环境变量:PATH、OLDPWD、PWD。
PATH:执行文件路径的变量;"echo PATH"(PATH前面加PATH"(PATH前面加PATH"(PATH前面加表示后面接的是变量)
OLDPWD:表示前一次的工作目录;
PWD:表示当前的工作目录。
问题缘由:当输入“man pwd”时可以查看pwd的帮助文档,而输入“pwd --help”就提示有错误bash: pwd: --: invalid option;若输入“ /bin/pwd --help”就能正常显示pwd的帮助文档。
从网上查找原因并经过整合可知,这主要是由于内部命令和外部命令的区别,pwd是内部命令,而/bin/pwd就是外部命令。在显示当前目录时,/bin/pwd能显示当前工作目录的完整文件路径,能更准确些。在多人共享同一台Linux机器时,经常会发现当前目录被别人删除后,pwd命令仍然会显示那个目录。
后续试验:切换至root权限下,将/bin目录下的执行文件ls移动到非正规目录中去,mv /bin/ls /root(#mv为移动,可将文件在不同的目录间进行移动操作),然后不管在哪个目录底下输入任何与ls相关的指令,都不能顺利执行ls了(因为/root这个目录并不在PATH指定的目录中,外部命令ls是没法通过PATH路径找到执行文件ls),除非用/root/ls
才行。
如果想要让root在任何目录下均可执行/root底下的ls,那么可以将/root加入到PATH当中,该命令PATH="$PATH":/root即可。若有两个ls指令在不同的目录中,例如/usr/local/bin/ls
和/bin/ls ,那么当我下达 ls命令时,是根据PATH里面哪个目录先被查询到,则那个目录下的指令就先被执行。
而即使采用相同的方法移动/bin目录下的执行文件pwd,仍可以输入pwd命令执行,因为这时仍是调用内部命令pwd指令。
故shell命令解释器在执行命令时,是应先执行内部指令,若要执行的指令不是内部指令,则应是调用的外部指令。
执行外部命令
Hash缓存表(哈希表)
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找。
利用hash缓存表可大大提高命令的调用速率
hash常见用法
hash 显示hash缓存
hash –r 清除缓存
命令别名
Linux alias命令用于设置指令的别名。
用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在.profile或.cshrc中设定指令的别名。
语法
alias[别名]=[指令名称]
参数说明:若不加任何参数,则列出目前所有的别名设置。
实例
给命令设置别名
alias lx=ls
lx
anaconda-ks.cfg Desktop install.log install.log.syslog qte
linux命令格式
~]#COMMAND [选项] [参数]
例如:
~]#ls 不带任何选项和参数
~]#ls -lh /etc 列出/etc下所有文件和目录,同时要求以格式和以友好可读的方式显示
1.ifconfig命令
列如:
~]#ifconfig 显示所有网卡信息(简略)
~]#ifconfig -a 显示所有网卡信息
~]#ifconfig eth0 显示指定网卡
2.echo命令
格式:echo string
列如:
~]#echo '$SHELL'
~]#echo "$SHELL"
重要知识点:
‘str’ 强引用,变量引用不执行替换
"str"弱引用,变量引用会被替换
变量引用的正规格式:
${变量名}
重要选项
-n 显示后不进行换行操作
-e 让转义符生效
转义符:
\n 换行符
\t 横向制表符
\b 退格操作
\033 需变色文本\033[0m 需变色文本将在屏幕显示红色
3.tty命令 显示终端
列如:
[root@localhost ~]#tty
4.startx 启动图像界面
列如:
[root@localhost~]#startx & &表示从后台启动
5.export 设置当前shell的变量
列如:
[root@localhost ~]#export $ORACLE_SID=oracl
6.pwd 显示当前工作目录 printing working directory
列如:
~]#pwd
7.history 历史命令
列如:
~]#history 查看历史命令
~]#history -c 清除历史命令
7.shutdown 关机重启命令
格式:
shutdown [OPTION] [TIME] [WALL…]
选项:
-r 重启 等同reboot
-h 关机
-P 关机
-c 取消前面的shutdown操作
TIME:
now:马上关机
hh:mm 几点几分
+m 几分钟以后
+0:相当于now
WALL:向其他用户发出通知
列如:
[root@localhost~]#shutdown -r +2 “warning...."
2分钟以后关机,并向其他用户发出”warning“的警告
8.reboot 关机命令
9.hwclock 硬件时钟
注意:clock命令是hwclock的软链接
选项:
-s 以硬件时钟为准,修改系统时钟
-w 以系统时钟为准,修改硬件时钟
知识点:
linux有2套时钟,系统启动时从硬件读取日期和时间信息,读取完毕后,就自行向后进时,不再与硬件关联同步。
列如:
~]#clock -w
10.date 查看并设置日期时间
显示查看日期时间:
date [OPTION]… [+FORMAT] 显示日期时间
]#date 显示时间
格式显示时间
%F:
~]#date +%F 显示2015-12-08
~]#date +%H 显示18
~]#date +%T 显示分钟和秒18:51:21
不可以
~]#date +%F +%T
但可以
~]#date +%F -%T
~]#date -%c 显示2015年12月08日 星期二 18时51分21秒
~]#date +%Y 显示年2015
~]#date +%m 显示月12
~]#date +%d 显示日08
~]#date +%M 显示分51
~]#date +%S 显示日21秒
显示按自己的格式
~]#date +%Y-%m-%d-%H-%M-%S
注意%s 表示时间戳,表示从1971年1月1日0点0分0秒到此刻的秒数。1971年1月1日是unix的元年。
设置日期时间:
~]#date [MMDDhhmm[[CC]YY[.ss]] 设置日期时间
~]#date 101408082013.08 改成2013年10月10日8点8分8秒
tab键
命令补全
内部命令:
外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻
以给定命令名命名的文件,第一次找到的命令即为要执行的命令
用户给定的字符串只有一条惟一对应的命令,直接补全
否则,再次Tab会给出列表
路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符
串开头的文件名
如果惟一:则直接补全
否则:再次Tab给出列表
whatis
显示命令的简短描述
使用数据库
刚安装后不可立即使用
makewhatis | mandb制作数据库
使用示例:
whatis cal 或 man –f cal
help选项
显示用法总结和参数列表
使用的大多数,但并非所有的
示例:
date --help
Usage: date [OPTION]… [+FORMAT] or: date [-u|–utc|–
universal] [MMDDhhmm[[CC]YY][.ss]]
[] 表示可选项
CAPS或 <> 表示变化的数据
… 表示一个列表
x |y| z 的意思是“ x 或 y 或 z “
-abc的 意思是-a -b –c
{ } 表示分组
man命令
提供命令帮助的文件
手册页存放在/usr/share/man
几乎每个命令都有man的“页面”
man页面分组为不同的“章节”
统称为Linux手册
man命令的配置文件:/etc/man.config | man_db.conf
MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置
到指定位置下搜索 COMMAND 命令的手册页并显示
man - M /PATH/TO/SOMEWHERE COMMAND
中文man需安装包man-pages-zh-CN