1 shell
1.1 什么是shell
1.1.1shell的定义
shell是一类软件的总称:bash,sh,csh。
shell将人类的高级语言翻译成二进制语言。
用户使用应用程序发布指令
shell通知 操作系统 需要进行的操作
内核相当于 操作 系统 来 指挥硬件
硬件是 整个系统中的实体工作者
1.1.2shell与内、外部命令
(1)shell分为内部命令和外部命令,一般先执行内部命令,hash再执行外部命令。
| 内部命令 | 外部命令 |
|---|---|
| 集成于Shell解释器程序内部的一些特殊指令 ,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文或二进制程序 |
| 属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
| 没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
| 自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
(2)可以使用type命令来区分内外部命令
type (命令),如果是内部命令则反馈“(命令)是shell内嵌”。
例:
如果是外部命令则反馈程序路径
例:
(3)开启或关闭内部命令
关闭:enable -n (内部命令)
开启:enable (内部命令)
(4)hash
缓存空间
hash -d 加缓存里的命令 单独删除
hash -r 删除所有
将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉hash值后,才能继续使用。
(5)命令的执行过程
判断是否是内部命令 ,是直接执行, 不是 去看hash缓存表 如果hash 表有直接执行,有 但是找不到 报错 如果是第一次执行的外部命令,会去规定的文件夹找命令,如果没有会报错。
执行命令,命令不存在的情况: 1.命令打错 2.hash 缓存中没有 3.不在$PATH 4.没有安装
linux 指令
1 命令行格式
格式:命令字 空格 [选项] 空格 [参数]
1.命令字
是整条命令中最关键的一部分;唯一确定
2.选项
短格式选项:使用"-"符号引导 通常一个字母
长格式选项:使用"--"符号引导 通常完整的单词
3.参数
命令字的处理对象
可以是文件名、目录(路径)名或用户名等内容
数量可以0到多个
";"可以隔开命令,执行多个命令
| 快捷键 | 功能 |
|---|---|
| Tab 键 | 自动补齐(两次可以显示所有选项) |
| 反斜杠“\” | 强制换行或转义 |
| Ctrl+a | 光标移到最前 |
| Ctrl+e 或 end键 | 光标移到最后 |
| Ctrl+U | 清空至行首不包括当前光标处的字符 |
| Ctrl+K | 清空至行尾包括当前光标处的字符 |
| Ctrl+w | 从当前光标删除到开头 |
| ALT+d | 从当前光标删除末尾 |
| Ctrl+l | 清屏 |
| Ctrl+c | 取消本次命令编辑 |
| Ctrl+s/Ctrl+q | 锁屏/解锁 |
| 向上下箭头 | 回看执行过的命令 |
2 获得命令帮助
2.1 help
-
[]表示可选项
-
CAPS或<>表示可变化的数据
-
...表示一个列表可加多个一个或多个
-
x|y|z表示 或
-
-abc是-a -b -c (部分命令选项有先后顺序) 多个 -abc一般而言没有顺序先后(绝大多数没有,只有少部分区分先后)
只能查看 内部命令 的 使用方法: tar -zxvf tar zxfv
区分前后 解压 压缩
2.2 --help
查看外部命令帮助
命令 --help
2.3 man
man分为9个章节默认打开第一章节(menu菜单manual手册)
查询命令章节: whatis 命令
区段:
| 区段 | 含义 |
|---|---|
| 1 | 用户指令 |
| 2 | 系统调用 |
| 3 | 程序库调用 |
| 4 | 设备 |
| 5 | 文件格式 |
| 6 | 游戏 |
| 7 | 杂项 |
| 8 | 系统指令 |
| 9 | 内核内部指令 |
| n | Tcl或TK指令 |
3 目录操作
3.1 pwd 显示当前路径
pwd -p 显示真实路径
3.2 cd
语法:
cd [dirName]
- dirName:要切换的目标目录,可以是相对路径或绝对路径
| 命令 | 效果 |
|---|---|
| cd cd ~ | 若不指定目标位置,切换到当前用户的宿主目录(家目录) |
| cd - | 到前一次目录 |
| cd ./ | 表示以当前的工作目录作为起点(已点开头的是) |
| cd ../ | 表示以当前目录的上一级目录(父目录)作为起点 |
| cd ~用户名 | 表示以指定用户的宿主目录(家目录)作为起点 |
| cd .* | 表示隐藏文件 |
3.3 ls 显示当前目录
语法:
ls [选项] [文件或目录… ]
| 选项 | 作用 |
|---|---|
| -a | 显示所有文件及目录(. 开头的隐藏文件也会列出) |
| -d | 只列出目录(不递归列出目录内的文件)。 |
| -l | 以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。 |
| -h | 友好化显示 |
| -r | 倒序显示文件和目录。 |
| -t | 将按照修改时间排序,最新的文件在最前面。 |
| -A | 同-a,但不列出"." (目前目录)及".."(父目录) |
| -F | 在列出的文件名称后加一符号;例如可执行档则加"*",目录则加"/" |
| -R | 递归显示目录中的所有文件和子目录。 |
文件类型
| 符号 | 文件类型 | 颜色 |
|---|---|---|
| - | 普通类型 | 黑色 |
| l | 连接 | 青色 |
| b | 磁盘 | 黄色 |
| c | 字符文件 | 黄色 |
| d | 目录 | 蓝色 |
| s | 套接字 | 紫色 |
| p | 管道 | 黄色 |
3.4 通配符
| 符号 | 效果 |
|---|---|
| ? | 匹配一个字符 f?.txt |
| * | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
| {1..10} | 1到10 |
| {a..z} | a b c ...z |
| {A..Z} | A B C .....Z |
| [123]([此处括号里值代表一个字符]) | 取其中之一有就显示没有也无所谓 |
| [a-z]单个小写字母 | 范围需要注意 |
| [0-9]单个数字 | 匹配数字范围(0123456789) |
| \ | 转义符,表示原来的意思 |
| [[:lower:]] | 小写字母表示 a-z |
| [[:upper:]] | 大写字母表示 A-Z |
| [^zhou] | 匹配列表中的所有字符以外的字符 |
| [[:digit:]] | 任意数字,相当于0-9 |
| [[:alpha:]] | 任意字母 |
3.5 alias 别名
语法:
alias 自定义别名 = '命令' //定义别名
unalias 自定义别名 //删除别名
\自定义别名 //显示原始命令
PS:绝对路径>别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)
3.6 du 查看当前文件夹磁盘大小
语法:
du [选项] [文件或目录… ]
| 选项 | 说明 |
|---|---|
| -a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
| -h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
| -s(--summarize) | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
| --max-depth=n (-d 1) | 最大显示到第n层 |
| --exclude | 不计入统计 |
4 创建文件夹
4.1 mkdir 创建目录
语法:
mkdir 选项 目录位置与名称
mkdir -p aa/bb/cc //递归创建
mkdir -pv /data/{1,2,3}/{a,b,c}
//可一次性建立多个文件
4.2 touch 创建文件
语法:
touch 新文件(可为空)
文件名不存在就是新建空文件,不会破坏已有文件,但会刷新文件时间
文件的三个时间戳
stat 文件 //查看文件的三种时间
| 选项 | 作用 |
|---|---|
| atime | access time 访问时间,读取文件内容 |
| mtime | modify time 修改时间,改变文件内容(数据) |
| ctime | change time 改变时间,元数据发生改变(元数据 文件大小 权限 ) |
4.3 ln 连接
语法:
//软连接
ln -s 绝对路径的源文件 软连接位置
//硬连接
ln 绝对路径源文件 硬连接位置
| 对比项 | 硬链接 | 软链接 |
|---|---|---|
| 本质 | 本质是同一个文件 | 本质不是同一个文件 |
| inode(身份证号) | 相同 | 不同 |
| 连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除,新建都不会改变 |
| 文件夹 | 不支持 | 支持 |
| 删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
| 文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
| 文件大小 | 和源文件相同(指向硬盘上的同一个文件) | 源文件的路径的长度 |
4.4 cp 复制
语法:
cp [选项] 源文件 目标路径
cp的目标路径 可以使用不同于原文件(文件夹)的名字,相当于另存为。
| 选项 | 说明 |
|---|---|
| -f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
| -i | 覆盖目标同名文件或目录时提醒用户确认 |
| -p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
| -r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
| -a | 完整保留所有的信息 |
| -v | 可视化 |
| -u | 相当于增备,差异备份(只对文件夹起作用) |
如果已有文件夹会生成子目录
cp -r /etc/ /opt/b //第一次复制并改名字
cp -r /etc/ /opt/b //第二次成为b的字目录
cp -r /etc/ /opt/b //第三次问是否覆盖
4.5 mv 移动
语法:
mv [选项] … 源文件或目录… 目标文件或目录 单个文件
| 选项 | 作用 |
|---|---|
| -f | 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖; |
| -i | 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项); |
| -n | 如果目标文件已经存在,则不会覆盖移动,而且不询问用户; |
| -v | 显示文件或目录的移动过程; |
4.6 rm 删除
语法:
rm [选项] 要删除的文件或目录
| 选项 | 作用 |
|---|---|
| -i | 删除前逐一询问确认。 |
| -f | 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 |
| -r | 将目录及以下之档案亦逐一删除。 |
删除特殊字符文件:
//删除以-开头的文件
rm -f ./-f
rm -- -f
删除文件后空间不释放: 有别人在使用 这个大文件 造成空间不释放
4.7 shred 安全删除
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件 语法:
shred [选项] 文件
| 选项 | 作用 |
|---|---|
| -z | 最后一次覆盖添加0,以隐藏覆盖操作 |
| -v | 能够显示操作进度 |
| -u | 覆盖后截断并删除文件 |
| -n # | 指定覆盖文件内容的次数(默认值是3次) |
5 查找文件
5.1 locate
语法:
locate [选项] 搜索目标
选项:
| 选项 | 作用 |
|---|---|
| -i | 不区分大小写的搜索 |
| -n N | 只列举前N个匹配项目 |
- locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
- 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
- 索引构建过程需要遍历整个根文件系统,很消耗资源
- locate和updatedb命令来自于mlocate包
5.2 find
语法:
find [查找路径] [选项] [查找条件] [处理动作]
常用选项:
| 查找类型 | 关键字 | 说明 |
|---|---|---|
| 按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 -iname "文件名称" 不区分大小写 |
| 按文件大小查找 | -size | 根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB |
| 按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 |
| 按文件类型查找 | -type | 根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等 |
| 按inode号 | -inum | 根据文件inode号查找 |
| 按权限查找 | -perm | 按文件权限查找 |
| 最大搜索目录深度 | -maxdepth level | 将你的文件已分级的形式查找 |
| 最小搜索目录深度 | -mindepth level | 同上 find /etc -maxdepth 2 -mindepth 2 |
根据属主、属组查找
- -user USERNAME #查找属主为指定用户(UID)的文件
- -group GRPNAME #查找属组为指定组(GID)的文件
- -uid UserID #查找属主为指定的UID号的文件
- -gid GroupID #查找属组为指定的GID号的文件
- -nouser #查找没有属主的文件 无主
- -nogroup #查找没有属组的文件
根据文件类型查找
-type TYPE
TYPE可以是以下形式:
- f: 普通文件
- d: 目录文件
- l: 符号链接文件
- s:套接字文件
- b: 块设备文件
- c: 字符设备文件
- p: 管道文件
组合条件
| 组合符号 | 作用 |
|---|---|
| -a | 与 |
| -o | 或 |
| -not 或者 ! | 非 |
根据时间戳
'#'以天为单位:
- -mtime [+|-]#
- -ctime [+|-]#
- -atime [+|-]#
PS: '# #'表示[#,#+1) 如#是3 3 到 4天
'+# #'表示[#+1,∞] 如#是3 代表 4天以上
'#'以分钟为单位:
- -amin [+|-]#
- -mmin [+|-]#
- -cmin [+|-]#
处理动作
| 处理动作 | 作用 |
|---|---|
| -print: | 默认的处理动作,显示至屏幕 |
| -ls: | 类似于对查找到的文件执行"ls -dils"命令格式输出 |
| -fls file: | 查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file |
| -delete: | 删除查找到的文件,慎用! |
| -ok COMMAND {} ; | 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认 |
| -exec COMMAND {} ; | 对查找到的每个文件执行由COMMAND指定的命令 |
| {}: | 用于引用查找到的文件名称自身 |
6 xargs 参数替换
命令格式:
somecommand |xargs -item command
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 选项
| 选项 | 作用 |
|---|---|
| -a file | 从文件中读入作为 stdin |
| -e flag | 注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。 |
| -p | 当每次执行一个argument的时候询问一次用户。 |
| -n num | 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。 |
| -t | 表示先打印命令,然后再执行。 |
| -i 或者是-I, | 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。 |
| -r no-run-if-empty | 当xargs的输入为空的时候则停止xargs,不用再去执行了。 |
| -s num | 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。 |
| -L num | 从标准输入一次读取 num 行送给 command 命令。 |
| -l | 同 -L。 |
| -d delim | 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。 |
| -x | exit的意思,主要是配合-s使用。。 |
| -P | 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。 |
7 which 查找命令
语法:
which 命令或程序名
在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。