Linux 命令入门
本文对常见的 Linux 命令进行介绍。
文件目录操作
pwd(查看当前工作目录)
☕️ 命令:pwd
⭐️ 例子:
# 查看当前工作目录的绝对路径
[root@localhost ~]# pwd
/root
cd(更改当前工作目录)
☕️ 命令:cd dirName
,目录路径名可以是绝对路径,也可以是相对路径
⭐️ 例子:
# 将当前工作目录更改为 /usr/bin(绝对路径,以根目录开始)
[root@localhost ~]# cd /usr/bin
[root@localhost bin]# pwd
/usr/bin
# 相对路径,"." 代表当前工作目录,".." 代表当前工作目录的上级目录
[root@localhost bin]# cd ..
[root@localhost usr]# pwd
/usr
[root@localhost usr]# cd ./bin
[root@localhost bin]# pwd
/usr/bin
# 在太多数情况下,可以忽略 "./",因为这部分是隐含的
[root@localhost usr]# cd bin
[root@localhost bin]# pwd
/usr/bin
# 一些常用的便捷写法
# 将当前工作目录更改为用户主目录
cd
# 将当前工作目录切换回前一个工作目录
cd -
# 将当前工作目录更改为 user_name 的主目录,例如 cd ~bob
cd ~user_name
ls(列出目录内容)
☕️ 命令:ls [options][dirName]
,显示指定工作目录下之内容(列出工作目录所含的文件及子目录)
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-a |
列出所有文件,包括隐藏文件(以点号开头的文件,默认不列出) |
-d |
仅列出目录本身,而不是列出目录的文件数据 |
-l |
使用长格式显示结果 |
-r |
以相反的顺序显示结果。通常,ls 命令按照字母升序排列显示结果 |
-S |
按文件大小对结果排序显示 |
-t |
按修改时间排序显示 |
-R |
以递归的方式遍历目录的文件,并依序列出 |
✏️ 例子:
# 列出当前工作目录下的所有文件和目录
[root@localhost ~]# ls -la
total 28
dr-xr-x---. 4 root root 160 Apr 24 09:51 .
dr-xr-xr-x. 17 root root 224 Apr 23 03:36 ..
-rw-------. 1 root root 1222 Apr 23 03:37 anaconda-ks.cfg
-rw-------. 1 root root 2607 Apr 24 09:57 .bash_history
-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc
drwxr-xr-x. 4 root root 30 Apr 24 09:51 mysql
drwxr-----. 3 root root 19 Apr 24 03:02 .pki
-rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc
less(查看文件内容)
☕️ 命令:less fileName
⭐️ 常用可选项:
名称 | 描述 |
---|---|
上翻页键(Page Up)或b |
后翻一页 |
下翻页键(Page Down)或空格 | 前翻一页 |
上方向键 | 向后一行 |
下方向键 | 向前一行 |
G |
移动到文本文件末尾 |
1G 或g |
移动到文本文件开头 |
/characters |
向前搜索指定的字符串 |
n |
重复上一次搜索 |
q |
退出 less 命令 |
✏️ 例子:
# 查看 /etc/passwd 文件内容
[root@localhost ~]# less /etc/passwd
mkdir(创建目录)
☕️ 命令:mkdir [options] dir...
,此处dir...
表示一个或多个目录,后续...
都表示一个或多个
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-p |
确保所创建的目录的路径存在,不存在的就建一个 |
✏️ 例子:
# 创建单个目录
mkdir dir1
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建多级目录,如果 /d1/d2 路径存在,直接在该路径下创建目录;如果不存在,先创建 /d1/d2 目录
mkdir -p /d1/d2/d3
cp(复制文件或目录)
☕️ 命令:cp [options] source dest
或者cp [options] item... dir
- 第一种命令将单个文件(或目录) source 复制到文件(或目录) dest 中
- 第二种命令将多个文件(或目录)复制进目录 dir 中
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-a |
在复制目录时使用,它会保留链接、文件属性,并复制目录下的所有内容,相当于-dpr |
-d |
复制时保留链接,这里链接相当于 Windows 的快捷方式 |
-f |
覆盖已经存在的目标文件时,不给出提示 |
-i |
与-f 相反,在覆盖目标文件之前给出提示确认,回答 y 时目标文件将被覆盖 |
-p |
除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 |
-r |
递归复制目录及其内容,复制目录时需要该选项(或-a 选项) |
-u |
当源文件比目标文件新或者目标文件不存在时,才执行复制操作 |
✏️ 例子:
# 将 file1 复制到 file2,如果 file2 存在,则会被 file1 的内容覆盖;如果 file2 不存在,则创建 file2
cp file1 file2
# 将 file1 和 file2 复制到目录 dir1,dir1 必须已经存在
cp file1 file2 dir1
# 使用通配符,将 dir1 中的所有文件复制到 dir2 中,dir2 必须已经存在
cp dir1/* dir2
# 将 dir1 复制到 dir2 目录中,如果 dir2 不存在,则会创建 dir2
cp -r dir1 dir2
mv(移动或重命名文件和目录)
☕️ 命令:mv [options] source dest
或者mv [options] item... dir
- 第一种命令将文件(或目录) source 移动(或重命名)为 dest
- 第二种命令将多个文件(或目录)移动到目录 dir 中
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-b |
当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份 |
-f |
如果指定源文件与目标文件同名,会直接覆盖目标文件,不会给出提示 |
-i |
与-f 相反,在覆盖目标文件之前给出提示确认,回答 y 时目标文件将被覆盖 |
-n |
不要覆盖任何已存在的文件或目录 |
-u |
当源文件比目标文件新或者目标文件不存在时,才执行移动操作 |
✏️ 例子:
# 将 file1 重命名为 file2
mv file1 file2
# 将 file1 和 file2 移动到目录 dir1 中,dir1 必须已经存在
mv file1 file2 dir1
# 使用通配符,将 dir1 中的所有文件移动到 dir2 中,dir2 必须已经存在
mv dir1/* dir2
# 如果 dir2 已存在,则 dir1 移动到 dir2 中;如果不存在,则 dir1 重命名为 dir2
mv dir1 dir2
rm(删除文件或目录)
☕️ 命令:rm [options] item...
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-i |
删除一个已存在的文件前,会进行提示确认,回答 y 时才删除 |
-f |
即使原文件属性设为只读,也可以直接删除,没有提示确认 |
-r |
递归删除目录及其内容 |
✏️ 例子:
# 删除 file1
rm -f file1
# 删除 dir1 中的所有内容
rm -rf dir1/*
# 删除 dir1 和 dir2
rm -rf dir1 dir2
# 删除当前目录中以 .html 为后缀的文件
rm -f *.html
ln(创建硬/软链接)
# 创建硬链接。硬链接和文件本身没有什么区别,只能引用文件,无法引用目录
ln file1 linkName
# 创建软链接,这里 item 可以是文件,也可以是目录。软链接类似于 Windows 的快捷方式
ln -s item linkName
which(显示可执行文件位置)
# 显示指令 "bash" 的可执行文件位置
[root@localhost ~]# which bash
/usr/bin/bash
I/O 重定向
>(标准输出重定向)
秉承着”万物皆文件“的 UNIX 主旨,终端程序(例如ls
命令)从stdin
(标准输入)中获取输入,将运行结果和状态消息分别发送给stdout
(标准输出)和stdeer
(标准错误)。通常来说,标准输入与键盘相关联,标准输出和标准错误与终端屏幕相关联,不会保存为磁盘文件。I/O
重定向允许我们对输入的来源和输出的去处进行修改。
默认情况下,标准输出会显示在终端屏幕上,>
操作符可以把标准输出重定向到一个文件中。
# 将 ls 命令的输出重定向到 ls-output.txt 文件中
[root@localhost ~]# ls -l /usr/bin > ls-output.txt
[root@localhost ~]# less ls-output.txt
total 348636
-rwxr-xr-x. 1 root root 41488 Nov 16 2020 [
-rwxr-xr-x. 1 root root 29104 Nov 1 2021 addr2line
-rwxr-xr-x. 1 root root 29 Nov 24 11:33 alias
...
ls-output.txt
# ">" 的输出重定向会覆盖文件,所以可以使用 ">" 清空文件或者创建一个新的空文件
> ls-output.txt
# ">" 的输出重定向会覆盖文件,可以使用 ">>" 实现追加方式的写操作
ls -l /usr/bin >> ls-output.txt
2>(标准错误重定向)
在 Shell 内部,分别使用文件描述符 0、1 和 2 来引用标准输入、标准输出和标准错误,所以可以用2>
重定向标准错误:
# 重定向标准错误到 ls-error.txt 文件中
ls -l /usr/bin 2> ls-error.txt
# 同时重定向标准错误和标准输出到 ls-output.txt 文件中
ls -l /usr/bin &> ls-output.txt
# &> 是覆盖方式写,&>> 是追加方式写
ls -l /usr/bin &>> ls-ouput.txt
# 下列命令可以丢弃错误消息,/dev/null 能够接收输入结果但不做任何处理
ls -l /usr/bin 2> /dev/null
cat(拼接文件)
☕️ 命令:cat fileName...
,读取一个或多个文件,并把它们写入到标准输出
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-n |
由 1 开始对所有输出的行数编号 |
-b |
和-n 相似,只不过对于空白行不编号 |
-s |
当遇到有连续两行以上的空白行,就代换为一行的空白行 |
✏️ 例子:
# cat 命令能够以不分页的形式将指定文本内容写入到标准输出中
[root@localhost ~]# cat ls-output.txt
...
-rwxr-xr-x. 1 root root 41488 Nov 16 2020 [
-rwxr-xr-x. 1 root root 29104 Nov 1 2021 addr2line
-rwxr-xr-x. 1 root root 29 Nov 24 11:33 alias
...
# 如果 cat 命令不指定参数,会从标准输入中读取数据,并写入到标准输出中
# 第一行 hello world 是标准输入(从键盘输入),第二行 hello world 是标准输出
# 通过 Ctrl-D 组合键可以告诉 cat 命令已经到达了标准输入的 EOF
[root@localhost ~]# cat
hello world
hello world
# 可以通过重定向标准输出,创建短小的文本内容,文本内容为标准输入中数据
[root@localhost ~]# cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.
[root@localhost ~]# cat lazy_dog.txt
The quick brown fox jumped over the lazy dog.
# cat 命令能够接收多个文件,并将这些文件拼接到一个文件中
# 例如:有多个文件 movie.mpeg.001 movie.mpeg.002 ... movie.mpeg.099
# 下列命令将上述文件拼接到文件到 movie.mpeg 中
cat movie.mpeg.0* > movie.mpeg
# 把 file1 的文本内容加上行号后输入到 file2 中
cat -n file1 > file2
# 清空 file1 文本内容
cat /dev/null > file1
| 管道
☕️ 命令:command1 | command2
,管道操作符|
可以将一个命令的标准输出传递给另一个命令的标准输入
⭐️ 例子:
# 通过管道使用 less 命令将输出结果逐页显示
[root@localhost ~]# ls -l /usr/bin | less
total 348636
-rwxr-xr-x. 1 root root 41488 Nov 16 2020 [
-rwxr-xr-x. 1 root root 29104 Nov 1 2021 addr2line
-rwxr-xr-x. 1 root root 29 Nov 24 11:33 alias
...
sort(排序文本行)
☕️ 命令:sort fileName
,将文本中的内容加以排序,并将结果写入到标准输出
⭐️ 例子:
# 对 ls-output.txt 文本中的内容进行排序
[root@localhost ~]# sort ls-output.txt
lrwxrwxrwx. 1 root root 10 Apr 23 04:03 bashbug -> bashbug-64
lrwxrwxrwx. 1 root root 11 Apr 23 04:03 systemd-coredumpctl -> coredumpctl
lrwxrwxrwx. 1 root root 11 Apr 24 03:03 audit2why -> audit2allow
...
# 将 /bin 和 /usr/bin 目录下所有可执行文件合并成一个列表,然后排序,并将结果逐页显示
[root@localhost ~]# ls /bin /usr/bin | sort | less
[
[
addr2line
addr2line
alias
alias
apropos
apropos
...
uniq(忽略重复行)
☕️ 命令:uniq [options] fileName
,将文本中的内容加以排序,并将结果写入到标准输出
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-d |
仅显示重复出现的行列 |
✏️ 例子:
# uniq 删除文本中重复出现的行列,前提是该文本是有序排列,所以一般与 sort 命令结合使用
[root@localhost ~]# uniq test.txt
1
2
1
[root@localhost ~]# sort test.txt | uniq
1
2
# uniq 会删除一个有序的数据列表中的所有重复行
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | less
[
addr2line
alias
apropos
...
# 如果想查看有哪些重复行,使用 uniq 命令的 -d 选项
ls /bin /usr/bin | sort | uniq -d | less
wc(统计行数、单词数和字节数)
☕️ 命令:wc [options] fileName
,计算文件中的行数、单词数和字节数,并将结果写入到标准输出
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-l |
显示行数(lines) |
-w |
显示单词数 |
-c |
显示字节数(chars) |
✏️ 例子:
# 前三个数字分别表示行数、单词数和字节数
[root@localhost ~]# wc test.txt
3 3 6 test.txt
# 统计行数
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | wc -l
801
grep(输出模式匹配的行)
☕️ 命令:grep [options] pattern item
,查找文件或者目录中符合条件的行,并将结果写入到标准输出
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-r |
当指定要查找的是目录而非文件时,必须使用该参数 |
-i |
匹配的时候忽略大小写(默认区分大小写) |
-v |
显示不包含匹配文本的所有行 |
✏️ 例子:
# 寻找 ls-ouput.txt 文件中包含 "zip" 的行
[root@localhost ~]# grep zip ls-output.txt
-rwxr-xr-x. 1 root root 3307 Jul 13 2018 gpg-zip
-rwxr-xr-x. 1 root root 2253 Apr 10 2018 gunzip
-rwxr-xr-x. 1 root root 100800 Apr 10 2018 gzip
# 如果想寻找目录下所有文件中包含 "zip" 的行,使用 grep 命令的 -r 选项
[root@localhost ~]# grep -r zip /usr/bin
Binary file /usr/bin/iconv matches
/usr/bin/xzdiff:# specified via XZ_OPT. With gzip, bzip2, and lzop it's OK to just unset the
/usr/bin/xzdiff: xz1=bzip2;;
...
# 寻找包含 zip 的所有文件
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | grep zip
gpg-zip
gunzip
gzip
head/tail(输出文件的开头/结尾)
☕️ 命令:head/tail [options] fileName
,查看文件的开头/结尾部分的内容,并将结果写入到标准输出
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-n |
显示的行数,默认为 10 行 |
✏️ 例子:
# 输出文件的前 5 行
[root@localhost ~]# head -n 5 ls-output.txt
total 348636
-rwxr-xr-x. 1 root root 41488 Nov 16 2020 [
-rwxr-xr-x. 1 root root 29104 Nov 1 2021 addr2line
-rwxr-xr-x. 1 root root 29 Nov 24 11:33 alias
lrwxrwxrwx. 1 root root 6 Apr 23 03:33 apropos -> whatis
# 输出结果的后 5 行
[root@localhost ~]# ls /usr/bin | tail -n 5
zgrep
zless
zmore
znew
zsoelim
tee(读取标准输入并同时写入标准输出和文件)
☕️ 命令:tee [options] fileName...
,从标准输入读取内容,并把它们写入到标准输出和其它文件中
⭐️ 常用可选项:
名称 | 描述 |
---|---|
-a |
以追加方式写入文件,而不是覆盖 |
✏️ 例子:
# 第一行 hello world 是标准输入(从键盘输入),第二行 hello world 是标准输出
[root@localhost ~]# tee output.txt
hello world
hello world
[root@localhost ~]# cat output.txt
hello world
# 将结果写入 output.txt,并使用 grep 过滤标准输出的内容
[root@localhost ~]# ls /usr/bin | tee output.txt | grep zip
gpg-zip
gunzip
gzip
权限操作
chmod(修改文件权限)
文件和目录的访问权限是按照读取、写入和执行来定义的,可以通过ls
命令来查看:
[root@localhost ~]# > foo.txt
[root@localhost ~]# ls -l foo.txt
-rw-r--r--. 1 root root 0 May 8 04:42 foo.txt
列表项的前 10 个字符是文件属性,第 1 个字符是文件类型,其中-
表示普通文件,d
表示目录;剩下 9 个字符是文件模式,分别代表文件属主、文件属组、其他用户的读取、写入和执行权限,其中r
表示读取权限,w
表示写入权限,x
表示执行权限。
chmod
命令可以修改文件或目录的权限,修改方式一般采用八进制表示法,每个八进制数可以描述 3 个二进制位,正好和文件的三种权限对应,例如:7(rwx)
、6(rw-)
、5(r-x)
、4(r--)
,0(---)
。
# 如果修改的文件的属主不是当前用户,需要超级用户权限
[root@localhost ~]# chmod 600 foo.txt
[root@localhost ~]# ls -l foo.txt
-rw-------. 1 root root 0 May 8 04:42 foo.txt
chown(更改文件属主和属组)
☕️ 命令:chown [owner][:[group]] fileName...
,该命令需要超级用户权限
⭐️ 例子:
# 将文件 file1 所有权由当前属主更改为用户 bob
chown bob file1
# 将文件 file1 所有权由当前属主更改为用户 bob,将文件属组更改为 users 组
chown bob:users file1
# 将文件 file1 属组更改为 admins 组,文件属主不变
chown :admins file1
# 将文件 file1 所有权由当前属主更改为用户 bob,将文件属组更改为用户 bob 的登录组
chown bob: file1
passwd(修改密码)
☕️ 命令:passwd [user]
,修改当前用户的密码(如果拥有超级用户权限,也可以为其他用户设置密)
⭐️ 例子:
# 修改当前用户的密码
[root@localhost ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
su(切换用户)
☕️ 命令:su [-] [user]
⭐️ 常用可选项:
名称 | 描述 |
---|---|
- |
使用该选项,切换用户后的工作目录会更改为 user 的主目录 |
user |
指定切换的用户名称,默认为超级用户 root |
✏️ 例子:
# 不使用 "-" 选项,切换用户后,不改变工作目录
[me@localhost ~]$ pwd
/home/me
[me@localhost ~]$ su
Password:
[root@localhost me]# pwd
/home/me
# 使用 "-" 选项,切换用户后,工作目录会更改为 user 的主目录
[me@localhost ~]$ pwd
/home/me
[me@localhost ~]$ su -
Password:
[root@localhost ~]# pwd
/root
sudo(以其他用户身份执行命令)
# 以超级用户 root 的权限执行命令
[me@localhost ~]$ sudo backup_script
Password:
System Backup Starting...
解压缩操作
gzip/gunzip
# 需要注意,gzip/gunzip 进行压缩或者解压缩操作时,会删除原始文件或者原始压缩包(其它几种方式不会)
# 压缩,压缩包会使用原始的文件名加上 .gz 进行命名
[root@localhost ~]# gzip test.txt
[root@localhost ~]# ls
test.txt.gz
# 解压缩,将 test.txt.gz 解压出来
[root@localhost ~]# gunzip test.txt.gz
[root@localhost ~]# ls
test.txt
zip/unzip
☕️ 命令:zip/unzip [options] item
⭐️ 可选项:
名称 | 描述 |
---|---|
-r |
zip 指令选项,压缩目录时需要加上该选项 |
-d |
unzip 指令选项,指定文件解压后存放的路径(必须存在) |
✏️ 例子:
# 压缩,将 test 目录压缩为 test.zip,压缩包后缀为 .zip
[root@localhost ~]# zip -r test.zip test
adding: test/ (stored 0%)
# 解压缩,将 test.zip 解压到当前路径
[root@localhost ~]# unzip test.zip
Archive: test.zip
# 解压缩,将 test.zip 解压到指定路径下
[root@localhost ~]# mkdir temp
[root@localhost ~]# unzip -d ./temp test.zip
Archive: test.zip
creating: ./temp/test/
tar
☕️ 命令:tar [options] item...
⭐️ 可选项:
名称 | 描述 |
---|---|
-c |
产生.tar.gz 文件 |
-v |
显示详细信息 |
-f |
指定压缩后的文件名 |
-z |
打包的同时压缩 |
-x |
解压.tar.gz 文件 |
-C |
指定文件解压后存放的路径(必须存在) |
✏️ 例子:
# 将 test1.txt 和 test2.txt 压缩到 test.tar.gz 文件中,压缩包后缀为 .tar.gz
[root@localhost ~]# tar -zcvf test.tar.gz test1.txt test2.txt
test1.txt
test2.txt
# 将 test.tar.gz 解压到当前目录
[root@localhost ~]# tar -zxvf test.tar.gz
test1.txt
test2.txt
# 将 test.tar.gz 解压到指定路径下(该路径必须存在)
[root@localhost ~]# mkdir temp
[root@localhost ~]# tar -zxvf test.tar.gz -C ./temp
test1.txt
test2.txt
# 将 temp 目录压缩到 temp.tar.gz 文件中
[root@localhost ~]# tar -zcvf temp.tar.gz temp
temp/
temp/test1.txt
temp/test2.txt
参考
- https://www.runoob.com/linux/linux-tutorial.html
- Linux命令操作——常用解压缩命令
- 《Linux命令行大全(第二版)》