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