- shell的功能:
提供用户操作系统的一个接口。 - 系统上合法的shell要写在/etc/shells这个文件,因为系统某些服务在运行过程中会去检查用户能够使用的shells,而这些shell的查询就是借助/etc/shells这个文件
用户登录取得的shell就记录在/etc/passwd这个文件内。
[root@CentOS ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
shell的功能:
命令记忆功能 命令补全 命令别名(alias) 作业控制、前台、后台控制 程序脚本(shell script) 通配符(wildcard)
type:判断命令内、外部命令
参数: -a 会由PATH变量定义的路径中,将所有含有name的命令都列出来 -p 如果后面接的是外部命令,才会显示完整文件名 -t 当加入-t参数,会显示出意义: file:外部命令 alias:命令别名 builtin:内建命令
root@Ubuntu:~# type -t ls alias root@Ubuntu:~# type -t cd builtin root@Ubuntu:~# type -t cp file root@Ubuntu:~# type ls ls 是 `ls --color=auto' 的别名 root@Ubuntu:~# type -a ls ls 是 `ls --color=auto' 的别名 ls 是 /bin/ls
显示变量
root@Ubuntu:~# echo $变量名 或者 ${变量名} root@Ubuntu:~# echo $PATH root@Ubuntu:~# echo ${PATH} root@Ubuntu:~# echo $HOME root@Ubuntu:~# echo ${HOME}
设置变量
root@Ubuntu:~# echo $myname # 为空,下面设置: root@Ubuntu:~# myname=kevin root@Ubuntu:~# echo $myname # 设置完成
变量的规则:
字符串需要用单/双引号括起来 用转义字符可以将特殊字符转义 为变量增加内容:"PATH"="$PATH":/home/bin" 单引号`表示先执行,然后取执行结果 设置成环境变量:export 变量名 取消环境变量:unset 变量名 通常大写表示环境变量,小写是普通变量
# 在PATH变量中累加/home/dmtsai/bin:(以下都可以) root@Ubuntu:~# PATH=$PATH:/home/dmtsai/bin root@Ubuntu:~# PATH="$PATH":/home/dmtsai/bin root@Ubuntu:~# PATH=${PATH}:/home/dmtsai/bin # 将name内容多出来yes:($可以理解为取变量的内容) root@Ubuntu:~# name=$name"yes root@Ubuntu:~# name=${name}yes # 设置环境变量: root@Ubuntu:~# export name # 取消环境变量: root@Ubuntu:~# unset name # 进入内核的子进程(先执行uname -r命令,后执行cd命令) root@Ubuntu:~# cd /lib/modules/`uname -r`/kernel root@Ubuntu:~# cd /lib/modules/$(uname -r)/kernel
# 单引号只识别为字符,双引号可识别特殊符号 root@Ubuntu:~# name=kevin root@Ubuntu:~# echo $name kevin root@Ubuntu:~# myname="$name its me" root@Ubuntu:~# echo $myname kevin its me root@Ubuntu:~# name='$name its me' root@Ubuntu:~# echo $myname $name its me root@Ubuntu:~#
local:影响显示结果的语言
# 显示所有linux支持的语言: [root@CentOS ~]# locale locale -a zh_TW.euctw zh_TW.utf8 zu_ZA zu_ZA.iso88591 zu_ZA.utf8 # 当前系统所设置的语言 [root@CentOS ~]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8"
可以注意设置以上原因,当设置LANG或者LC_ALL时,其他选项的语言都会被替代
目前主机内包含的所有语言所在的文件:/usr/lib/locale
整体系统默认的原因定义:/etc/sysconfig/i18n(会显示安装系统时选的语言环境)[root@CentOS ~]# ll /usr/lib/locale/ total 96796 -rw-r--r--. 1 root root 99158544 Mar 1 16:07 locale-archive -rw-r--r--. 1 root root 0 Mar 1 16:07 locale-archive.tmpl [root@CentOS ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"
键盘读取变量,数组,声明
read:键盘读取 参数: -p:后接提示符 -t:后接等待的秒数 # 键盘读取name为kevin [root@CentOS ~]# read name kevin [root@CentOS ~]# echo $name kevin # 等待读取30秒 [root@CentOS ~]# read -p "please keyin your name:" -t 30 name please keyin your name:kevin [root@CentOS ~]# echo $name kevin
declare/typeset:变量声明 如果使用declare没有接任何参数,那么bash会将所有变量名称与内容全部调出来,就像set一样 参数: -a:定义为数组 -i:定义为整型数字 -x:定义为环境变量 -r:定义为只读 -p:单独列出变量类型 [root@CentOS ~]# declare -i sum=100+200+300 [root@CentOS ~]# echo $sum 600 # 查看类型: [root@CentOS ~]# declare -x sum [root@CentOS ~]# declare -p sum declare -ix sum="600" [root@CentOS ~]# declare +x sum [root@CentOS ~]# declare -p sum declare -i sum="600" # declare -x:设置为环境变量 # declare +x:取消设置环境变量 # 如果不小心定义为只读,只能注销重新登录方可复原
# 数组的设置方式:var[#] = 内容 [root@CentOS ~]# var[1]="smallmin" [root@CentOS ~]# var[2]="bigmin" [root@CentOS ~]# var[3]="min" [root@CentOS ~]# echo "${var[1]}, ${var[2]}, ${var[3]}" smallmin, bigmin, min # 建议直接以 ${数组}的方式读取比较正确
ulimit:文件系统与程序限制
我们的bash可以限制用户的某些系统资源,包括可以打开的文件数量、可以使用的CPU时间、可以使用的内存总量参数: -a:列出列出所有的限制额度 -f:限制用户创建的最大的文件大小 -t:可使用最大CPU时间 -u:最大进程数量 -l:锁定内存量 # 列出目前身份的所有限制: [root@CentOS ~]# ulimit -a file size (blocks, -f) unlimited #设置限制10M : [root@CentOS ~]# ulimit -f 10240 # 列出目前身份的所有限制: [root@CentOS ~]# ulimit -a file size (blocks, -f) 10240 # 创建大文件: [root@CentOS ~]# dd if=/dev/zero of=123 bs=1M count=20 File size limit exceeded (core dumped)
单一文件系统能支持的文件大小与block有关,例如block为1024字节时,单一文件可达16G,但是,我们可以使用ulimit限制。若某天发发现无法创建大容量的文件,记得查看ulimit的信息
想要复原重新登录即可,否则就要重新设置alias/unalias:设置/取消命令别名
# 设置别名:
[root@CentOS ~]# alias rm='rm -i'
# 取消设置:
[root@CentOS ~]# unalias rm
# 设置别名:
[root@CentOS ~]# alias lm='ls -l | more'
[root@CentOS ~]# alias cls='clear'
# 显示全部已存在别名:
[root@CentOS ~]# alias
- history:命令历史
参数:
n:数字,列出最近n行
-c:删除目前shell中的所有历史命令
-a:将目前新增的history命令增入histfiles中,若为加hisfiles,则默认写入~/.bash_history
-r:将histfiles的内容读到shell的history中
-w:将目前history写入histfiles中
# 列出目前所有history:
[root@CentOS ~]# history
# 列出最近3条数据:
[root@CentOS ~]# history 3
# 输出数值:
[root@CentOS ~]# echo $HISTORY
# 将目前数据写入histfiles文件
[root@CentOS ~]# history -w
系统在注销时会将最近HISTORY条记录更新到~/.bash_history记录文件当中。
~/.bash_history记录的条数永远是HISTORY那么多,旧的会被去掉,仅保留最新的。
# 执行第25条命令
[root@CentOS ~]# !25
# 执行上一条命令
[root@CentOS ~]# !! (即为!25那条命令)
# 执行最近一条历史命令开头符合command的命令
[root@CentOS ~]# !ali (匹配最近的一条ali开头的命令,比如alias)