1. 什么是shell?
我们通过shell将我们输入的命令与内核进行沟通,好让内核可以控制硬件来完成工作。相当于Windows的图形界面。
linux有众多的shell,默认的是bash。
bash的主要优点:
- 历史命令 (上 下 键)
- 命令与文件补全(tab键)
- 命令别名设置(alias)
- 任务管理、前台、后台控制(job control、foreground、background)
- 程序化脚本(shell scripts)
- 通配符(Wildcard)
查询命令是否为bash shell 的内置命令
type [-tpa] name
-
-t::type会显示命令的类型。
builtin:表示该命令为bash内置命令;
alias:表示该命令为其他命令的别名;
file:表示该命令为外部命令; -
-p:如果后面的 name 是外部命令时,才会显示完整文件名;
-
-a:会由 PATH 变量定义的路径中,将所有含name的命令都列出来,包含alias;
命令的快速编辑
合理利用\
这个转义字符。
四个组合键快速编辑命令:
ctrl+u
:删除光标前的命令;
ctrl+k
:删除光标后的命令;
ctrl+a
:移动光标至命令最前;
ctrl+e
:移动光标至命令最后;
2. 变量
使用echo命令查看变量
变量的设置规则:
- 变量与变量内容用
=
连接,等号两边不能有空格,变量名开头不能用数字,只能用字符; - 变量内容若有空格用
“”
将变量括起来; - 双引号内的特殊字符(
$
)可以保持原有特性; - 单引号内的特殊字符仅为一般字符;
- 可以用转义符号
\
将特殊符号(enter、$、\、'、空格
)等变成一般字符; - 取消变量用
unset
; - 如果变量需要在子程序执行,需要
export 变量名
将变量添加到环境变量; - 若变量是扩增变量,可以使用
“$变量名称”或${变量}
来累加内容,例如PATH="$PATH":/home/bin; - 需要借其他命令所提供的信息时,使用
$
或反单引号;
环境变量与自定义变量
使用env可以查看环境变量
使用set可以查看环境变量和自定义变量
环境变量与自定义变量的区别在于是否会被子进程所继续引用。因为子进程只会继承父进程的环境变量,不会继承父进程的自定义变量。
原理:启动一个shell时,系统会分配内存给shell,父进程使用export时,可以让自定义变量写到该内存中,当加载另一个shell时,子shell(子进程)将父进程的环境变量内存区域导入自己的环境变量区域中。
声明变量类型: declare
declare [-aixr] variable
- -a :将变量variable定义为数组(array)类型;
- -i:将变量variable定义为整数(integer)类型;
- -x:(export)将变量variable变成环境变量;
- -r:将变量variable定义为只读(readonly)类型;
3. 命令别名:alias,历史命令:history
history [n];
history [-c];
history [-arw] histfiles;
- -a:将新增的history写入histfiles,若没有该文件,写入~/.bash history;
- -r:将histfiles文件读到history中;
- -w:将history写入histfiles中;
4. bash shell 操作环境
路径与命令查找
先aliaas找该命令执行,再由bash内置的(builtin)命令来执行,再由$PATH这个变量的顺序查找到第一个命令来执行。
bash 的登录与欢迎信息:
/etc/issue
可以设置登录画面。
/etc/motd
可以设置登录欢迎信息(例如:通知)。
bash 的环境配置文件
系统有一些环境配置文件,bash启动时直接读取这些配置文件。这些配置文件分为全局配置文件和个人配置文件。
login shell:就是需要账号密码登录的shell,nologin shell:就是图形用户界面登录的shell,重点在于login shell。
/etc/profile系统整体设置(login shell才会读,且每个用户都会读)。
bash login shell时候只读取/etc/profile,但/etc/profile会调用其他配置文件。
~/.bash_profile 或 ~/.bash_login 或 ~/.profile 属于用户个人设置。
bash 的login shell会按上述顺序读取上面三个文件中的一个(读了一个不会再读下一个)。
从图中可以看出,~/.bash_profile 还会读取 ~/.bashrc 文件,所以我们可以将我们的用户个人设置写入 ~/.bashrc。
nologin shell 只读取 ~/.bashrc。
终端环境设置:stty、set
stty可以查看按键内容
set 可设置更多的值(不详细描述)
5. 数据流重定向(redirect)
什么时候需要数据流重定向:
- 想要将输出信息存储在文件中时;
- 后台执行程序,不希望干扰屏幕输出时;
- 一些命令的可能已知错误信息,想以 2> /dev/null 丢掉时;
- 错误信息与正确信息分开输出时;
例:1> file 2>&1
两个数据写入一个文件。
6. 管道命令
选取命令:cut、grep
- cut :操作一行,去取出我们要的部分
- grep :分析一行行信息,取出我们要的行
排序命令: sort、wc、uniq
- sort :可以排序数据,可以排序字符;
- uniq:排序完成后使用该命令将重复的数据列只显示1个;
- wc:(wordcount)用来计算整体的数据;
双重定向:tee
tee [-a] file
tee可以让标准输出流转存一份到文件中,并将同样的数据继续送到屏幕去处理,这样除了可以让我们进行数据分析外还可以作为处理一份数据的中间缓存记录。
字符转换命令:tr、col、join、paste、expand
- tr :删除或替换一段信息中的部分字符;(多用在正则表达式)
- col:将[tab]装换成对等的空格
- join:将两个文件中,有相同数据的一行加在一起;
- paste:直接将两行贴在一起,中间用[tab]隔开;
- expand :自动将[tab]键转换成空格键;
划分命令:split
将一个文件划分为几个小文件
参数代换:xargs
很多命令并不支持管道命令,因此我们可以通过xargs来提供该命令使用标准输入。