目录
一、认识shell
1、什么是shell
2、命令的本质
3、内部命令和外部命令
4、hash缓存
5、命令执行的过程
6、如果打了一个命令,提示该命令不存在
7、命令提示符
8、Linux系统文件夹
二、Linux常用命令
1、通用Linux命令行格式
2、编辑Linux命令行的辅助操作
3、获得命令帮助
3.1内部命令:help
3.2外部命令:--help
3.3man(常见)
4、Linux七大文件属性
5、目录操作
5.1 pwd
5.2 cd
5.3 ls
5.3.1具体文件格式
5.3.2通配符
5.3.3设置别名-alias
5.4 du
5.5mkdir
6、文件操作
6.1 touch
6.2建立软硬链接文件
6.2.1硬链接介绍
6.2.2建立硬链接的通式
6.2.3软链接介绍
6.2.4建立软链接的通式
6.2.5软硬链接的区别
6.3 cp
6.4 mv
6.5 rm
6.6 shred
7、查找文件
7.1 which或whereis
7.2 locate
7.3 find
7.4 find和locate优缺点对比
其实就是一个程序,一串代码。而用一个程序得先安装这个程序
如ls命令由代码构成,执行的任务是显示当前文件夹中的所有文件=程序
shell 分为内部命令和外部命令,一般先执行内部命令,hash 再执行外部命令
内部命令 | 外部命令 |
---|---|
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
关闭:enable -n 内部命令
开启:enable 内部命令
外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时性的),可以加快读取速度。
如果将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉hash值之后 ,才可以继续使用
hash -d //单独删除缓存里某个的命令
hash -r //清空hash命令缓存
①首先判断是内部还是外部命令,如果是内部命令直接执行
②如果是外部命令,先看缓存空间是否有该外部命令,如果有按照hash缓存空间中的位置执行,如果缓存位置中没有直接报错
③如果是第一次执行外部命令,去看系统中规定的那五个特殊文件夹中是否有,有就直接执行,没有报错命令不存在
①该命令输写错误
②命令没有安装到Linux系统中
③命令不在规定的路径下
④运行过该命令,但是命令所在的位置发生了改变
#表示root用户登录
$表示的是普通用户
su - 用户名 //切换用户
命令提示符解析:
命令字 空格 [选项] 空格 [对象]
注:
命令字:
选项:
对象:
“;”号:可以在一行中隔开命令,执行多个命令
快捷键 | 功能 |
---|---|
Tab 键 | 自动补齐(两次可以显示所有选项) |
反斜杠“\” | 强制换行或转义 |
Ctrl+e 或 end 键 | 光标移到最后 |
Ctrl+U | 清空至行首不包括当前光标处的字符 |
Ctrl+K | 清空至行尾包括当前光标处的字符 |
Ctrl+a | 光标移到最前 |
Ctrl+w | 从当前光标删除到开头 |
ALT+d | 从当前光标删除末尾 |
Ctrl+l | 清屏 |
Ctrl+c | 取消本次命令编辑 |
Ctrl+s/Ctrl+q | 锁屏/解锁 |
向上下箭头 | 回看执行过的命令 |
格式说明(扩展)
CAPS或< >表示可变化的数据
...表示一个列表可加多个一个或多个
x|y|z 表示或的意思
-abc 是-a -b -c (有些命令选项有先后顺序) 多个 -abc 一般而言是没有顺序先后 (绝大多数是没有的,只有少数分先后
[root@localhost ~]# ls --help
[root@localhost dev]# useradd --help
man 1(可省略) 命令 //显示命令的用法
man 5 passwd //查看passwd文件的格式
man界面中如何查看?
字符 | 说明 |
---|---|
- | 普通文件文本文件,包括纯文本文件、二进制文件、各种压缩文件等 |
c | 字符设备文件,一次只能录入一个字符,比如键盘 |
b | 块设备文件,保存大块数据的设备,硬盘读写文件时是一整块一整块的读和写,比如最常见的硬盘 |
s | 套接字文件,根据ip和端口号传递信息,一般隐藏在 /var/run/ 目录下,用于进程间的网络通信 |
p | 管道文件,主要用于进程间通信单向传输 (| 表示管道) |
l | 符号软连接快捷方式 |
d | 目录文件 |
显示当前所在目录的完整路径
切换目录(文件夹)
cd ~/什么都不加 //表示当前用户的家目录
cd - //返回上一次的目录,但只有一次机会
注:
绝对路径 | 从根(/)开始描述文件的位置 | 有且唯一 | 无论在哪里都可以准确找到某一个文件 |
---|---|---|---|
相对路径 | 从当前路径开始描述文件的位置 | 有可能不唯一 | 如果参照物变了,就找不到文件 |
列表,显示当前文件夹下的所有文件
选项 | 说明 |
---|---|
-l | 长格式显示详细的文件信息 |
-d | 只显示文件夹的详细信息,不显示该文件夹下的文件信息 |
-a | 显示隐藏文件夹 |
-A | 显示隐藏文件夹,但不包括当前文件夹(.)和上个文件夹(..) |
-R | 递归显示 |
-r | 倒序显示 |
-t | 时间显示 |
-s | 按文件排序显示 |
-i | 显示文件的inode(相当于身份证号码)号 |
-h | 个性化显示,加单位 |
-color | 显示颜色,其中蓝色表示文件夹,黑色表示普通文件,红色表示压缩文件 |
ls -l //查看详细的文件信息
在生产环境一千万个文件的情况下,使用ls会卡死,需结合通配符使用
匹配文件的名字,通常用于ls命令中的选项
符号 | 效果 | |
---|---|---|
① | ? | 匹配一个字符 |
② | * | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
③ | {1..10} | 1到10 |
④ | {a..z} | a b c ...z |
⑤ | {A..Z} | A B C .....Z |
⑥ | [123] | 此处括号里值代表一个字符,取其中之一有就显示没有也无所谓 |
⑦ | [a-z] | 单个小写字母,范围需要注意 |
⑧ | [0-9] | 单个数字,匹配数字范围(0123456789) |
⑨ | \ | 转义符,表示原来的意思 |
⑩ | [^zhou] | 匹配列表中的所有字符以外的字符 |
⑪ | [[:lower:]] | 小写字母表示 a-z |
⑫ | [[:upper:]] | 大写字母表示 A-Z |
⑬ | [[:digit:]] | 任意数字,相当于[0-9] |
⑭ | [[:alpha:]] | 任意字母 |
②
③
④ ⑤
⑥
⑦
⑧
⑨
⑩
通过别名机制简化常用的、比较长的命令
通式:alias 自定义的命令=“原始命令”
alias //显示所有的别名
alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
//定义修改IP地址等信息的别名为myvim
unalias myvim //删除别名
查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K, 不满4K按4k算。
通式:du [选项] [文件或目录… ]
选项 | 说明 | |
---|---|---|
① | -a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
② | -h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
③ | -s | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
④ | --max-depth=n (-d 1) | 最大显示到第n层 |
⑤ | --exclude | 不计入统计 |
注:
a s无法同时使用
① ②
③
④文件夹是可以嵌套的,有的时候,我们只想展示第一级或第二级子文件夹的信息,而不希望 du 统计的层次太深,那么我们可以用 --max-depth(-d) 选项来进行控制
⑤
扩展:
ll命令与du命令都有查看文件大小的功能,为什么显示同一个文件的大小却不一样
ll //显示文件的真实大小
du //显示文件所占磁盘多少单元块,默认1单元块为4K, 不满4K按4k算,按每4k往上递增
创建文件夹
文件名最长255个字节
包括路径在内文件名称最长4095
除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
通式:mkdir [选项] 目录位置及名称…
命令 | 说明 |
---|---|
mkdir aa | 建立aa文件夹 |
mkdir aa bb cc | 一次性建立三个文件夹 |
mkdir -p | 递归建立文件夹 |
mkdir -v | 显示建立文件夹的过程 |
touch 新文件 //新建空文件
touch 已存在的文件 //不会破坏已有文件,刷新文件时间
每个文件有三个时间戳:
硬链接相当于源文件的别名,linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1
硬连接之间没有主次之分,删除某个硬链接,只是将其从目录的数据块中删除相关信息,并且文件链接数减一。不会从inode表中删除inode,除非只剩下一个链接数
ln 源文件(绝对路径) 目的位置
软链接又称符号链接,相当于windows上的快捷方式,软链接就是一个普通文件,只是数据块内容有点特殊,存储源文件的存储路径,并不存储原文件内容,通过这个方式可以快速定位到软连接所指向的源文件实体
软链接可对文件或目录创建。软链接和源文件使用不同的inode节点
ln -s 源文件(绝对路径) 目的位置
对比项 | 硬链接 | 软链接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode(相当于身份证号) | 和源文件相同 | 和源文件不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除,新建都不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同(指向硬盘上的同一个文件) | 源文件的路径的长度 |
复制文件或文件夹
通式:cp 选项 源文件 目标位置
选项 | 说明 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
-a | 完整保留所有的信息 |
-v | 可视化 |
-u | 相当于增备,差异备份(只对文件夹起作用) |
移动或改名文件及文件夹
通式:mv [选项] 源文件或目录 目标文件或目录 单个文件
选项 | 说明 |
---|---|
-f | 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖 |
-l | 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项) |
-n | 如果目标文件已经存在,则不会覆盖移动,而且不询问用户 |
-v | 显示文件或目录的移动过程 |
其他改名操作命令如rename:可批量改名但有一定的局限性(必须是同一后缀)
rename 旧字符 新字符 目标文件
删除的文件或目录
通式: rm 选项 文件名
选项 | 说明 |
---|---|
-f | 强制 |
-i | 交互 |
-r | 递归 |
安全地删除文件或目录(不可恢复)
不停地向磁盘内添加写入0,已覆盖原本内容的操作
通式: shred [OPTION]... FILE...
选项 | 说明 |
---|---|
-z | 最后一次覆盖添加0,以隐藏覆盖操作 |
-v | 能够显示操作进度 |
-u | 覆盖后截断并删除文件 |
-n | 指定覆盖文件内容的次数(默认值是3次) |
查找Linux外部命令文件
通式:which 文件名
whereis 文件名
查找文件或文件夹
通式:locate 选项 查找条件
选项 | 说明 |
---|---|
-i | 不区分大小写的搜索 |
-n N | 只列举前N个匹配项目 |
查找文件或文件夹
通式:find [查找路径] [OPTION] [查找条件] [处理动作]
查找类型 | 关键字 | 说明 |
---|---|---|
按名称查找 | -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 |
根据文件名和inode查找:
根据属主、属组查找:
-user USERNAME //查找属主为指定用户(UID)的文件
-group GRPNAME //查找属组为指定组(GID)的文件
-uid UserID //查找属主为指定的UID号的文件
-gid GroupID //查找属组为指定的GID号的文件
-nouser //查找没有属主的文件 无主
-nogroup //查找没有属组的文件
根据文件类型:
组合条件:
组合条件 | 说明 |
---|---|
-a | 与 |
-o | 或 |
-not | 非 |
根据文件大小查找:
处理动作:
处理动作 | 说明 |
---|---|
默认的处理动作,显示至屏幕 | |
-ls | 类似于对查找到的文件执行"ls -dils"命令格式输出 |
-fls file | 查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file |
-delete | 删除查找到的文件,慎用! |
-ok COMMAND {} \; | 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认 |
-exec COMMAND {} \; | 对查找到的每个文件执行由COMMAND指定的命令 |
拓展:查找30天以上超过1MB,以log结尾的普通文件,并移动到opt目录
find / -mtime +30 -size +1M -type f -name “*log” -exec mv {} /opt \;
locate | find | |
---|---|---|
优点 | 查找速度快 | 精确查找,实时查找,支持查找的功能多 |
缺点 | 不具备实时性,模糊查找不够精确,不是去磁盘查找而是去数据库中查找 | 相比较慢,在磁盘中一块一块地查找 |
命令一:echo "PS1='\[\e[1;34m\][\u@\h \W]#\[\e[0m\]'" >> ~/.bashrc
命令二:. ~/.bashrc