shell 将我们输入的命令与内核进行沟通,好让内核可以控制硬件来正确无误地工作。
type [-atp] name -a 将PATH变量定义的路径中,所有包含name的命令都会列出,包括alias -t file 表示外部命令 alias 表示该命令为别名所设置的名称 builtin 表示bash内置命令 -p 如果是外部命令,打印出完整的文件名
【y=ax+b】等号左边的(y)就是变量,等好的右边(ax+b)就是变量内容。左边是未知数,右边是已知数。
变量又可以分为“环境变量”和“局部变量”,类似于小孩子的存款和父亲的存款,小孩子比较贪财,自己的钱谁也拿不走一分,但他爸爸的钱小孩子却有直接的继承关系。
也就是父类的变量子类可以使用,子类的变量,只有子类可以使用。
注意:变量分为未定义变量和“”变量
env 或 export
set用来查看环境变量和自定义变量
其中set查看的变量中有一个变量为【SP1】,该变量参数:
$? 表示上一命令执行结果,成功$?值为0,失败$?值为错误码。
read [-pt] 读取键盘输入的数据 -p “提示语” 在输入前打印到屏幕上的提示语 -t 最多等待时常(秒)
declare [-iarx] variable -i 定义一个整数 -a 定义一个数组 -x 定义一个环境变量 -r 定义一个只读变量,该变量不可被更改内容,也不可以被unset + -p 单独列出变量的类型
定义一个数组变量 var[1]="a1" var[2]="a2" var[3]="a3" echo "${var[1],${var[2]},${var[3]}"
文件系统及程序的限制关系:ulimit
ulimit [-fnutdlaHS] [配额] -H :hard limit ,严格的设定,必定不能超过这个设定的数值; -S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告讯息。 在设定上,通常soft 会比hard 小,举例来说,soft 可设定为80 而hard 设定为100,那么你可以使用到90 (因为没有超过100),但介于80~100 之间时, 系统会有警告讯息通知你! -a :后面不接任何选项与参数,可列出所有的限制额度; -c :当某些程式发生错误时,系统可能会将该程式在记忆体中的资讯写成档案(除错用), 这种档案就被称为核心档案(core file)。此为限制每个核心档案的最大容量。 -f :此shell 可以建立的最大档案容量(一般可能设定为2GB)单位为Kbytes -d :程序可使用的最大断裂记忆体(segment)容量; -l :可用于锁定(lock) 的记忆体量 -t :可使用的最大CPU 时间(单位为秒) -u :单一使用者可以使用的最大程序(process)数量。 -n :限制用户打开的文件个数
#:符合取代文字的『最短的』那一个;
##:符合取代文字的『最长的』那一个
变数设定方式 说明 ${变数#关键字} 若变数内容从头开始的资料符合‘关键字’,则将符合的最短资料删除 ${变数##关键字} 若变数内容从头开始的资料符合‘关键字’,则将符合的最长资料删除 ${变数%关键字} 若变数内容从尾向前的资料符合‘关键字’,则将符合的最短资料删除 ${变数%%关键字} 若变数内容从尾向前的资料符合‘关键字’,则将符合的最长资料删除 ${变数/旧字串/新字串} 若变数内容符合‘旧字串’则‘第一个旧字串会被新字串取代’ ${变数//旧字串/新字串} 若变数内容符合‘旧字串’则‘全部的旧字串会被新字串取代’
例如: [dmtsai@study ~]$ str="oldvar"; var=${str-novar} [dmtsai@study ~]$ echo "var=${var}, str=${str}" var=oldvar, str=oldvar
history [-cwrna] n 查看最后n条命令表 -c 清除目前shell中history所有缓存的输入过的命令 -w 强制将history缓存中的内容更新到~/.bash_history中 -r 将histfiles的内容读到目前这个shell的history记录中 -a 将目前新增的history命令新增如histfiles中, 若没有加histfiles,则默认写入到~/.bash_history
/etc/issue :文件内存储的是通过终端登陆前的提示内容
/etc/issue.net :通过远程登陆终端前的提示内容
/etc/motb :登录后的提示内容
参数:
\d :本地终端时间 \l :第几个终端界面 \m :显示硬件等级(i386/i486...) \n :显示主机的网络名称 \r :操作系统版本 \t :显示终端时间 \S :操作系统名称 -v :操作系统版本
如何当前使用的是哪个shell呢?
如果登陆后直接使用的是/etc/passwd 文件内最后一个【:】后面的shell 如果是在可视化界面这使用的是non-login shell
login shell和non-login shell
login shell是从登陆页面进行登陆后bash会自动加载并使用的shell
会先调用/etc/profile 文件,该文件又会去调用/etc/profile.d/*.sh
然后会调用用户个人设置配置文件 ~/.bash_profile
调用个人配置文件时会按顺序调用一下三个文件:
~/.bash_profile
~/.bash_login
~/.profile
如果有第一个则不会再调用其他。
login shell读取流程:
下面的则是调用的配置文件。
如果修改了.bash_profile配置文件,需要重启才能生效
可以使用 source 来强制生效
source 配置文件名 强制将环境变量配置文件内容刷新到环境变量中。(source 在当前shell 环境中执行脚本文件)
non-login shell
通过Xwindows 右键进入的终端窗口或在shell中开启的shell,在没有输入账号密码的情况下进入的shell子程序中。
这种情况仅会读取配置文件~/.bashrc
如果将~/.bashrc删除了,可以复制/etc/skel/.bashrc到根目录,然后在source下即可;
注意:如果将家目录下的
.bash_profile
.bash_history
.bashrc
误删除了,可以在/etc/skel/找到并复制到家目录即可。
/etc/man_db.conf
man 命令时,会调取该配置文件内的配置信息。如果帮助文档没有在内,则需手动设置下。
特殊符号:
注意:当stdout和stderr同时输出到一个文件内时,为了避免交叉输入导致数据错乱,
可以使用(2>&1)来序列输入数据到文件中
[study1@localhost ~]$ echo "error message" 2>/dev/null 1>&2
2>/dev/null 将错误信息丢掉。
cmd1 ; cmd2
执行完cmd1后执行cmd2
cmd1 && cmd2
当cmd1命令执行完之后,如果$?结果为0,执行cmd2.反之结束
cmd1 || cmd2
当cmd1命令执行结果$?为非0时,执行cmd2,否则不执行cmd2
cut [-dfc] -d 'char' 以char为分隔符 -f n 选取分割后的第n列 -e 选取固定宽度的字符
grep [-vinac] [--color=auto] '查找字符' filename -v 取反,即选中没有'查找字符'的行 -i 忽略大小写 -a 二进制文件以文本的方式查找数据 -c 只显示统计查找到的次数 -n 显示行号
sort [-ftknMub] [filename or stdin] -f 忽略大小写 -b 忽略开头的空格 -u 相同的数据只显示一行 -t 分隔符,默认是tab -k 按照哪个区间排列 -n 以纯数字排列 -M 以月份进行排列
uniq [-ic] -i 忽略大小写 -c 进行计数
注意:uniq需要排序后才能进行相同字符的统计
wc [-lmw] -l 统计多少行 -m 统计多少字符 -w 统计多少单词
tr [-ds] SET1 ... -d '' :删除' '字符 -s '1' '2' :将所有的'2'替换'1'
col [-x] -x 将所有的【tab】(^I)用空格替换
expand [-t] -t n :将所有的【tab】(^I)用指定个数的空格替换
join [-ti12] file1 file2 -t 默认空格为分隔符,并对比第1栏的数据,若果两文件相同, 则将两条数据练成一行,且第一个栏位放在第一个 -i 忽略大小写 1 阿拉伯数字1,代表第一个文件的第几列作为对比依据 2 阿拉伯数字2,代表第二个文件的第几列作为对比依据
paste [-d] -d 后面跟分隔符
split [-bl] file PREFIX -b num 将文指定文件拆分成多个指定大小的文件 -l num 将文件才分成多个指定行大小的文件 PREFIX 可作为才分文件的前缀,多个文件会以PREFIX 为开始,aa、bb、cc结尾
xargs [-n0ep] command -n num 一次给command num个参数 -e'eod' 遇到参数eod结束命令 注意:-e'eod' e和'分号之间没有任何字符 -p 执行每个命令都会提示确认
history [-rawcn] [filename] -c 清除history记录 -w 将history记录存储到~/.bash_history中 -r 将filename中的记录加载到history中 -a 将history中的记录存储到filename中
~./bash_history 历史shell命令
~/.logout 想让系统在你注销账户后做些什么的命令。