shell是与kernel沟通的桥梁
检查系统可用shell
/etc/shells
centos默认使用bash
bash的优点
历史命令记录功能,记录文件为 ~/.bash_history
命令与文件补全功能
[Tab] 接在一串指令的第一个字的后面,则为命令补全;
[Tab] 接在一串指令的第二个字以后时,则为"文件补齐"!
若安装 bash-completion 软件,同时在/etc/bash_completion.d/文件夹下面有对应补全文件,则在某些指令后面使用 [Tab] 按键时,可以进行"选项/参数的补齐"功能!
命令别名设置(alias)
工作控制、前后台控制(job control、foreground、background)
程序化脚本(shell script)
通配符(wildcard)
查询是否为bash shell的内置命令:type
type [-tpa] command
-t,显示命令种类:file为外部命令,alias为别名命令,builtin为内置命令
-p,当command为外部命令时,显示命令的完整文件名(完整路径)
-a,在PATH路径中寻找包含command字符在内的所有命令,包括alias
不加参数默认识别命令为内置或者外部命令
通过反斜杠\可以将长命令换行显示
ctrl+u/k,从光标处向前/后删除指令
ctrl+a/e,将光标移动到指令最前面/后面
shell变量
shell变量功能
变量的读取和设置
echo $variable
变量设置规则
变量由字母和数字组成,数字不能作为开头
变量和内容用=连接
=左右两边不能有空格
变量内容如果包含空格,则必须用单引号''或者双引号""标识。单引号会使得$的引用变量功能失效,双引号则保持该功能
变量内容可以包含转义字符
可以通过$(command)来引用命令执行结果
可以通过$进行环境变量的迭代
通常大写代表系统变量,小写代表自定义变量
变量可以通过export来变成环境变量,供子程序调用
取消变量:unset
环境变量
env
set,包含环境变量和用户自定义变量
$,本shell的PID
?,执行命令的回传值
export [variable],将自定义变量转换成环境变量
语系变量locale
locale -a,显示所有支持语系
/etc/locale.conf,语系配置文件
变量的有效范围
环境变量 -->全局变量
自定义变量-->局部变量
export可以将局部变量转换成全局变量
变量的键盘读取、数组和声明
read [-pt] varibale
-p,后面可以接提示字符
-t,后面接等待的秒数
declare [-aixr] variable
-a,定义variable为数组类型
-i,定义variable为整数类型
-x,将variable转换成环境变量
-r,将variable定义为只读read only,变量不可被更改,也不能被取消unset
variable[n]
n为数字,定义为数组类型,数组索引从1开始而不是0
与文件系统与程序的限制关系ulimit
ulimit [-HSacfdltu] [配额]
-H,hard limit,严格设置,不能超过这个限制
-S,soft limit,警告设置,超过限制就会收到警告信息
-a,显示用户配额信息
-c,core file,核心文件大小限制。核心文件:在程序发生错误时,系统有可能将程序在内存中的信息写入文件。
-f,由shell创建的单一文件大小限制(单位Bytes),数值只能减小不能增大
-d,程序可以使用的最大断裂内存(segment)容量
-l,可锁定的最大内存量
-t,可使用的最大内存占用时间(单位:秒)
-u,单一使用者可以使用的最大程序数量
退出登录才能解除限制,管理使用者的ulimit,需要使用PAM功能
变量内容能够的删除、取代和替换
变量设置方式
说明
${变量#关键字}
${变量##关键字}
从头删除最短匹配
从头删除最长匹配
${变量%关键字}
${变量%%关键字}
从尾删除最短匹配
从尾删除最长匹配
${变量/旧字符串/新字符串}
${变量//旧字符串/新字符串}
替代匹配的第一个字符串
替代匹配的所有字符串
命令别名与历史命令
命令别名与历史命令
别名设置
alias:设置别名 alias 别名='指令'
unalias:取消别名 unalias 别名
历史命令:history
历史命令记录文件 ~/.bash_history,记录命令的数量由 HISTFILESSIZE 决定
history [n|-c|-raw [file]]
n显示最近的n条历史命令
-c,清楚当前shell的所有历史命令
-r,将file文件内容写入当前shell的历史记录中
-a,将目前新增的命令写入到file文件里面,file缺省则写入~/.bash_history中
-w,将当前shell的所有历史命令写入到file文件中
!number,执行第n条历史命令
!command,搜索最近一条指令开头为command的命令并执行
!!,执行上一个指令
bash环境
路径与指令的搜寻顺序
bash环境配置文件
login与non-login shell
login shell,取得bash需要完整的登陆流程,称为login shell。
non-login shell,取得bash接口不需要重复登录。
login shell与non-login shell取得的环境配置文件不一样。
login shell只会读取两个配置文件:
/etc/profile,系统的整体配置文件,一般不修改
~/.bash_profile或~/.bash_login或~/.profile,个人配置文件
数据流重定向
标准输出(stdout)和标准错误输出(stderr)都是默认输出到屏幕
标准输入(stdin),代码为0,使用<或者<<
标准输出(stdout),代码为1,使用>或者>>
标准错误输出(stderr),代码为2,使用2>或者2>>
单个<符号代表使用文件内容来代替键盘的输入
两个<<符号代表结束输入。例如<<eof,当后边所输入的字符串遇到eof的时候,就结束此次输入。
单个>符号代表将数据以覆盖的方式输出到指定文件或者设备上
两个>>符号代表将数据以追加的方式输出到指定文件或者设备上
将标准错误输出信息当做标准输出信息并且写入同一个文件, 2>&1 或者 &>
将标准输出信息当做标准错误输出信息并且写入同一个文件, 1>&2
/dev/null空设备,可以将信息定向到该设备从而忽略
tee,双向重定向
同时将标准输入信息在屏幕上显示(标准输出)和重定向到文件
-a,以追加的方式
命令执行的判断依据:;、&& 和 ||
cmd; cmd; cmd ...
;的作用是分隔命令,并依照命令顺序执行,命令之间没有想关性
$?(命令回传值)&&(与) ||(或)
$?=0代表命令执行结果正确,$?=1代表命令执行结果错误
cmd1&&cmd2表示cmd1执行结果正确,则执行cmd2,否则不执行cmd2
cmd1||cmd2表示cmd1执行结果正确,则不执行cmd2,否则执行cmd2、
管道命令
管道命令(pipe)(|)
管道命令仅能处理由前一个命令传来的正确信息
管道命令需要能够接受标准输出信息作为其标准输入
截取命令:cut和grep
cut,cut的主要用途处理行内数据
cut -d '分隔符' -f fields
cut -c 字符区间
以上两种操作是互斥的,
grep,grep的主要用途是处理整行的数据
grep [-acinv] [--color=auto] '目标字符串' file
-a,将二进制文件以文本方式搜索
-c,搜索的次数
-i,忽略大小写
-n,输出行号
-v,反向选择,显示除去目标字符串以外的行
--color=auto,将目标以其他颜色显示
排序命令:sort,wc,uniq
sort
sort [-fbMnrtuk] [file/stdin]
-f,忽略大小写并全部转换成大写
-b,忽略开头的空格
-M,按照月份排序
-n,按照字符串的数值编码排序
-r,反向排序
-t,定义分隔符号,默认'tab'
-u,不显示重复项
-k,排序区间
wc
-l,统计行数
-w,统计字数
-m,统计字符数
uniq,不显示重复项
-i,忽略大小写
-c,统计数量
字符转化命令:tr,col,join,paste,expand
tr,删除或替换目标字符,可以使用正则表达式
tr [-ds] target
-d,删除目标字符
-s,替换目标字符
col
-x,将tab键替换成对等的空格
join,用于处理两个文件之间的数据
join [-ti12] file1 file2
-t,定义分隔符,默认是空格,且使用第一个字段比较
-i,忽略大小写
-1 n,第一个文件选择第n个字段进行比较
-2 n,第二个文件选择第n个字段进行比较
paste,直接将两个文件的相同行进行连接,以tab键分隔
paste -d file1 file2
-d,定义分隔符,默认是tab键
expand,将tab转换成对应个数的空格键
expand [-t [n]] file
-t n,n代表数字,表示用n个空格代替tab键,默认8个
分割命令:split
将大文件分割成若干个小文件
split [-bl] file PREFIX
-b size,分割文件的大小,单位b/k/m
-l number,以行数进行分割
PREFIX,分割文件的命名前缀
参数代换:xargs
用来产生指令的参数,可以读取stdin数据,并以空格或者断行符作为区分
xargs [-0epn] command
-0,将特殊字符还原成一般字符
-e string,定义结束字符串为string,当遇到该字符串时则停止工作
-p,交互模式
-n n,控制接收参数的个数,设置为n个
减号-的用途,可以用来代替stdin或者stdout