Linux基础命令、目录和文件管理
一、Linux基础命令
1.1什么是shell
shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。
命令执行过程:
判断是内部还是外部
如果是内部 直接执行
如果是外部
先去hash 缓存中找,找到运行,找不到报错
再去 规定好的路径中找文件 找到文件 直接运行,找不到报错
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin(5个中,只要找到一个就不会接着找了)
内部命令 | 外部命令 |
---|---|
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
1.2命令行格式
命令字 [选项] [参数]
快捷键 | 功能 |
---|---|
Tab 键 | 自动补齐(两次可以显示所有选项) |
反斜杠“\” | 强制换行或转义 |
Ctrl+e 或 end 键 | 光标移到最后 |
Ctrl+U | 清空至行首不包括当前光标处的 字符 |
Ctrl+K | 清空至行尾包括当前光标处的字符 |
Ctrl+a | 光标移到最前 |
Ctrl+w | 从当前光标删除到开头 |
ALT+d | 从当前光标删除末尾 |
Ctrl+l | 清屏 |
Ctrl+c | 取消本次命令编辑 |
Ctrl+s/Ctrl+q | 锁屏/解锁 |
向上下箭头 | 回看执行过的命令 |
1.3命令帮助
- help
help 内部命令
命令 --help
- man
man分九个章节默认打开第一章节
man 5 passwd
#查看passwd的配置文件
man man
区段1:用户指令
区段5:文件格式
1.4基础命令
1.4.1pwd
pwd
#显示当前路径
pwd -P
#显示文件的真实路径
1.4.2cd
cd 目标位置
相对路径,相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
绝对路径,绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
命令 | 效果 |
---|---|
cd cd ~ | 若不指定目标位置,切换到当前用户的宿主目录(家目录) |
cd - | 到前一次目录 |
一个点号“.”开头(自己) | 表示以当前的工作目录作为起点(已点开头的是) |
两个点号“..”开头(上一级) | 表示以当前目录的上一级目录(父目录)作为起点 |
“~用户名”形式开头 | 表示以指定用户的宿主目录(家目录)作为起点 |
"."开头文件 | 表示隐藏文件 |
~ky18 (有个用户叫ky18 家目录为起点) | 表示以指定用户的宿主目录作为起点 |
1.4.3ls
显示内容
ls [选项] [文件或目录]
-l 以长格式显示文件和目录列表 ll=ls -l
-a 显示全部包括隐藏文件
-A 显示全部文件或隐藏文件,但不包括 . 和..
-d 仅列出目录本身,而不是列出目录内的文件数据
-h 友好显示文件大小(human,人性化)
-R 递归显示该目录及该目录的子目录下的所有内容
-t 以时间顺序显示
-r 倒序显示
--color 显示颜色
-S 以文件容量大小排序
ls -a
#显示所有 包括隐藏文件
ls -A
#显示所有 不包括. ..的隐藏文件
ls -d
#只显示本目录
颜色表示的文件类型:
- 黑色数据文件 普通文件
- 绿色 可执行文件
- 黄色 块设备文件硬件设备(硬盘)
- 红色 压缩包
- 蓝色 文件夹
- 天蓝色 连接文件(快捷方式)
1.4.4alias
alias 命令别名=‘命令’
vim /etc/sysconfig/network-scripts/ifcfg-ens33
alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
unalias 命令别名
#删除别名
绝对路径>别名>内部>hash>外部命令
1.4.5du
查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K, 不满4K 按4k算。
du [选项] [文件或目录]
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s(--summarize) | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
--max-depth=n (-d 1) | 最大显示到第n层 |
--exclude | 不计入统计 |
1.4.6mkdir
创建文件夹
mkdir [选项] 文件夹
-p #递归创建
mkdir -p aaa/bbb/ccc
├── aaa
│ └── bbb
│ └── ccc
1.4.7touch
创建文件
touch 文件
touch 新文件(可为空) 文件名
#不存在就是新建空文件
touch 不会破坏已有文件
#刷新时间
1.4.8cp
cp [选项] 源文件 目标
#相当改名复制 文件夹 文件相当于改名字另存为
cp [选项] 源文件 文件夹
#多个源文件只能复制到文件夹
选项 | 说明 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
-a | 完整保留所有的信息 |
-v | 可视化 |
-u | 相当于增备,差异备份(只对文件夹起作用) |
1.4.9mv
mv [选项] 源文件或目录 目标文件或目录 单个文件
#移动,源文件或目录路径改变
#改名,源文件或目录路径不变
1.4.10rm
rm [选项] 要删除的文件或目录
-f、强制
-i、交互
-r 递归(删除目录需要)
1.4.11find
find [查找路径] [选项] [查找条件] [处理动作]
#查找路径:指定具体目标路径;不指定为默认为当前目录
#查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件
#处理动作:对符合条件的文件做操作,默认输出至屏幕(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 |
处理动作
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
例子
找到/var/log 文件夹下30天以前大于1G的以log结尾的普通文件移动到/opt下。
find /var/log -mtime +30 -size 1G -name '*.log' -type f -exec mv {} /opt \;
1.4.12which
which 命令
which ls
1.4.13通配符
符号 | 效果 |
---|---|
? | 匹配一个字符 f?.txt |
* | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
1到10 | |
a b c ...z | |
A B C .....Z | |
[123]([此处括号里值代表一个字符]) | 取其中之一有就显示没有也无所谓 |
[a-z]单个小写字母 | 范围需要注意 |
[0-9]单个数字 | 匹配数字范围(0123456789) |
\ | 转义符,表示原来的意思 |
[[:lower:]] | 小写字母表示 a-z |
[[:upper:]] | 大写字母表示 A-Z |
[^zhou] | 匹配列表中的所有字符以外的字符 |
[[:digit:]] | 任意数字,相当于0-9 |
[[:alpha:]] | 任意字母 |
1.4.14软连接硬链接
硬连接:同一个文件取不同的名或者叫多个名字不支持文件夹,创建一个连接数加一,多路径访问。
软连接:类似于windows里快捷方式,软连接,符号连接,会指向原来的文件。
#软连接
ln [-s] 源文件或目录 链接文件或目标位置
#硬连接
ln 源文件或目录 链接文件或目标位置
对比项 | 硬链接 | 软链接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode(身份证号) | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除,新建都不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同(指向硬盘上的同一个文件) | 源文件的路径的长度 |
二、Linux目录和文件管理
2.1目录
- 以 . 开头的文件均为隐藏文件
- 路径用/分开 / 不在第一位就是分隔符
- 文件名最长 255个字符
- 区分大小写 linux 注意事项
一级目录 | 功能(作用) |
---|---|
/bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设备文件保存位置 |
/etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
/lib/ | 系统调用的函数库保存位置(c语言 写的一些固定格式的代码,方便调用) |
/media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
/mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
/root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
/sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
2.2查看文件
2.2.1七类常见文件
第一个字符 | 文件类型 |
---|---|
- | 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。 |
d | 目录,类似 Windows 系统中的文件夹。 |
b | 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。 |
c | 字符设备文件,例如键盘、鼠标等。 |
s | 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。 |
p | 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。 |
l | 链接文件,类似 Windows 系统中的快捷方式。 |
2.2.2显示命令
2.2.2.1cat
cat [选项] 文件
-n 显示行号包括空行
-b 跳过空白行编号
-s 将所有的连续的多个空行替换为一个空行(压缩成一个空行)
-A 显示隐藏字符
cat a.txt > b.txt
#a的内容覆盖b的内容
cat a.txt >> b.txt
#a的内容放在b的末尾
#cat
cat a.txt
1 2 3 4 5
a b c d e
#tar
逆向显示文本内容
tar a.txt
a b c d e
1 2 3 4 5
#rev
将同一行的内容逆向显示
rev a.txt
5 4 3 2 1
e d c b a
2.2.3分页显示
2.2.3.1more
一页一页的显示
more [选项] 文件名
#空格下一页
#b上一页
#enter一行一行滚动
2.2.3.2less
和more类似,向上向下翻页
less [选项] 文件名
#Page Up 向上翻页,Page Down 向下翻页
2.2.4显示文件前后内容
2.2.4.1head
显示文件或标准输入的前面行
head [选项] [文件]
-c 数字 #指定获取前数字字节
-n 数字 #指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
-数字 #同上
head -n 10 文件
#显示文件前十行
head -n -10 文件
#显示除倒数十行的其他行
2.2.4.2tail
tail 和head 相反,查看文件或标准输入的倒数行
tail [选项] [文件]
-n 数字 #查看倒数行
-f 数字 #实时追踪最后十行
tail -n +k 文件
#从k行开始显示
2.2.4.3tr
基本功能转换
tr [选项] 被替换字符 [替换字符]
-d #删除
-s #压缩
2.2.4.4wc
统计列数
wc [选项] 目标文件
-I #统计行数
-w #统计单词个数
-c #统计字节数
#tab 空格 算单词的分隔符
2.2.4.5grep
过滤
grep [选项] 查找条件 目标文件
-i:查找时忽略大小写
-v:反向查找,输出与查找条件不相符的行
-o:只显示匹配项
-f:对比两个文件的相同行
-c:匹配的行数
- 要查找的字符串以双引号括起来单引号也可以
- “^……”表示以……开头,“……$”表示以……结尾
- “^$”表示空行
grep "^b" 文件名
#过滤以b开头
grep '/$' 文件名
#过滤以/结尾
grep -v "^$" 文件名
#过滤非空行
2.2.4.6paste
合并文件
cat user.txt pass.txt
lisi
liwu
liliu
123
345
444
paste user.txt pass.txt
lisi 123
liwu 345
liliu 444
paste -d: user.txt pass.txt
lisi:123
liwu:345
liliu:444
2.2.4.7split
分割文件
2.3压缩、解压缩
2.3.1压缩
gzip和bzip都是压缩软件
#压缩
gzip [-9] 文件名
bzip2 [-9] 文件名
9代表压缩比例,9最大1最小
#解压
gzip -d .gz格式的压缩文件
bzip2 -d .bz2格式的压缩文件
2.3.2归档
tar (tape archive)归档
tar [选项] 归档文件名 源文件或目录
tar [选项] 归档文件名 [-C目标文件]
#选项
-c:创建(Create).tar 格式的包文件
-x:解开.tar 格式的包文件
-C:解压时指定释放的目标文件夹
-f:表示使用归档文件(一般都要带上表示使用tar)
-p:打包时保留文件及目录的权限
-P:打包时保留文件及目录的绝对径
-t:列表查看包内的文件(要和f一起使用)
-v:输出详细信息(Verbose)
-j:调用 bzip2 程序进行压缩或解压
-z:调用 gzip 程序进行压缩或解压
#例子
tar -zcvf all.tar.gz -C /opt
#把all.tar.gz 文件解压到opt文件夹
tar -tf all.tar.gz
#在不解压的情况下,查看all.tar.gz文件里面的内容
2.4vi编辑器
2.4.1命令模式
此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
#退出
ZZ 保存退出
ZQ 不保存退出
#光标跳转
h: 左
L: 右
j: 下
k: 上
#G 或者扩展命令模式下
:# 跳转至由第#行
G 最后一行
1G, gg 第一行
#删除
dd 剪切光标所在的行
#dd 多行删除
D 从当前光标位置一直删除到行尾,等同于d$
#复制
yy 复制行
#yy 复制多行
Y 复制行
#粘贴
p 向下粘贴
P 向上粘贴
#撤销更改
u 撤销最近的更改
U 撤消光标落在这行后所有此行的更改
操作键 | 功能 |
---|---|
ctrl+f或者Pagedown | 向下翻页 |
ctrl+b或者Pageup | 向上翻页 |
Home;^;0 | 跳到本行的行首 |
按 End 键或$ | 跳转到本行的行尾 |
1G 或 gg | 跳转到文件的第一行包括空行 |
G | 跳转文件的末尾 |
#G | #代表行号数字,直接跳转到#行 |
M | 跳转到当前显示页面的中间行 |
x或delete | 删除当前光标的字符 |
dd | 删除一整行 |
#dd | 删除当前光标开始到第#行(包括当前行) |
d^ | 删除当前光标之前到行首 往前不包括当前光标处的字符 86 往后删除包括当前光标处的字符 |
d$ | 删除当前光标到行尾 |
dw | 删除当前光标处的单词 |
R 或shift+r | 替换当前光标处文字,会进入替换模式 |
yy | 复制当前光标处整行 |
#yy | 复制当前光标处向下的#行 |
p | 粘贴到光标处下一行 |
P | 粘贴到光标处上一行 |
u | 只消除上一次可多次使用 |
U | U 取消所有操作 |
/字符 | 向下查找 |
?字符 | 向上查找 |
n | 向同一方向重复上次的查找指令 |
N | 向相反方向重复上次的查找指定末行模式 |
2.4.2输入模式
使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc键即可返回命令模式。
-i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
-I 行首插入命令
-o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
-O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
-a 在当前光标所在位置之后插入随后输入的文本
-A 行尾插入命令
2.4.3末行模式
文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
#基础命令
# #具体第#行,例如2表示第2行
#,# #从左侧#表示起始行,到右侧#表示结尾行
#,+# #从左侧#表示的起始行,加上右侧#表示的行数,范例:2,+3 表示2到5行
. #当前行
$ #最后一行
.,$-1 #当前行到倒数第二行
% #全文, 相当于1,$
d #删除
y #复制
#另存为
w file #将范围内的行另存至指定文件中
r file #在指定位置插入指定文件中的所有内容
.! #将命令执行结果贴到当前光标处
#查找并替换
范围 s/要查找的内容/替换的内容/g
修饰符:
i #忽略大小写
g #全局替换,默认情况下,每一行只替换第一次出现
c #全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,如:#,@
#行号
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
#忽略字符大小写
启用:set ignorecase,简写 set ic
不忽略:set noic
#显示隐藏字符
显示Tab ^I和换行符 和$显示
启用:set list
禁用:set nolist
快捷键 | 功能效果 |
---|---|
:q | 退出不保存 |
:q! | 强制退出不保存 |
:w | 保存 |
:w 新文件名 | 另存为新文件: |
:wq :zz :x | 保存并退出 |
:e 其他文件名(如果已修改需要加e!) | 打开新文件进行编辑 |
:r 其他文件名 | 在当前文件中读入其他文件内容 |
!命令 | 执行命令 |
:r!命令 | 读入命令 |
: [替换范围] s /旧的内容/新的内容[/g] | |
😒 /old/new | 替换当前行中的第一个old改为new |
😒 /old/new/g | 替换当前行中的所有old改为new |
:#,# s /old/new/g | #到#行所有old改为new |
:%s /old/new/g | %代表全文 全文替换所有old改为new |
# d | 删除 第#行 |
#,# d | 删除#到#行 |
#,# y | 复制三到6 行 |
:set nu 或:set nonu | 加行号 不显示行号 |
:set cul (:set nocul ) | 光标所在行有下划线(取消) |
no hl | 取消高亮 |
:set ai | 对齐 回车后和上一行对齐 |
:set all 可以看所有的一些帮助 | 可以看所有的一些帮助 |
set key=password (大X) | 加密码 |
set key=空白 | 取消密码 |
set tabstop=4 (set ts=4) | tab 一次为四个空格 |
.!命令 (who,date ) | 将date命令插入当前行注意会覆盖当前行 |
2.4.4可视化模式
在末行有”-- VISUAL -- “指示,表示在可视化模式
- v 面向字符,-- VISUAL --
- V 面向整行,-- VISUAL LINE --
- ctrl-v 面向块,-- VISUAL BLOCK --
2.4.5vim配置文件定制化
Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。
/etc/.vimrc #全局
~/.vimrc #个人