1 shell介绍
2 命令历史
3 命令补全和别名
4 通配符
5 输入输出重定向
6 管道符和作业控制
7,8 shell变量
9 环境变量配置文件
10 shell特殊符_cut命令
11 sort_wc_uniq命令
12 tee_tr_split命令
13 shell 特殊符号
1,什么是Shell:
Shell是一个命令解释器,提供用户和机器之间的交互
支持特定的语法:比如逻辑判断
还有zsh,ksh等
2,命令历史
Linux 可以记录每个用户所使用的命令, 并记录到 ~/.bash_history 文件中
当用户以 bash 登入 Linux 主机后, 系统会主动地由 ~/.bash_history 读取命令历史
当用户注销时, 会将最近的 HISTFILESIZE 个记录写入 ~/.bash_history 文件中
这里默认最大记录1000条,记录之前操作的命令
变量则为histor
history -c: 清除当前内存内的全部命令记忆
history -r: 将 history 文件中的命令记忆读出到当前内存中 #一般登录时会自动进行
history -w: 将目前的内存中的命令记忆写入 history 文件中 # 一般登出时会自动进行
3,命令补全和别名
命令补全 TAB
安装命令yum install -y bash-completion ,安装完之后需要重启
这时候用tab命令 我们可以看到有对应的目录出来
常用的对目录或者目录下的文件输入第一个字符,TAB可以自动弹出,不再描述
命令别名 alias例如,将ls –l 命令用成111
删除alias用unalias
查看有哪些存在的alias等,cat .bashrc,这里代表用户家目录下就有3条
有些的在这里记录
4. 通配符与特殊符号
符号 |
意义 |
* |
代表0-无穷个 任意字符 |
? |
代表有且只有一个字符 |
[ ] |
代表有且仅有一个字符,且为[...]中所枚举的其中一个, 如 [13579] |
[-] |
同上,只不过是一个范围,如[ 0-9 ],[a-z]等 |
[^] |
有且仅有一个,且不是所枚举的任何字符,如:[^a-zA-Z] 代表该位不是字母 |
例如
这里不做详细的解释,主要是^代表非
[^][^a-z] 则代表不以小写字母开头的
[A-Za-z0-9]如果需要匹配字母和数字,则可以这么写
2>代表错误的输出
特殊符号
符号 |
内容 |
# |
批注号 |
\ |
转义符号,将特殊字符或通配符还原成一般字符 |
| |
管道符 |
; |
命令衔接符,连续执行两条命令 |
~ |
当前用户家目录 |
$ |
取用变量符号 |
& |
工作控制,将指令变成后台工作 |
! |
逻辑非 |
>、>> |
数据流重定向,output |
<、<< |
数据流重定向,input |
' ' |
单引号,无法引用变量 |
" " |
双引号,可以引用变量 |
\转义符,举例说如果我们需要查找一个特定word
这种\则代表转义
& 让程序去后台执行,这个也是非常重要的
正常写命令这里没有写完的时候会卡住的
如果加了&则可以去后台运行
dd if=/dev/zero of=bigfile bs=1M count=1000 &
可以实际操作,不再举例
也可以用top或者或者top &
5. 输入输出重定向
流程图如下
标准输出,即命令成功执行时,将执行结果输出至文件 or 设备
符号:> (覆盖导出) 或 >> (追加导出)
例如将1覆盖到1.txt的目录下
再覆盖一次2,发现这里是覆盖,不是追加
用>>则代表追加
6. 管道符
管道的概念与数据流重定向不同,管道只是在输出至屏幕前多加一道工序,而配合管道的这些工序,往往是字符处理软件
例子:
ls /etc/ | more # 原本要直接输出至屏幕的信息, 用 more 进行了加工
ls /etc/ | grep "bash" # 原本直接输出至屏幕的信息, 用 grep "bash" 进行了加工, 筛选出了关键字
7. 作业控制
foreground: 前台, 平常执行命令的界面,通用命令fg
background: 后台, 看不到的地方
什么样的工作适合放到后台: 不需要与用户交互的命令
放入后台的工作是无法用 Ctrl + c 来终止的
后台的工作有两种状态: 暂停(stop) 和 运行中( running)
例如
按下 ctrl+z, 将正在执行的top扔到后台且置为暂停 [1]- 已停止
例如:
查看后台命令用jobs
Job参数:
-l:同时列出任务的 PID
-r: 仅列出后台中处于 "running" 的任务
-s: 仅列出后台中处于 "stop" 的任务
将后台工作拿回到前台来(fg)
将后台暂停的任务激活用bg
直接移除后台 则使用kill或者pkill
kill 发送信号给一个或多个进程(经常用来杀死一个进程)
一般命令是kill -9 pid
上面我们再看的时候则只有一个top进程
8. Shell 变量
之前我们接触过PATH,它是shell预设的一个变量
通常shell预设的变量都是大写的。变量就是使用一个较简单 的字符串来替代某些具有特殊意义的设定以及数据
1)预设的变量除了PATH外,可以使用env命令来查看系统常用的变量
2)用户自定义变量
3)变量名规则:字母、数字下划线、首位不能为数字
4)变量的累加,当变量中有其他的变量是可以将该变量使用双引号单独引起来。
例如
可以用w表示在那个TTY下
在当前终端下设置的变量在其他的shell下是没有的,因为还没有进行全局变量。在一个终端下执行bash就进入到了一个子shell,也就是打开了另一个shell
要想使该终端下的所有子shell都能识别某个变量,需要进行全局变量。并且是向下生效的。
注意-1:如果变量值中存在空格,需要用单引号或双引号将变量值括起来
注意-2:如果变量值中有引用其他变量,需要用双引号将变量值括起来
变量的相关命令echo
功能:打印变量的内容
[root@choco-01 ~]# echo $LANG zh_CN.UTF-8
export
功能:将变量转换为环境变量
声明变量为环境变量,进入子 shell 后,变量仍让有效
常用的环境变量有(这里不再举例)
常用环境变量
HOME: 当前用户的家目录
HOSTNAME: 该主机的主机名
USER: 当前用户的用户名
SHELL: 当前使用的 shell 类型
HISTSIZE: 可存储的历史命令条数
MAIL: 当前用户的邮箱
PATH: 可执行命令的所在目录
LANG: 当前语系
PS1: 命令提示符的格式, 可玩性较高, 但工作中不常用, 可自行 manbash 查看 PS1 的设置方法
PS2: 输入命令时强制换行后的提示符
OSTYPE: 当前操作系统类型
MACHTYPE: 安装的机器类型
HOSTTYPE: 主机的位数, x86 还是 x86_64
9. 环境变量配置文件
login 与 non-login
ogin shell:取得 bash 时需要完整的登录流程。如由 tty1-tty6登录时,需要输入用户的账号和密码
读取的文件:
/etc/profile :系统整体的设定,对所有用户皆生效
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:用户的个人设定
但是各个文件中可能又会调用其他的文件,所以一般来说,login shell 读取的文件如下图所示:
non-login shell:取得 bash 接口的方法不需要重复登录的举动,如在 bash 环境下,再次执行bash命令进入子 shell 时,不需要输入账号和密码
该文件会根据用户的 UID 设定好许多环境变量以及参数
设定环境变量
PATH:根据 UID 决定PATH 变量是否要包含 sbin 目录
USER:根据 id 命令的结果,显示用户名
LOGNAME:等于 USER
MAIL:配置好用户的邮箱
HOSTNAME:根据 hostname 指令,决定该变量值
HISTSIZE:直接设定历史命令记录的条数为 1000
~/.bash_profile (login shell)
根据之前流程图的描述,bash shell 读取完通用配置后,才开始进行用户个性化配置的读取。
其实用户个性化配置的文件不止 ~/.bash_profile 一个,还可能有 ~/.bahs_login 和 ~/.profile
所以我们往往只能见到 ~/.bash_profile 而已
Bash profile的内容如下
他的意思是/.bash_profile 调取了 ~/.bashrc 文件, 并将 ~/bin 目录加入到 PATH 变量中
~/.bashrc
查看cat。Bashrc
当通过 non-login shell 取得 bash 后, 仅会读取 ~/.bashrc 文件
10 shell特殊符_cut命令
*任意一个任意字符
?任意一个字符
#注释字符
|管道符
利用cut我们可以截取需要的展现的数据,例如下面的-c,可以看到对应的信息
11 sort_wc_uniq命令
用sort
//-t 指定分隔符,作用与cut -d 一样
-r 逆向排序
wc -l 可以查看对应的行数
uniq命令用来删除重复的行,其中-c选项用来统计重复的行数。前提是排序后执行uniq
一般携带-c参数
tee命令后面跟文件名,其作用类似于重定向>,但他比重定向多一个功能,即把文件写入后面所跟的文件时同时显示在屏幕上,追加使用-a选项
例如
加上-a之后 相当于追加
将2.txt的内容已经追加到了3.txt
tr命令应用于替换字符,常用来处理文档中出现的特殊符号。
例如将z替换成Z
split命令用于切割文档,把一个很大的文件分成指定的大小等
-b 100M 例如切割成100M的一个文档,例如常用以下命令格式
find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \; //将所有找到*conf文件全部写入a.txt中
split -b 1000 a.txt zcx. //表示分割后的小分件的文件名前缀为zx.xx,这里做个测试
split -b 1000 a.txt
指定每个100k
$变量前缀,!$组合,,正则里面表示行尾
~ 用户家目录,在正则表达式中表示匹配符
;多命令写到一行则用分号分开
> 正确重定向,会把之前文件的内容全部覆盖掉
[]定字符中的一个,[0-9],[a-zA-Z],[abc]
|| 用在shell中表示或者
&& 表示当第一条命令成功后,才会执行第2条命令。