Shell程序
- Linux系统中运行的一种特殊程序,为用户和内核间充当翻译。(内核:属于操作系统的一部分,调度硬件)
Shell将人类使用的高级语言翻译成二进制数交给内核,内核再调度硬件。 - 用户登录Linux系统时,会自动登录程序。
- Bash是Linux系统中默认使用的shell程序。文件位于/bin/bash。
Linux命令的分类
| 内部命令 | 外部命令 |
|---|---|
| 集成于Shell解释器程序程序内部的一些特殊指令,也称为内建指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
| 属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
| 没有单独对应的系统文件 | 每一个外部命令对应了一个系统中的文件 |
| 自动载入内存,可直接使用 | 必须知道其对应的文件位置由Shell加载后才能执行 |
执行命令地过程
Linux默认规定,命令放在指定的文件夹中,
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- 先判断是否是别名,再判断是内部命令,还是外部命令
- 如果是内部命令,直接在bash中执行
- 如果是外部命令,先看hash表,表中有就先找表,表中的路径找不到直接报错
- 表中没有,则去找
/usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /root/bin - 找到执行,找不到报错
(hash:linux系统下会有一个hash表,当你刚开机时这个hash表为空。当你执行过一条命令时,hash表会记录下这条命令的路径。再次使用该命令时,shell解释器首先会查看hash表。)
如何区分内部命令还是外部命令
type命令:区分内部还是外部
有的命令既是内部,也是外部,为了方便人们使用。
Bash: 有 echo
Sh:没有 echo
Echo十分常用,所以为了方便,内外都加入了。
Linux命令
Linux命令行格式
通用的命令行使用格式
命令字 [选项] [参数]
命令字:
- 是整条命令中最关键的一部分
- 唯一确定一条命令
选项:
- 短格式选项:使用“-”符号引导,后跟字母
- 长格式选项:使用“--”符号引导,后跟完整单词
(特:不加-,ip a(显示网卡信息),ps aux(进程详细信息))
参数:
- 命令字的处理对象
- 可以是文件名、目录(路径)名或用户名等内容
- 个数可以是0到多个
编辑Linux命令行的辅助操作
| 操作 | 作用 | |
|---|---|---|
| Tab | 按一次,只有一个选项就补全;按两次,将所有结果展示出来 | * |
| 上下键 | 查找之前打过的 命令 | * |
| Ctrl+l | 清屏 | * |
| Ctrl+c | 终止命令 | * |
| Ctrl+a | 光标跳到命令的最开头 | |
| Ctrl+e | 光标跳到命令的最末尾 | |
| Ctrl+u | 从光标处清空到开头 | |
| Ctrl+k | 从光标处清空到末尾 | |
| \ | 强制换行 |
获取命令帮助的方法
内部命令help
- 查看Shell内部命令的帮助信息
命令的“--help”选项
- 适用于大多数Linux外部命令
使用man命令阅读手册页
- 空格一页一页下翻
- 回车一行一行下翻
- 上下键可以翻看
- 按q退出阅读
- /查找,n往下,N向上
相关信息
[root@localhost ~]#
| 字段或符号 | 作用 |
|---|---|
| Root | 当前登录用户 |
| Localhost | 当前机器的主机名 |
| ~ | 目前在哪个文件夹下 |
| # | 代表超级管理员 |
| $ | 代表普通用户 |
pwd查看当前的工作目录
cd改变目录
绝对路径和相对路径:
- 绝对路径:以根目录开头的路径
- 相对路径:不以根目录开头的路径
相对路径的表现形式
| 表现形式 | 说明 | 示例 |
|---|---|---|
| 直接使用目录名或文件名 | 表示当前工作目录中的子目录、文件的位置 | grub.conf |
| 以一个点“.”开头 | 表示以当前的工作目录作为起点 | ./grub.conf |
| 以两个点“..”开头 | 表示以当前目录的上一级目录(父目录)作为起点 | ../vmlinuz |
| 以“~ 用户名”开头 | 表示以指定用户的宿主目录作为起点 | ~ teacher |
cd -:回到上一次所在目录(如果一直用此命令,则在两个目录间来回跳转)
cd ~:切换到当前用户的家目录
家目录:对当前用户个性化设置的文件夹(存放配置的文件)
超级管理员(root)和普通用户的家目录不一样
- root家目录:在/root(根目录下有一个root文件夹)
- 普通用户:在/home/和用户名同名的文件夹
ls显示目录内容
ls一般不单独使用:
- ls功能有限,要加上选项
- ls单独使用,显示当前文件夹所有文件(文件过多,可能会死机)
ls会配合通配符使用,过滤出需要的文件。
颜色表示的文件类型
不一定准确,可以更改
| 颜色 | 类型 |
|---|---|
| 黑色 | 数据文件、普通文件 |
| 绿色 | 可执行文件 |
| 黄色 | 块设备文件硬件设备(硬盘) |
| 红色 | 压缩包 |
| 蓝色 | 文件夹 |
| 天蓝色 | 连接文件 |
ls常用选项
| 选项 | 作用 | |
|---|---|---|
| -l或ll | 以长格式显示 | * |
| -a | 显示所有文件,包括隐藏文件,且包括 . 和 .. | * |
| -A | 显示所有文件,不包括隐藏文件,不包括 . 和 .. | |
| -d | 只显示本目录 | * |
| -R | 递归显示 | * |
| -h | 人性化显示(加了大小单位) | |
| -S | 以文件容量大小排序 | |
| --color | 显示颜色 | |
| -i | 显示inode号 |
-l 相关信息
首字符代表文件格式:
- d:代表目录
- -:普通文件
- l:连接文件(快捷方式)
- b:块设备(硬盘)
- s:套接字(带有IP地址和端口号)
- p:管道文件(文件单项传输)
- c:字符文件(单个字符,一个一个字符读取)
后九位为一字段:rwxr-xr-x;代表权限,三个一组(rwx;r-x;r-x),表示什么人能对它增删改查(3个对象)
3:连接数是3,(快捷方式)
root(前):这个文件属于root
root(后):这个文件属于root组
16:文件大小
7月 21 12:03:文件最后一次修改时间
anaconda-ks.cfg:文件或者目录名字
通配符
| 通配符 | 解释 |
|---|---|
| ? | 任意单个字符 |
| * | 任意长度的任意字符 |
| {1..10} | 1到10的10个数 |
| {a..z} | a b c..z |
| {A..Z} | A B C..Z |
| [123] | 取其中之一,有就显示,没有也无所谓 |
| [a-z] | a A b B...z(没有大Z) |
| [^a-c] | 反向匹配,不包括a A b...c |
| \ | 显示原来的意思 |
alias 设置别名
- 将常用的一些比较复杂的命令简单化
用法: alias 自行定义的命令='常用的复杂命令'(单引号''为英文版) - 单独使用 alias,会显示所有的别名命令
tips:别名>内部>hash>外部,先判断命令是不是别名,再看是不是内部命令,如果是别名直接执行。
删除别名:unalias 别名命令
du 统计目录及文件空间占用情况
用法:du [选项] [文件或目录...]
| 选项 | 作用 | |
|---|---|---|
| -a | 分开显示每个文件的大小 | * |
| -s | 显示当前文件夹的总大小 | * |
| -h | 人性化显示 | |
| -d 1 | 第一层文件夹占用的磁盘空间。-d代表目录层数;1代表目录层数的第一层 | * |
tips:
- du:不统计文件的实际大小,只是统计文件所占磁盘的大小。由于磁盘一块一块来存储文件,最小一块为4k。
- ls:显示文件实际大小
- du中-a和-s不能同时使用
- du把隐藏文件也统计在内
mkdir 创建新目录
| 选项 | 作用 |
|---|---|
| -p | 递归创建文件夹 |
| -v | 显示详细过程 |
touch 创建空文件
- 创建多个新的空文件
用法:touch 文件... - 更新文件的时间标记
连续的多文件创建。
ln 创建链接文件
用法:ln [-s] 源文件或目录... 链接文件或目标位置(加-s为软链接,不加为硬链接。一定要使用绝对路径)
| 对比项 | 软链接 | 硬链接 |
|---|---|---|
| 本质 | 不是同一个文件 | 是同一个文件 |
| indoe(相当于身份证号) | 不同 | 相同 |
| 链接数 | 删除、新建不会改变 | 创建新的硬链接会增加,删除会减少 |
| 文件夹 | 支持 | 不支持 |
| 删除源文件 | 无法访问连接文件 | 只是链接数减一,但链接访问不受影响 |
| 文件类型 | 链接文件和源文件无关 | 和源文件相同 |
| 文件大小 | 源文件的路径长度(名字取) | 和源文件相同(指向硬盘上的同一文件) |
cp 复制文件或目录
将需要复制的文件或目录(源)重建一份,并保存为新的文件或目录。
用法:cp [选项] 要复制的文件 要放置复制文件的位置/可以重命名(复制后的文件命名)
| 选项 | 作用 |
|---|---|
| -f | 有相同文件时强制覆盖不提醒 |
| -i | 有相同文件时覆盖提醒 |
| -p | 保留文件的源权限 |
| -r | 复制文件夹一定需要 |
| -a | 保留权限更强大,包括连接文件的属性也可以保留 |
复制文件夹一定要用-r
cp复制多个文件,最后一定要跟文件夹,不能跟文件。
rm 删除指定的文件或目录
常用选项:-f、-i、-r
mv 移动文件或目录
- 将指定文件或目录转移位置。(mv 文件名 要移动去的地方)
- 如果目标位置与原位置相同,则相当于执行重命名操作。(mv 文件名 新文件名)
which 找命令的位置
只能找命令的位置,范围:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
find 查找文件或目录
采用递归方式,根据目标的名称、类型等不同属性进行精细查找。(可查找隐藏文件)
- 优点:
- 默认递归查询
- 它是真的去硬盘上一个一个文件给你找(实时)
- 查找条件巨多
- 精确查找
- 缺点:慢
用法:find [查找范围] [查找条件表达式] [处理动作]
- 若不加范围,默认为当前目录。
- 若不加条件,默认找出指定路径下所有文件。
- 对符合条件的文件做操作,默认输出至屏幕。
常用查找条件类型
- -name 按名字查找。根据目标文件的名称进行查找,允许使用“ * ”及“ ? ”通配符。
- -size 按文件大小查找。根据目标文件的大小进行查找,一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件,常用的容量单位包括 kB(注意k是小写)、MB、GB
查找boot目录下大于1024k的文件
查找data目录下小于1M的文件
注意:文件大小不加加减号是一定的范围,单位越精确越好。
范围公式:单位前的数字减一。(1024-1,所以1023kb-1024kb;1-1,所以1字节-1MB)
- -user 按文件属主查找,根据文件是否属于目标用户进行查找。(属主:文件的拥有者)
- -type 按文件类型查找。文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等。
普通文件 -type f
目录 -type d
块设备文件 -type b
字符设备文件 -type c
- -inum 根据inode号查找。
- -maxdepth level、-mindepth level按照目录层级查找文件,前最大目录深度,后最小目录深度。
- -mtime 按天数查找文件。
[root@localhost data]#find /boot/ -mtime +7 -type f -size +1M -delete
(找到7天以上,且文件类型为普通文件,且大于1M的文件,并且加上处理动作删除)
- 处理动作
默认是:
1. print 输出屏幕让你看一下
2. ls 显示详细信息
3. delete 直接删除
4. ok 连接符,会询问
5. exec 连接符,不会询问
mv {} 代指前面find找到的文件,/mnt移动到的目录, \; 固定格式
- find命令实现多个查找条件
- -a表示而且and(find /boot -size +1024k -a -name "vm*")
- -o表示或者or(find /boot -size +1024k -o -name "vm*")