Posted by Shujin Wu on June 7, 2016
type -a cmd
/etc/issue, /etc/motd
login, non-login shell, /etc/profile, ~/.bash_profile, source, ~/.bashrc
stty, set
type -a cmd
/bin/ls
or ./ls
/etc/issue
, /etc/motd
/etc/issue
ubuntu@test:~$ cat /etc/issue
Ubuntu 14.04.2 LTS \n \l
\d
本地端时间的日期;\l
显示第几个终端机接口;\m
显示硬件的等级 (i386/i486/i586/i686…);\n
显示主机的网络名称;\o
显示 domain name;\r
操作系统的版本 (相当于 uname -r)\t
显示本地端时间的时间;\s
操作系统的名称;\v
操作系统的版本。/etc/issue.net
: for telnet
/etc/motd
: Custom information showed when users login.[root@www ~]# vi /etc/motd
Hello everyone,
Our server will be maintained at 2009/02/28 0:00 ~ 24:00.
Please don't login server at that time. ^_^
/etc/profile
: 系统整体的配置, 最好不要修改~/.bash_profile 或 ~/.bash_login 或 ~/.profile
:属于使用者个人配置,你要改自己的数据,就写入这里!/etc/profile
(only for login shell; for all users)这个文件配置的变量主要有:
同时/etc/profile
还会去呼叫外部的配置文件:
/etc/inputrc
:
/etc/profile.d/*.sh
/etc/sysconfig/i18n
~/.bash_profile
(for login shell)在 login shell
的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:
~/.bash_profile
~/.bash_login
~/.profile
Only one of the three will be read!
实线的的方向是主线流程,虚线的方向则是被呼叫的配置文件!从上面我们也可以清楚的知道,在 CentOS 的 login shell 环境下,最终被读取的配置文件是『 ~/.bashrc 』这个文件喔!所以,你当然可以将自己的偏好配置写入该文件即可。
source
: 读入环境配置的命令利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中!
[root@www ~]# source 配置文件档名
范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
[root@www ~]# source ~/.bashrc <==底下这两个命令是一样的!
[root@www ~]# . ~/.bashrc
~/.bashrc
(for non-login shell)In CentOS, it will call /etc/bashrc
:
/etc/man.config
: 这的文件的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』
~/.bash_history
: related to HISTFILESIZE
~/.bash_logout
: 这个文件则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思[root@www ~]# stty [-a]
选项与参数:
-a :将目前所有的 stty 参数列出来;
范例一:列出所有的按键与按键内容
[root@www ~]# stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
....(以下省略)....
^
表示 [Ctrl] 那个按键的意思。举例来说, intr = ^C
表示利用 [ctrl] + c 来达成的如果你想要用 [ctrl]+h 来进行字符的删除,那么可以下达:
[root@www ~]# stty erase ^h
[root@www ~]# set [-uvCHhmBx]
选项与参数:
-u :默认不激活。若激活后,当使用未配置变量时,会显示错误信息;
-v :默认不激活。若激活后,在信息被输出前,会先显示信息的原始内容;
-x :默认不激活。若激活后,在命令被运行前,会显示命令内容(前面有 ++ 符号)
-h :默认激活。与历史命令有关;
-H :默认激活。与历史命令有关;
-m :默认激活。与工作管理有关;
-B :默认激活。与刮号 [] 的作用有关;
-C :默认不激活。若使用 > 等,则若文件存在时,该文件不会被覆盖。
范例一:显示目前所有的 set 配置值
[root@www ~]# echo $-
himBH
# 那个 $- 变量内容就是 set 的所有配置啦! bash 默认是 himBH 喔!
范例二:配置 "若使用未定义变量时,则显示错误信息"
[root@www ~]# set -u
[root@www ~]# echo $vbirding
-bash: vbirding: unbound variable
# 默认情况下,未配置/未宣告 的变量都会是『空的』,不过,若配置 -u 参数,
# 那么当使用未配置的变量时,就会有问题啦!很多的 shell 都默认激活 -u 参数。
# 若要取消这个参数,输入 set +u 即可!
范例三:运行前,显示该命令内容。
[root@www ~]# set -x
[root@www ~]# echo $HOME
+ echo /root
/root
++ echo -ne '\033]0;root@www:~'
# 看见否?要输出的命令都会先被打印到屏幕上喔!前面会多出 + 的符号!
/etc/inputrc
[root@www ~]# cat /etc/inputrc
# do not bell on tab-completion
#set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
.....以下省略.....
Ctrl + C
终止目前的命令Ctrl + D
输入结束 (EOF),例如邮件结束的时候;Ctrl + M
就是 Enter 啦!Ctrl + S
暂停屏幕的输出Ctrl + Q
恢复屏幕的输出Ctrl + U
在提示字符下,将整列命令删除Ctrl + Z
『暂停』目前的命令*
代表『 0 个到无穷多个』任意字符?
代表『一定有一个』任意字符[ ]
同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』[ - ]
若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的![^ ]
若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
[root@www ~]# LANG=C <==由于与编码有关,先配置语系一下
范例一:找出 /etc/ 底下以 cron 为开头的档名
[root@www ~]# ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已
范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[root@www ~]# ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了
范例三:找出 /etc/ 底下文件名含有数字的文件名
[root@www ~]# ll -d /etc/*[0-9]* <==记得中括号左右两边均需 *
范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]* <==注意中括号左边没有 *
范例五:将范例四找到的文件复制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp
#
批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行\
跳脱符号:将『特殊字符或通配符』还原成一般字符|
管线 (pipe):分隔两个管线命令的界定(后两节介绍);;
连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)~
用户的家目录$
取用变量前导符:亦即是变量之前需要加的变量取代值&
工作控制 (job control):将命令变成背景下工作!
逻辑运算意义上的『非』 not 的意思!/
目录符号:路径分隔的符号>, >>
数据流重导向:输出导向,分别是『取代』与『累加』<, <<
数据流重导向:输入导向 (这两个留待下节介绍)' '
单引号,不具有变量置换的功能" "
具有变量置换的功能!
两个『 ` 』中间为可以先运行的命令,亦可使用 $( )( )
在中间为子 shell 的起始与结束{ }
在中间为命令区块的组合!