Linux常用命令
Linux 基础
文件和目录
文件的组织
查看路径
pwd
显示当前目录的路径
which
查看命令的可执行文件所在路径, Linux
下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which
命令本身对应的程序也存在于 Linux
中。
总的来说一个命令就是一个可执行程序。
例如我的Ubuntu服务器中安装了MySQL,我想要查看MySQL的mysql命令的路径,则可以使用下面的方式:
浏览和切换目录
ls
列出文件和目录,它是 Linux
最常用的命令之一。
【常用参数】
-a
显示所有文件和目录包括隐藏的-l
显示详细列表-h
适合人类阅读的-t
按文件最近一次修改时间排序-i
显示文件的inode
(inode
是文件内容的标识)
ls -l
命令用于显示当前目录下的文件详细信息,等同于ll
命令
cd
cd
是英语 change directory
的缩写,表示切换目录。
1 |
|
「 注意 」 输入cd /ho + 单次 tab 键会自动补全路径 + 两次 tab 键会列出所有可能的目录列表。
du
列举目录大小信息。
【常用参数】
-h
适合人类阅读的;-a
同时列举出目录下文件的大小信息;-s
只显示总计大小,不显示具体信息。
浏览和创建文件
cat
一次性显示文件所有内容,更适合查看小的文件。
1 |
|
【常用参数】
-n
显示行号。
less
分页显示文件内容,更适合查看大的文件。
1 |
|
【快捷操作】
空格键:前进一页(一个屏幕);
b
键:后退一页;回车键:前进一行;
y
键:后退一行;上下键:回退或前进一行;
d
键:前进半页;u
键:后退半页;q
键:停止读取文件,中止less
命令;=
键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;h
键:显示帮助文档;/
键:进入搜索模式后,按n
键跳到一个符合项目,按N
键跳到上一个符合项目,同时也可以输入正则表达式匹配。
head
显示文件的开头几行(默认是 10 行)
1 |
|
【参数】
-n
指定行数head cloud-init.log -n 2
tail
显示文件的结尾几行(默认是 10 行)
1 |
|
【参数】
-n
指定行数tail cloud-init.log -n 2
-f
会每过 1 秒检查下文件是否有更新内容,也可以用-s
参数指定间隔时间tail -f -s 4 xxx.log
touch
创建一个文件
1 |
|
mkdir
创建一个目录
1 |
|
【常用参数】
-p
递归的创建目录结构mkdir -p one/two/three
文件的复制和移动
cp
拷贝文件和目录
1 |
|
1 |
|
1 |
|
1 |
|
【常用参数】
-r
递归的拷贝,常用来拷贝一整个目录
mv
移动(重命名)文件或目录,与 cp 命令用法相似。
1 |
|
1 |
|
1 |
|
1 |
|
文件的删除和链接
rm
删除文件和目录,由于 Linux
下没有回收站,一旦删除非常难恢复,因此 需要谨慎操作
1 |
|
1 |
|
【常用参数】
-i
向用户确认是否删除;-f
文件强制删除; 需要谨慎操作-r
递归删除文件夹,著名的删除操作rm -rf
。 需要谨慎操作
ln
英文 Link
的缩写,表示创建链接。
学习创建链接之前,首先要理解链接是什么,我们先来看看 Linux
的文件是如何存储的:
Linux
文件的存储方式分为 3 个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过 inode
标识绑定到文件内容。
Linux 下有两种链接类型:硬链接和软链接。
硬链接
使链接的两个文件共享同样文件内容,就是同样的 inode
,一旦文件 1 和文件 2 之间有了硬链接,那么修改任何一个文件,修改的都是同一块内容,它的缺点是,只能创建指向文件的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。
1 |
|
如果我们用 rm file1
来删除 file1
,对 file2
没有什么影响,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file1
与file2
后,它们共同指向的文件内容才会消失。
软链接
软链接就类似 windows
下快捷方式。
1 |
|
执行 ls -l
命名查看当前目录下文件的具体信息
1 |
|
其实 file2
只是 file1
的一个快捷方式,它指向的是 file1
,所以显示的是 file1
的内容,但其实 file2
的 inode
与 file1
并不相同。如果我们删除了 file2
的话, file1
是不会受影响的,但如果删除 file1
的话, file2
就会变成死链接,因为指向的文件不见了。
在Linux中,文件链接方式主要有两种:**硬链接(Hard Link)**和**符号链接(Symbolic Link,也叫软链接)**。它们都用于在文件系统中创建文件的引用,允许用户通过多个路径访问同一个文件。
来看看chatGPT对硬链接和软链接的解释:
- 硬链接(Hard Link)
硬链接是指在文件系统中为同一个文件创建一个新的目录项。硬链接和原始文件都是对同一数据块(inode)进行引用,硬链接与原始文件共享相同的inode号,所以它们是完全等同的。
特点:
- 硬链接指向同一个数据块,删除任何一个链接(包括原始文件)都不会影响另一个链接,只要有一个硬链接存在,文件的数据内容就不会被删除。
- 无法跨文件系统创建硬链接(即硬链接必须在同一个文件系统内)。
- 不支持目录(为了避免循环引用,除非是超级用户)。
命令:
1
ln <原始文件> <硬链接名称>
示例:
1
ln file.txt link_to_file.txt
- 符号链接(Symbolic Link,软链接)
符号链接是指一个文件包含指向另一个文件路径的特殊文件,它类似于Windows中的快捷方式。符号链接本质上是一个文本文件,保存着原始文件的路径。
特点:
- 符号链接包含对目标文件路径的引用,删除符号链接文件时不会影响原始文件,符号链接指向的文件如果被删除或移动,符号链接将变成“悬挂”的状态(即指向一个不存在的文件)。
- 可以跨文件系统创建符号链接。
- 符号链接可以指向目录或文件。
命令:
1
ln -s <原始文件> <符号链接名称>
示例:
1
ln -s /path/to/file.txt link_to_file.txt
总结:
- 硬链接:文件之间完全等同,操作系统看不到不同,删除一个不会影响另一个,无法跨文件系统,不能链接目录。
- 符号链接:文件之间有路径引用关系,符号链接可以跨文件系统并可以链接目录,但如果原始文件被删除,符号链接会失效。
用户和权限
自己创建的用户是有限权限的用户,这样大大提高了 Linux
系统的安全性,有效防止误操作或是病毒攻击,但是我们执行的某些命令需要更高权限时可以使用 sudo
命令。
sudo
以 root
身份运行命令
1 |
|
useradd + passwd
useradd
添加新用户passwd
修改用户密码
这两个命令需要 root
用户权限
1 |
|
userdel
删除用户,需要 root
用户权限
1 |
|
su
切换用户,需要 root
用户权限
1 |
|
群组的管理
Linux
中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。
groupadd
创建群组,用法和 useradd
类似。
1 |
|
groupdel
删除一个已存在的群组
1 |
|
groups
查看用户所在群组
1 |
|
usermod
用于修改用户的账户。
【常用参数】
-l
对用户重命名。需要注意的是/home
中的用户家目录的名字不会改变,需要手动修改。-g
修改用户所在的群组,例如usermod -g friends lion
修改lion
用户的群组为friends
。-G
一次性让用户添加多个群组,例如usermod -G friends,foo,bar lion
。-a
-G
会让你离开原先的群组,如果你不想这样做的话,就得再添加-a
参数,意味着append
追加的意思。
chgrp
用于修改文件的群组。
1 |
|
chown
改变文件的所有者,需要 root
身份才能运行。
1 |
|
【常用参数】
-R
递归设置子目录和子文件,chown -R lion:lion /home/frank
把frank
文件夹的用户和群组都改为lion
。
文件权限管理
chmod
修改访问权限。
1 |
|
【常用参数】
-R
可以递归地修改文件访问权限,例如chmod -R 777 /home/lion
修改权限的确简单,但是理解其深层次的意义才是更加重要的。下面我们来系统的学习Linux
的文件权限。
1 |
|
其中 drwxr-xr-x
表示文件或目录的权限。让我们一起来解读它具体代表什么?
d
:表示目录,就是说这是一个目录,普通文件是-
,链接是l
。r
:read
表示文件可读。w
:write
表示文件可写,一般有写的权限,就有删除的权限。x
:execute
表示文件可执行。-
:表示没有相应权限。
权限的整体是按用户来划分的,如下图所示:
现在再来理解这句权限 drwxr-xr-x
的意思:
它是一个文件夹;
它的所有者具有:读、写、执行权限;
它的群组用户具有:读、执行的权限,没有写的权限;
它的其它用户具有:读、执行的权限,没有写的权限。
现在理解了权限,我们使用 chmod
来尝试修改权限。chmod
它不需要是 root
用户才能运行的,只要你是此文件所有者,就可以用 chmod
来修改文件的访问权限。
数字分配权限
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
因此要改变权限,只要做一些简单的加法就行:
1 |
|
用字母来分配权限
u
:user
的缩写,用户的意思,表示所有者。g
:group
的缩写,群组的意思,表示群组用户。o
:other
的缩写,其它的意思,表示其它用户。a
:all
的缩写,所有的意思,表示所有用户。+
:加号,表示添加权限。-
:减号,表示去除权限。=
:等于号,表示分配权限。
1 |
|
查找文件
locate
搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。
安装 locate
1 |
|
「注意」locate
命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行 updatedb
命令去更新数据库。
find
用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。
1 |
|
何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
做什么:找到文件后,可以进行后续处理,如果不指定这个参数,
find
命令只会显示找到的文件。
根据文件名查找
1 |
|
「注意」 find
命令只会查找完全符合 “何物” 字符串的文件,而 locate
会查找所有包含关键字的文件。
根据文件大小查找
1 |
|
根据文件最近访问时间查找
1 |
|
仅查找目录或文件
1 |
|
操作查找结果
1 |
|
软件仓库
Linux
下软件是以包的形式存在,一个软件包其实就是软件的所有文件的压缩包,是二进制的形式,包含了安装软件的所有指令。Red Hat
家族的软件包后缀名一般为 .rpm
,Debian
家族的软件包后缀是 .deb
。
Linux
的包都存在一个仓库,叫做软件仓库,它可以使用 yum
来管理软件包, yum
是 CentOS
中默认的包管理工具,适用于 Red Hat
一族。可以理解成 Node.js
的 npm
。
yum 常用命令
yum update | yum upgrade
更新软件包yum search xxx
搜索相应的软件包yum install xxx
安装软件包yum remove xxx
删除软件包
切换 CentOS 软件源
有时候 CentOS
默认的 yum
源不一定是国内镜像,导致 yum
在线安装及更新速度不是很理想。这时候需要将 yum
源设置为国内镜像站点。国内主要开源的镜像站点是网易和阿里云。
1、首先备份系统自带 yum
源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载阿里云的 yum
源配置文件到 /etc/yum.repos.d/CentOS7
1 |
|
3、生成缓存
1 |
|
阅读手册
man
安装更新 man
1 |
|
man 手册种类
可执行程序或
Shell
命令;系统调用(
Linux
内核提供的函数);库调用(程序库中的函数);
文件(例如
/etc/passwd
);特殊文件(通常在
/dev
下);游戏;
杂项(
man(7)
,groff(7)
);系统管理命令(通常只能被
root
用户使用);内核子程序。
man + 数字 + 命令
输入 man + 数字 + 命令 / 函数,可以查到相关的命令和函数,若不加数字, man
默认从数字较小的手册中寻找相关命令和函数
1 |
|
man 手册核心区域解析:(以 man pwd
为例)
1 |
|
help
man
命令像新华词典一样可以查询到命令或函数的详细信息,但其实我们还有更加快捷的方式去查询, command --help
或 command -h
,它没有 man
命令显示的那么详细,但是它更加易于阅读。
个人常用的中文版Linux命令搜索引擎:Linux命令搜索引擎