您的位置:首页 > 运维架构 > Shell

shell 的基础知识

2016-01-26 15:35 661 查看
shell时系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西——系统内核。用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作

1.shell
①命令历史
!!:表示执行上一条指令
!n : 表示执行命令历史中的第n条指令
!字符串:!pw 标志执行命令历史中最近一次以 pw 开头的命令
②命令和文件名补全,table键;两次table键--系统会把所有的命令或者文件名列出来
③别名 alias:显示系统别名;
自定义 别名:alias【命令别名】=【‘具体的命令’】
unalias解除别名 :unalias 别名
④通配符
*:匹配零个或多个字符
?:匹配一个字符
输入/输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出
<输入重定向
>输出重定向
2>错误重定向
>>追加重定向
⑥管道符 |
将前一个人指令的输出作为后一个指令的输入
⑦作业控制
当运行一个进程,可以使它暂停 ctrl + z ,然后用 fg 命令恢复,或是利用bg 命令使它到后台运行,也可以使它终止 ctrl +c 键
jobs:显示当前被暂停或者在后台运行的任务(末尾有&符号的是在后台运行的任务)
bg 【任务数字】:暂停的任务放在后台重新运行
fg【任务数字】:使暂停的任务前台运行
如何结束被暂停的任务?
①如果没有退出当前shell,可以用命令 fg 编号 把任务调到前台,然后按 ctrl + c 结束任务;
②如果退出当前shell,再次打开另一个shell时,使用jobs命令并不会显示在后台运行或者被暂停的任务,要想关闭这些任务,则需要先知道它们的pid。
vmstat 1 >/tmp/1.log &使用&把任务放到后台运行时会显示 pid信息;如果忘记这个pid,可以使用 ps aux |grep 名称 找到那个进程的,然后使用
kill pid 结束进程

2.变量
环境变量 PATH ,是shell预设的一个变量,它代替了所有常用命令的绝对路径的设定;有了这个变量,运行某个命令时就不再需要输入全局路径,直接输入命令即可
env:列出系统预设的全部系统变量(环境变量)
HOSTNAME:主机的名称
SHELL:当前用户的shell 类型
HISTSIZE:历史 记录数
MAIL:当前用户的邮件存放目录
PATH:决定了shell将到哪些目录中寻找命令和城西
PWD:表示当前目录
LANG:与语言相关的环境变量,多语言环境可以修改此环境变量
HOME:表示当前用户的主目录
LOGNAME:当前用户的登录名
---------------------------------------------------------------------------------------------------------------
set:不仅显示系统预设的变量,也可以显示用户自定义的变量
自定义一个变量:变量名=变量值,但是只能在当前shell中生效
自定义变量规则:
格式为 a=b,等号两边不能有空格
②变量名只能由字母、数字以及下划线组成,而且不能以数字开头
③当变量内容带有特殊字符(如空格)时,需要加上单引号;如果变量内容本身带有单引号,这时外部就需要加双引号了;如果变量内容需要用到其他命令的运行结果则需要使用反引号 myname=·pwd·;变量内容可以累加其他变量的内容,但需要加双引号 myname=“$PATH”add
单引号不会使特殊字符发生其特殊作用,双引号才会使其发生特殊作用

bash :进入 一个子shell环境中,exit退出
如何让设置的环境变量一直生效?
①允许胸膛呢国内所有用户登录后都能使用该变量:在/etc/profile 文件的最后一行加入 “export 变量名=变量值”(可以使用 >>追加命令),然后运行 source/etc/profile(source !$)就可以生效了
仅允许当前用户使用该变量:在用户主目录下的.bashrc 文件的租后一行加入“export 变量名=变量值”,然后运行 source .bashrc 就可以生效了。
source命令的作用是将目前设定的配置刷新,即使不用注销再登录也能生效
pstree:把Linux系统中的所有进程以树形结构显示出来
在父shell中设定一个变量后,进入子shell时该变量是不会生效的,如果想让这个变量在子shell中生效则要用到export【变量名】指令,如果不加上变量名,则会声明所有的变量
unset 变量名:取消某个变量

3.系统环境变量与个人环境变量的配置文件
/etc/profile:这个文件预设了几个重要的变量,例如 PATH、USER\LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask
/etc/bashrc:主要预设umask以及 PS1,PS1就是在输入命令时,前面的那串字符。【\u@\h \W】\$:\u 指用户 \h 主机名 \W当前目录 \$指字符 #(如果是普通用户则显示 $)
每个用户的主目录下的隐藏文件:
.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户可使该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次
.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件被读取。可以将用户自定义的alias或者自定义变量写到这个文件中
.bash_history:用于记录命令历史
.bash_logout:当退出shell时,会执行该文件。可以将一些清理的工作放到这个文件中

4.Linux shell 中的特殊符号
① * :代表零个或多个字符
②?:只代表一个任意的字符
③#:注释符号
④脱义字符 \:还原为普通字符
⑤| :管道符,将前面命令的输出作为后面命令的输入

-----------------------------------------------------
cut:cut -d ‘分隔字符’【-cf】n,n为数字
-d:后面跟分隔字符,分隔字符要用单引号括起来:可以与 -f 搭配使用
-c:后面接的是第几个字符--输出的就是那个字符
-f:后面接的是第几个区块--划分过后是第几个

--------------------------------------------------------
sort:用做排序 sort[-t 分隔符][-kn1,n2][-nru]
-t :后跟分隔字符
-n:表示使用纯数字排序
-r:表示反向排序
-u:表示去重复
-kn1,n2:表示由n1区间排序到n2区间,可以只写 -kn1,即对n1字段排序(通过分隔字符划分出来的区间)
如不加任何选项,则从首字母向后一次按 ASCII码值进行比较,然后按升序输出

--------------------------------------------------------------------------
wc:用于统计文档的行数、组附属或词数
-l:行数
-w:词数
-m:字符数
如果不加任何选项,就把行数,词数,字符数依次输出

----------------------------------------------------
uniq:删除重复的行,
-c:表示统计重复的行数,并把行数写在前面

tee:相当于重定向 >,但是它会把写入内容显示在屏幕上。用于管道符 | 后,

-----------------------------------------
tr:用于替换字符
-d:表示会删除某个字符,后面跟要删除的字符
-s:表示删除重复的字符
可以把小写字母变成大写字母,如 tr '[a-z]' 'A-Z'

split:切割文档
-b:根据大小来分割文档(分为几个小文件,会以xaa,xab...来默认命名,如果在其后加上名name,则文件的名为nameaa,nameab...),单位为byte
-l:根据行数来分割文档

-------------------------------------------------
特殊符号
$:!$表示上条命令的最后一个变量
;:如果想在一行中运行多个命令,则命令之间可以用分号隔开
~:表示用户的家目录,root用户的家目录是 /root,普通用户则是 /home/username
&:把一条命令放在后台执行,通常用于命令运行时间较长的情况

-------------------------------------------------------
重定向符号>,>>,2>,2>>:
>:取代
>> :追加
2>:错误重定向
2>>:错误追加重定向,把错误信息输入到文本中

中括号【】:代表字符组合中的任意一个

特殊符号&& 和 ||:分号时不管签名一条命令是否执行成功,后面一条都会执行;&&时只有前面一条执行成功,后面一条才会执行成功; ||前面执行成功后后面不执行,否则执行后面,有且只有一条命令会执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: