认识shell
博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽
认识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 root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
.......
tansk:x:::tanshouke:/home/tansk:/bin/bash
mysql:x:::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
cd /opt/
mkdir mysql
cd
d my
cd /opt/mysql/
ll
- Linux可以设置隐藏所敲的命令,提升信息安全功能
清空历史命令:history -c
隐藏命令设置步骤:
、
[root@t ~]# vim /etc/profile
在末尾输入:
HISTCONTROL=ignorespace
、
[root@t ~]# source /etc/profile
、
在敲命令前加上一个空格
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
? root systemd
? root kthreadd
? root ksoftirq
? root kworker/
? root migratio
? root rcu_bh
? root rcu_sche
- 查看别名
[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 $? [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
转载需注明出处
认识shell的更多相关文章
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- shell简介
Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...
- Shell碎碎念
1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
随机推荐
- 19.3.8 HTML+css 课程
form 归属于 form 通过id产生联系 <form id = "testform" method = "get" action = "s ...
- Java并发分析—ConcurrentHashMap
LZ在 https://www.cnblogs.com/xyzyj/p/6696545.html 中简单介绍了List和Map中的常用集合,唯独没有CurrentHashMap.原因是CurrentH ...
- postman问题
问题1:postman请求出现 'SSL certificate verification' ,实际为https的问题 解决: 1)关闭fiddler 2)或在File > Settings & ...
- ios ktvhttpcache 音视频缓存插件使用
1.PodFile 文件增加 pod 'KTVHTTPCache', '~> 2.0.0' 2.在终端 需要先cd到podfile文件所在目录 执行pod install 3.在header ...
- centos 7.2 php7+ 安装elasticsearch
安装 Elasticsearch-php 的安装需要满足以下 4 个需求: PHP 7.0.0 或更高版本 Composer ext-curl:PHP 的 Libcurl 扩展(详情查看下方注意事项) ...
- amazon中文文档
在线调试器 https://mws.amazonservices.com.cn/scratchpad/index.html mws 中心 https://developer.amazonservice ...
- Python笔记_第二篇_面向过程_第二部分_6.包
1. 包: 思考:如果不同人的编写模块同名了怎么办? 解决:为了解决模块命名的冲突,引入了按目录来组织模块的方法,这个目录成为“包” 特点:引入了包以后,只要丁顶层的包,不与其他人发生冲突,那么模块都 ...
- 《C程序设计(第四版)》小记
我看的这本书很经典,它是谭浩强写的,也就是广为流传的“C语言红皮书”.在网上看了很多帖子,生活中也问过一些朋友,大多数人是不认可这本书的.很多人都说这本书很烂,看不懂,然后去“追逐”国外的一些教材.其 ...
- goweb-访问数据库
访问数据库 对许多Web应用程序而言,数据库都是其核心所在.数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息.产品目录或者新闻列表等. Go没有内置的驱动支持任何的数据库,但是Go定义了d ...
- CentOS 7 准备 Superset 环境
安装 anaconda 和 superset 下载 anaconda 软件: https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86 ...