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 移动到文本文件末尾
1Gg 移动到文本文件开头
/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

参考

  1. https://www.runoob.com/linux/linux-tutorial.html
  2. Linux命令操作——常用解压缩命令
  3. 《Linux命令行大全(第二版)》
posted @ 2022-05-08 20:38  呵呵233  阅读(54)  评论(0编辑  收藏  举报