认识shell
一、由来
二、现状
- /bin/sh (已经被 /bin/bash 所取代)
- /bin/bash (就是 Linux 默认的 shell)
- /bin/tcsh (整合 C Shell ,提供更多的功能)
- /bin/csh (已经被 /bin/tcsh 所取代)
三、默认shell
- 当我们登录系统会获取默认的shell来进行工作,默认的shell记录在/etc/passwd里
[root@test ~]# vim /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin ....... 20 tansk:x:1000:1000:tanshouke:/home/tansk:/bin/bash 21 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
四、shell功能
shell是用于人与计算机(kenel)进行交互的工具
4.1.命令编辑能力(history)
- history默认可以记录1000个命令。命令记录的位置在.bash_history里面。
不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所执行过的指令, 而至于这一次登陆所执行的指令都被暂存在内存中,当你成功的登出系统后,该指令记忆才会记录到 .bash_history 当中! [root@test ~]# cat .bash_history -n 1 cd /opt/ 2 mkdir mysql 3 cd 4 d my 5 cd /opt/mysql/ 6 ll
- Linux可以设置隐藏所敲的命令,提升信息安全功能
清空历史命令:history -c 隐藏命令设置步骤: 1、 [root@t ~]# vim /etc/profile 在末尾输入: HISTCONTROL=ignorespace 2、 [root@t ~]# source /etc/profile 3、 在敲命令前加上一个空格
4.2.命令别名设置(alias、unalias)
- 自定义命令qstat,此命令将执行/bin/ps -Ao pid,tt,user,fname,rsz
[root@test ~]# echo "alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz'">>/etc/bashrc [root@test ~]# bash [root@test ~]# qstat PID TT USER COMMAND RSZ 1 ? root systemd 3964 2 ? root kthreadd 0 3 ? root ksoftirq 0 5 ? root kworker/ 0 7 ? root migratio 0 8 ? root rcu_bh 0 9 ? root rcu_sche 0
- 查看别名
[root@test ~]# 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 qstat='/bin/ps -Ao pid,tt,user,fname,rsz' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@test ~]#
- 程序化脚本(sell script)
[root@test bin]# vim hello.sh #!/bin/bash export PATH echo -e "Hello World! \a \n" exit 100 #自定义输出100,程序正常执行,默认输出为0 [root@test bin]# bash hello.sh Hello World! [root@test bin]# [root@test bin]# ./hello.sh Hello World! [root@test bin]# echo $? 100 [root@test bin]#
五、检查内置命令
- 5.1.type
[root@test bin]# type qstat qstat is aliased to `/bin/ps -Ao pid,tt,user,fname,rsz' [root@test bin]# type ls ls is aliased to `ls --color=auto' [root@test bin]# type cd cd is a shell builtin #表示内置命令 [root@test bin]#
选项与参数: :不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内置指令 -t :当加入 -t 参数时,type 会将 name 以下面这些字眼显示出他的意义: file :表示为外部指令; alias :表示该指令为命令别名所设置的名称; builtin :表示该指令为 bash 内置的指令功能; -p :如果后面接的 name 为外部指令时,才会显示完整文件名; -a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias [root@test bin]# type -t qstat alias [root@test bin]# type -t cd builtin [root@test bin]#
- 5.2.witch
[root@test bin]# which qstat alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz' /bin/ps [root@test bin]# which cd /usr/bin/cd [root@test bin]# which yum /usr/bin/yum [root@test bin]# which type /usr/bin/which: no type in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [root@test bin]# which passwd /usr/bin/passwd [root@test bin]#
六、shell变量
- 6.1.变量的取用:echo
[root@test ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@test ~]#
- 6.2.特殊变量
参数处理 |
说明 |
$# |
传递到脚本的参数个数 |
$* |
以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ |
脚本运行的当前进程ID号 |
$! |
后台运行的最后一个进程的ID号 |
$@ |
与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- |
显示Shell使用的当前选项,与set命令功能相同。 |
$? |
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
- 6.3.自定义变量:unset
[root@test ~]# echo $test [root@test ~]# test="^_^" #“=”的两边不能有空格 [root@test ~]# echo $test ^_^ [root@test ~]# echo $test ^_^ [root@test ~]# unset test [root@test ~]# echo $test [root@test ~]#
七、环境变量
- 7.1.常用指令
[root@test ~]# env #列出所有的环境变量 [root@test ~]# set #观察所有环境变量与自定变量 [root@test ~]# export #列出所有的环境变量三者区别:
[root@test ~]# test="^_^" [root@test ~]# env|grep test HOSTNAME=test [root@test ~]# export |grep test declare -x HOSTNAME="test" [root@test ~]# set | grep test HOSTNAME=test test='^_^' -h | --help | -t | --testopia) COMPREPLY=($( compgen -W '--help --checkall --testopia --treeinfo' -- "$cur" )); [root@test ~]#
- 7.2.PS1
PS1就是我们的命令提示符
[root@test ~]# echo $PS1 [\u@\h \W]\$ [root@test ~]#
含义:
- \d :可显示出“星期 月 日”的日期格式,如:"Mon Feb 2"
- \H :完整的主机名称。举例来说,鸟哥的练习机为“study.centos.vbird”
- \h :仅取主机名称在第一个小数点之前的名字,如test.student主机则为“test”后面省略
- \t :显示时间,为 24 小时格式的“HH:MM:SS”
- \T :显示时间,为 12 小时格式的“HH:MM:SS”
- \A :显示时间,为 24 小时格式的“HH:MM”
- \@ :显示时间,为 12 小时格式的“am/pm”样式
- \u :目前使用者的帐号名称,如“root”;
- \v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
- \w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
- \W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
- # :下达的第几个指令。
- $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~
八、系统欢迎词
[root@test ~]# cat /etc/issue (#可自行更改,设置个性化欢迎词) \S Kernel \r on an \m [root@test ~]#
如果想要登陆者在登录的时候都知道讯息,需要在/etc/motd里面添加,例如:
[root@test ~]# cat /etc/motd Hello everyone,welcom to learn ! ^_^ [root@test ~]#
综合上述:登录欢迎词是/etc/issue+/etc/motd的合计
九、bash的环境配置文件
- /etc/profile:这是系统整体的设置,你最好不要修改这个文件;
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设置,你要改自己的数
9.1./etc/profile (login shell 才会读)
这个文件设置的变量主要有:
- PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;
- MAIL:依据帐号设置好使用者的 mailbox 到 /var/spool/mail/帐号名;
- USER:根据使用者的帐号设置此一变量内容;
- HOSTNAME:依据主机的 hostname 指令决定此一变量内容;
- HISTSIZE:历史命令记录笔数。CentOS 7.x 设置为 1000 ;
- umask:包括 root 默认为 022 而一般用户为 002 等
/etc/profile 可不止会做这些事而已,他还会去调用外部的设置数据喔!在 CentOS 7.x 默认的
情况下,下面这些数据会依序的被调用进来:
9.1.1./etc/profile.d/*.sh
目录下面的文件规范了 bash 操作接口的颜色、 语系、ll 与 ls 指令的命令别名、vi 的命令别
名、which 的命令别名等等。如果你需要帮所有使用者设置一些共享的命令别名时, 可以在
这个目录下面自行创建扩展名为 .sh 的文件,并将所需要的数据写入即可喔!
9.1.2./etc/locale.conf
这个文件是由 /etc/profile.d/lang.sh 调用进来的!这也是我们决定 bash 默认使用何种语系的
重要配置文件! 文件里最重要的就是 LANG/LC_ALL 这些个变量的设置啦!
9.1.3./usr/share/bash-completion/completions/*
除了命令补齐、文件名补齐之外,还可以进行指令的选项/
参数补齐功能!那就是从这个目录里面找到相对应的指令来处理的! 其实这个目录下面的内
容是由 /etc/profile.d/bash_completion.sh 这个文件载入的啦!
9.1.4.~/.bash_profile (login shell 才会读)
bash 在读完了整体环境设置的 /etc/profile 并借此调用其他配置文件后,接下来则是会读取使
用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要
有三个,依序分别是:
1. ~/.bash_profile
2. ~/.bash_login
3. ~/.profile
其实 bash 的 login shell 设置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上
面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会
被读取。 如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取
~/.profile 的意思。
总结:反正只要记得,bash 的 login shell 情况下所读取的整体环境配置文件其实只有
/etc/profile,但是 /etc/profile 还会调用出其他的配置文件,所以让 bash 操作接口变的
非常的友善!最后读取 使用者的个人配置文件:~/.bash_profile
来源:https://www.cnblogs.com/tanshouke/p/12192651.html