目的:了解Shell的常用命令
Shell基本介绍
Shell其实就是"操作系统"的壳,用于和操作系统进行交互.
查看Linux支持的shell
cat /etc/shells
bash和shell的关系
/bin/bash是Linux预设的shell.bash是GUN计划中最重要的工具软件之一,目前也是Linux distribution的标准shell.
bash的主要功能
history
默认会记录1000个指令.一般都存放在~/.bash_hitory文件中,注意:.bash_histroy文件之记录前一次登录之间的命令,本次登录操作的命令记录在内存中,只有当注销的时候,会写入到该文件中
tab命令补全
命令别名设置功能(alias)
alias lm='ls -al'
进程控制、前景背景控制(job control,foreground,background)
程序化脚本(shell scripts)
通配符(wildcard)
Bash shell 内建命令:type
指令下达(通过bash进行访问操作系统)
总之,可以通过终端(tty)上面登录后, Linux会依据/etc/passwd文件设定给我们一个shell(预设是bash),然后我们可以通过指令下达来操作shell
shell的变量
# 使用echo 获取变量值
echo $PATH
echo ${PATH} # 注意和下面的$(指令)的区别,括号里放的的指令,花括号取的是变量的值
# 设置变量值
## 设置变量规则
### 1. 变量与内容之间用=号连接,切=号两边不能有空格
### 2. 变量内容中间如果有空格,则可以使用双引号或者单引号括起来
### 但是使用双引号,则双引号内如果有特殊字符则保留特殊符号原本的特性. 如:var="hello,$Lang" 等同于var="hello,en_US"
### 使用单引号,则表示纯字符,不保留特殊字符的特性
### 3. 使用转义字符可以转义特殊字符
### 4. 在一串指令中如果需要由其他指令提供信息,可以使用`指令`或者$(指令)获取.
echo $(uname -r)
echo `uname -r`
### 5. 如果该变量需要在子程序中使用,需要使用export 变量
### 6. 取消变量使用unset 变量名
环境变量
环境变量可以帮组我们达到很多功能,包括家目录的切换、提示符的显示、执行文件搜索等等.可以使用env和export命令查看当前shell环境中有多少默认的环境变量
env:environment的简写,是列出所有的环境变量:
HOME:家目录
SHELL:目前这个环境使用的shell,Linux预设的是/bin/bash
HISIZE:与历史记录大小有关
MAIL:使用mail指令在收信,系统会去读取邮件文件
PATH:就是搜索可执行文件路径,目录与目录之间使用冒号(:)分割,会按照目录顺序搜索
LANG:编码
RANDOM:随机数变量,目前大多数distribution都会有随机数生成器,就是/dev/random文件,可以使用$RANDOM取随机值
set:观察所有变量(环境变量和自定义变量),bash可不只有环境变量,还有与bash接口相关的变量,以及用户自定义的变量.
PS1:提示字符的设定
$:代表这个shell的pid,echo $$可以输出该shell的pid
?:上一个指令回传值,一般上一个指令执行成功返回0,否则返回错误码
export:自定义变量转换成环境变量.env和set现在知道了所谓的环境变量和自定义变量,两者之间的区别是,该变量是否可以被子程序继续引用.
变量键盘读取、数组和宣告(read array declare)
read 读取来自键盘输入的变量,就使用read这个指令.
declare/typeset 声明变量类型
declare和typeset是一样的功能,就是在声明变量的类型.如果使用declare后面并没有接任何参数,那么bash就会主动的将所有的变量名称与内容通通叫出来,和set一样.
declare [-aixr] variable
-a:将后面名为variable的变量定义成为数组类型array
-i:将后面名为variable的变量定义成为整数数字类型integer
-x:用法与export一样,将后面的variable变成环境变量
-r:将变量设定为readonly类型,该变量不可以被更改内容,也不能unset
与文件系统以及程序的限制关系:ulimit
试想下Linux主机同时登录10个人,且同事开启了100个文件,每个文件约10M,这样主机的内存要1010010M=10G,这样系统很容易挂,所以为了避免这种情况的出现,bash是可以限制用户的某些系统资源的,包括打开的文件数量,可以使用CPU时间,可以使用的内存总量等等.
ulimit [-SHacdfltu] 配额
-H:hard limit, 严格设定,必定不能超过这个设定的数值
-S:soft limit,警告设定,可以超过这个设定值,但是如果超过则有警告信息. 在设定上,通常soft会比hard小
-a:后面不接任何选项与参数,可以列出所有的限制额度
-c:当某些程序发生错误时,系统可能会将该程序在内存中的信息写入文件(除错用)
-f:此shell可以建立的最大文件大小(一般可能设定为2GB)单位为Kbytes
-d:程序可以使用的最大断裂内存(segment)大小
-l:用于锁定(lock)的内存量
-t:可使用的最大CPU时间(单位为秒)
-u:单一用户可以使用的最大程序(process)数量
bash环境的配置文件
是否发现一旦进入bash就会取得一堆变量,但是我们并没有进行任何的动作.这是因为Linux系统有一些环境配置文件的存在,让bash在启动时直接读取这些配置文件,以规划好bash的操作环境.而这些配置文件又分系统配置文件以及用户个人的偏好设置文件.