Linux基础命令

背景

最近在补Linux相关基础,看的书是《Linux命令行与Shell脚本大全》,内容只记录了自己不熟的地方,算是对以前知识的回顾。

内容

命令行操作

在命令行上操作,时常会因为输入错误而需要重新输入,此时如果删除重新来则会很不方便,可以通过以下方式:

1
2
# 直接重新开启一行输入行
Ctrl + C

在命令的使用过程中,最常用的莫过于man--help了,然而有时其输出内容之多,一屏幕显示不下,则此时可以:

1
2
3
4
5
6
7
8
# 向上滚动
Shift + PageUP

# 向下滚动
Shift + PageDOWN

# 向下翻页
空格键

有时命令行的输入内容很长,在输入的过程中发现一开始输错了,此时可以:

1
2
3
4
5
# 快速移动到行首
Ctrl + A

# 修改完以后,移动到行尾
Ctrl + E

有时候,需要退出时常用的是Exit,除此之外,也有快捷键

1
Ctrl + D

基本bash

常见的Bash命令,首推ls:

1
2
3
4
5
6
7
8
9
10
11
# 最常用
ls

# -R:遍历打印指定路径下的所有文件
ls -R [路径/文件]

# -F: 将文件、文件夹(加/)、可执行文件(加*)友好展示
ls -F [路径/文件]

# 然后就是三大常见: -lha
ls -lha [路径/文件]

然而这并不是它牛逼之处,它一个牛的地方就在于它这个路径/文件支持元字符过滤(这个适用于Linux中所有的指令):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# *:表示0个或多个字符
ls ru*.sh

# ?:表示一个字符
ls ru?.sh

# [字符]:指定字符
ls ru[ai].sh

# [范围]:范围过滤
ls ru[a-i].sh

# [!字符]:非字符过滤
ls ru[!a].sh

然后就是复制命令:cp,cp命令中有个遗忘的地方就是目录的复制。

1
2
# 递归复制整个目录的内容
cp -R [原目录] [复制目录]

在Windows中,有快捷方式和文件的概念,在Linux中也是类似的:软连接、硬连接,软连接相当于快捷方式,硬连接相当于复制文件。

1
2
3
4
5
# 创建软连接
ln -s [原文件] [最终文件]

# 创建硬连接
ln [源文件] [最终文件]

如果想查看文件的类型,则:

1
2
3
4
5
6
7
8
9
# 通过tree查看
tree

# 得到的结果带有 -> 指向的就是软连接
.
├── 1.27.4.tar.gz
└── shuai
├── wudashuai
└── wudashuai.sh -> run.sh

同样也可以通过文件的inode编号查看:

1
2
# Linux下给不同文件定的编号,一样则表示是同一个文件
ls -i [文件名]

如果对于一个文件,我们不确定其到底是什么类型的文件,则可以:

1
2
# file会打印出系统所知道的关于该文件的类型、运行平台等信息
file [文件夹/文件]

对于查看文件内容的命令,有:cat、more、less、tail、head,但是此处要讲的是cat命令中比较常用的两个参数

1
2
3
4
5
# -n:打印输出内容的所有行数
cat -n [文件名]

# -b:打印非空行的行数
cat -b [文件名]

更多命令

对于Linux而言,如果想查看进程管理器后台,可以通过ps查看,其中常用的参数

1
2
3
4
5
6
7
8
9
# -e:显示运行在系统上的进程
# -f:拓展一下输出的内容
ps -ef

# 同样还有此前学的-aux参数,a表示所有,u表示显示进程的详细状态,x表示显示没有终端的进程
ps -aux

# --forest:友好的展示各进程之间的关联关系, you can look look
ps --forest

然而ps只是打印了某一时刻的进程信息,如果需要实时查看则有tophtop两种方式,其中htop显示更加友好,但可能需要单独安装

1
2
top
htop

如果有某项进程服务需要结束,则可以通过kill的方式

1
2
# 杀死进程,-9表示将进程无条件退出,这里的数字都代表着系统发送给进程的信号 
kill -9 [进程ID]

kill只支持通过进程ID的方式杀死进程,当我们需要通过进程名杀死进程时,则可以使用killall命令

1
2
# 支持通配符方式,一杀一大片
killall nginx*

在linux中,任何磁盘都是通过挂载的方式纳入文件管理系统的,如果需要手动挂载某个磁盘到文件系统的指定路径下,则可以使用mount命令:

1
2
# -t:表示挂载磁盘的类型:vfat(windows长文件系统)、ntfs(win中常用的高级文件系统)、iso9660(CD-Rom文件系统)
mount -t [类型] [原设备路径] [文件系统下的映射路径]

如果需要卸载已挂载的磁盘,则可以使用umount

1
umount [磁盘路径/设备名]

如果该设备正在使用,则不允许卸载,此时可以通过lsof命令查看哪个进程在占用,然后将其kill掉即可

1
lsof [磁盘路径]

当需要查看当前系统下挂载的所有磁盘的使用情况的时候,则可以使用df:

1
2
# -h: 友好显示内容
df -h

那么如果需要查看指定路径下的文件夹占用大小呢?可以使用du

1
2
# -h: 友好显示内容
du -h

当我们需要对文件内容进行进行排序输出的时候,这个时候可以使用sort命令,sort默认将每行的数据当作字符来进行升序排序

1
sort [option] [文件名]

其中,option常用的有-b、-n、-M、-k、-t、-r:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -b:忽略每行开始的空字符
sort -b [文件名]

# -n:将每行的数据当作整数来排序
sort -n [文件名]

# -M:按月份排序,月份简写
sort -M [文件名]

# -k和-t是一对,-t指示间隔字符,-k指定第几个间隔,例如:
sort -t ":" -k 3 [文件名]

# -r:表示降序排列
sort -r [文件名]

当需要在文件中检索指定的数据的时候,就会用到grep、egrepegrep就相当于grep -e,grep中常用的参数有: -e、-v、-o、-i

1
2
3
4
5
# -e: 表示利用正则匹配,不过正则之中没有\w、\d之类的元字符,只有.、[]的方式
# -v:表示取反
# -o:表示取匹配的内容,而不是对应的行
# -i:表示匹配时不区分大小写
grep -evoi [正则] [文件名]

Linux下压缩文件的指令挺多的,如:zip、unzip、gzip、gunzip、tar,其中最重要的是tar

1
2
3
4
5
6
7
8
# gzip默认默认文件压缩后,会将原文件删除
gzip [文件]

# -r:表示递归压缩文件夹下的内容
gzip -r [路径]

# 解压的话
gunzip [文件]

对于zipunzip,则:

1
2
3
4
5
6
7
8
9
# -r:将指定路径下的文件和文件夹一并压缩
# -q:静默压缩
zip -r -q [压缩后的文件.zip] [目标文件]

# 解压
unzip [压缩包.zip]

# 压缩时显示详细的信息
zip -v [压缩包.zip] [文件名]

对于tar,则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -cvf:创建tar包,tar包本身没带压缩
tar -cvf [压缩.tar] [目标]

# -xvf:解压tar包
# -C:将文件解压到指定的路径下
tar -xvf [压缩包.tar] -C [指定路径下]

# -zcvf:创建gzip压缩的tar包
tar -zcvf [压缩包.tar.gz] [目标]

# -zxvf:解压gzip压缩的tar包
tar -zxvf [压缩包.tar.gz]

# -jcvf:创建bz2压缩的tar包
tar -jcvf [压缩包.tar.bz2] [目标]

# -jxvf:创建bz2压缩的tar包
tar -jxvf [压缩包.tar.bz2]

当然,对于tar压缩得到的包,如果想要查看其内部压缩的内容

1
2
3
# -t:表示打印出tar包中的内容
# -f:将内容输出到设备或者文件中
tar -tf [压缩包名]