50 个最常用的 Linux & Terminal 命令

50 个最常用的 Linux & Terminal 命令

  https://zhuanlan.zhihu.com/p/541385014

 

实用的语句!已更新完毕!Linux & Terminal 的最快上手~
整理自 freeCodeCamp.org 视频链接: https://www.youtube.com/watch?v=ZtqBQ68cfJc

一、图:50 个最常用的 Linux 命令

7*7 = 49 个命令,每天一列,更新中

1. whoami

打印出当前在 terminal session 中登陆的用户名

2. man

man <command>

打开帮助手册,查看如何使用某个命令

3. clear

清空指令,清除前面的所有命令

可选项: clear -x ,这样原来的指令还可以上滑找到

4. pwd

打印当前的文件路径

5. ls

在一个文件夹里时,打印这个文件夹里所有的文件

ls /bin 如果在后面加上一个文件名,它也会打印出这个文件夹里的内容。如果在当前文件夹里,可以用相对路径,否则要绝对路径(/ 开头,表示根路径)。

ls -a -l:可以看到所有文件(包括 . 开头的文件),一行一行地显示(这样很清楚!)

ls -lh:这个最实用,可以显示文件的大小(以 human 阅读的方式,即 KB, MB, GB),并逐行显示。

6. cd

cd .. 返回上级菜单(注意,cd 和 .. 之间要有空格!!)

cd </path> 可以直接跳转到需要的路径

7. mkdir

创建文件夹

mkdir fruits

还可以用一行指令创建多个文件夹

mkdir dogs cars

还可以创建多层的文件夹,通过添加 -p 指令:

mkdir -p fruits/apples,注意这里, -p 表示 -parent。如果没有父文件会创建父文件。

8. touch

使用 touch 创建一个空文件(可指定类型),或者更新文件的时间戳

touch apple

也可以指定文件的类型:touch melon.txt

可以指定任何类型的空文件:touch apple.pdf

touch berry.png

而如果这个文件已经存在,命令则以修改模式 write mode 打开这个文件名,并且更新文件的时间戳。

9. rmdir

类似我们用 mkdir 创建文件夹,我们用 rmdir 删除一个文件夹

mkdir fruits

rmdir fruits

也可以一次性删除多个文件夹,只需要把文件夹的名字列在后面就行了:

mkdir fruits cars

rmdir fruits cars

注意:你删除的文件夹必须是空的!

对于内含文件内容的文件夹,我们用更为通用的 rm 命令来同时删除文件和文件夹

10. rm

删除文件或者文件夹。

  • 逐个删除文件:

rm carrot cat.png dog.pdf

  • 如果在命令中加 -v 则可以查看 verbose 信息,即打印出具体删除了哪些文件

rm -v cat dog carrot

  • 删除文件夹和里面的文件:需要增加 -r,表示迭代地删除。否则会报错:rm xxx: is a directory

rm -r seeds

  • 加 -rv 则可以在迭代删除的过程中,查看 verbose 信息,打印出删除了哪些文件

rm -rv seeds

  • 加 -ri 会逐个确认文件夹里的每个文件是否删除,这样可以选择部分不删除

rm -ri animals

11. open

使用 open 指令可以让你打开一个文件:

open <filename>

你也可以打开一个目录,比如在 macOS 中会用你输入的目录路径打开 Finder app 程序:

open <directory name>

而使用 open . 则可以直接用 Finder 打开当前路径(超实用!):

open .

12. mv

当你有一个文件,你可以使用 mv 指令移动它。需要指定这个文件当前的路径,以及它的新路径。

  • 如果未指定路径,而是文件名,则相当于 rename 修改文件名:

touch pear

mv pear new_pear

  • 如果指定路径,则会将文件存进文件夹里

mv purple.txt testfile

  • 如果增加 -v 则可以显示 verbose 信息,打印文件是如何移动的

mv -v purple.txt testfile

  • 也可以修改文件夹的名称:

mv stuff/ STUFF

  • 移动文件夹的地址,比如将文件夹地址放到上一层级:

mv -v testfile/Stuff ../

13. cp

你可以用 cp 指令拷贝一个文件:

touch test

cp apple another_app

若要拷贝文件夹,你需要添加一个 -r 的选项来递归地拷贝整个文件夹中的内容:

mkdir fruits

cp -r testfile another_testfile

还可以既拷贝、又改名、又移动位置:

cp testfile/red.png another_testfile/red2.png

14. head

输出文件的第一部分,使用 -n 可以指定长度

head SongOfMyself.txt

15. tail

类似 head 的功能,输出文件的末尾内容。

16. date

打印当前的系统时间

date

还可以通过 > 或者 >> 指令将 date 信息写入 .txt 文件:

覆盖原有内容:date > today.txt

在原有基础上添加:date >> today.txt

现在查看现在这个文件的前几行:

head today.txt

17. cat

名字的全称: cat – concatenate and print files

和 head/tail 的功能有些相似,与之不同的是 cat 可以在一个 file 中添加内容,这让这个指令非常有用。

  • 打印文档的所有内容:

cat spring.txt

  • 如果在前面加 -n,可以显示行号

cat -n spring.txt

  • 打印两个文档的额所有内容:

cat spring.txt today.txt

  • 还可以通过前面学的 > 指令,将多个文件的内容写入到创建的新文件中:

cat spring.txt today.txt > everything.txt

18. less

也是用来查看文件内容的,但相比于 head/tail, cat 等,有更好的 UI,效果和用 man 指令的效果类似。

按 q 可以退出显示页面,这样主页面就不会被大量的文本内容淹没了。

其他小指令:

按 g 可以跳到开头;

按 G 可以跳到结尾。

19. echo

这个指令只做一件简单的事:把输入的文本打印下来:

echo "hello"

不是很有用。但是可以结合 > 指令来迅速创建一个包含少量文本的文件(这个比较实用~):

echo "hello" > echo.txt

并且还能通过 >> 重复上述步骤来给这个 .txt 文件添加多行:

echo "the second line" >> echo.txt

20. wc

指令的全名:word count

  • 这个指令给我们某个文件或者通过它从 pipes 接收到的指令中的有用的信息。

wc mySongLyrics.txt

输出:1757 15767 87022 mySongLyrics.txt

第一个表示有多少行,第二个表示有多少字,第三个表示多少字节,第四个是文件名

  • 若添加 -l 可以只看有多少行;
  • 若添加 -w 可以只看有多少字。
  • 通过 pipes 的方式,它还可以结合其他语句,比如:

输出某个文件有多少行:

cat spring.txt | wc -l

21. sort

排序文件中的内容。也可以类似 wc,用 pipe 的方式使用

大小写是大写在前,但也可以通过附加指令忽略大小写。

数字排序要加 -n,否则会按照首数字排序:

cat nums.txt

sort -n nums.txt

如果只打印出 unique 的值的排序结果,可在前面加 -nu :

sort -nu nums.txt

用 pipe 的方式使用,结合 cat 的多个文件:

cat nums1.txt nums2.txt | sort

还可以用 pipe 的方式,直接和 wc 一起使用,统计有多少不一样的行:

sort -nu nums.txt | wc -l

22. uniq

删除挨在一起的重复的内容,注意如果不挨在一起不会删除。因此需要先排序,再 uniq。

  • 结合 pipe 的方法:

sort favflavor.txt | uniq

效果和 sort -u 是一样的。

  • 不过 uniq 还是有它的独家功能:
  • -d:只选出有重复项的:

sort favflavor.txt | uniq -d

  • -u:只选出没有重复项的:

sort favflavor.txt | uniq -u

  • -c:对所有项的频数统计:

sort favflavor.txt | uniq -c

  • 统计后,再排序:

sort favflavor.txt | uniq -c | sort -nr

23. extensions

可以通过 echo/ls+ extensions 获取文件:

获取所有 .png 文件

echo *.png

枚举所有 .ipynb 文件:

ls *.ipynb

枚举所有 F 开头的文件:

echo F*

24. diff

逐行比较两个文件。

这是一个很好用的指令。假设你有 2 个文件,几乎包含了相同的信息,但是你找不到两个文件到底在哪里有差别。此时, diff 就会处理这些文件并且告诉你差异是什么。

假设你有两个文件:dogs.txt 和 moredogs.txt。差别在于后者多一个狗狗的名字。

25. find

用于搜索符合某个搜索模式的文件或者文件夹。它以迭代的方式搜索。

  • 比如搜索所有 .js 后缀的文件,并且打印它们的相对地址:

find . -name '*.js'

  • 这里的 . 表示当前的路径下。也可以修改路径,搜索别的地方:

find testfile -name '*.jpg'

  • 精确搜索文件名:

find . -name '7'

  • 模糊搜索:

find . -name '*7*'

  • 还可以进行更复杂的检索,比如检索类型为 file,大小在 100k 和 1M 之间的文件:

find . -type f -size +100k -size -1M

  • 再比如检索超过三天前更新的文档:

find . -type f -mtime +3

  • 再比如检索在 24 小时内更新的文档:

find . -type f -mtime -1

再比如,为每一次搜索结果执行一次命令。在下面这个例子中我们运行了 cat 来打印文档内容:

find . -type f -exec cat {} \ ;

注意,{}会被文件名替代。

26. grep

全称:global regular expression print。主要用来检索文档内部。

这是一个非常实用的指令,如果你掌握了,它可以极大地帮助你。

你可以用 grep 来检索文件,或者结合 pipe 来过滤任何指令的输出。

比如说下面这行指令可以帮助我们找到在 index.md 文档中,document.getElementById 所在的行:

grep document.getElementById index.md

若添加 -n,可以返回对应的所在行号:

grep -n cat allPets

如果添加 -r 可以迭代地检索所有文件:

grep -n cat allPets

grep -nr cat allPets (既显示行号,也显示所有包含字符的文件)

而且 grep 支持正则表达式,很实用!

27. du

全称:display disk usage statistics

用来计算整个 directory 的大小。

du

可以增加 -m 表示用 MB 表示大小;-g 表示用 GB 表示。

使用 -h 可以给出 “human -readable” 的输出,会加上单位:

du -h myTestFile

28. df

全称:display free disk space

用来得到磁盘使用信息。基本的使用方式是打印出有关资源使用情况的信息

同样,使用 -h 可以加上单位,更具可读性

df -h

29. history

每一次我们执行的指令都会被记录在 history 里面,你可以展示 history:

history

还可以结合 less 的 pipe 来在新的 UI 窗口中浏览:

history | less

30. ps

全称:process status

你的电脑无时无刻不在运行成千上万的不同进程。可使用 ps 指令来检查所有的进程的状态

ps ax

31. top

展示和更新关于进程的排序后的信息

top

包含 command, %CPU,Time,memory等等

也可以按照占用内存来排序(排在越前面,表示内存占用越多):

top -o mem

32. kill

全称:terminate 或者 signal 一个进程。

Linux 中的进程可以接受 signals 并给出反馈,kill 指令就是我们与正在运行的程序进行交互的一种方式。

kill 指令可以给程序发送多种多样的 signals,不仅仅是它名字所暗示的终止程序。

通常 kill 直接加进程的 ID 以终止进程(默认是发送 -15 SIGTERM 指令,比较温和):

kill <PID>

我们也可以用 -l 列举出所有的指令:

kill -l | less

很多人会使用 -9 的 SIGKILL,以一种很暴力的方式强退程序,不过还是建议先用 -15 的SIGTERM(以正常的方式让程序退出),如果不起作用再用 SIGKILL。

33. killall

类似 kill 指令,但是 killall 并不是针对某个单一的进程 ID 发送信号,而是同时发给多个进程。

语法:

killall <name>

这里的 name 是程序的名字。比如说你有很多个叫 top 的 program 在运行,那么 killall top 就会把它们同时终止(terminate),比如:

killall -9 node

你也可以类似 kill 的应用,指定一个信号:

34. jobs

当我们在 Linux/macOS 上运行指令时,我们可以使用 & 符号把它发送到后台(background)去运行,比如我们可以将 top 在后台运行:

top &

这对于运行时间很长的程序来说是一个很实用的指令!

执行后,我们可以通过 fg 指令回到这个程序。当我们只有 1 个 job 的时候,这个指令很好用,否则我们需要 job 的编号,比如 fg1, fg2 等等。为了得到 job 的编号,我们可以使用 jobs 指令:

jobs

这样我们就可以看到那些被 suspended 的程序了(对于用 Ctrl + Z 暂停的指令也同样适用)。

35. fg

全称:foreground

由于你使用了 & ,当一个指令正在后台运行时,你可以让它重新回到 foreground 通过 fg 指令。当你只有一个 suspended 的程序时:

fg

该指令会恢复最后一个被 suspended 的 job。

你也可以通过 job 编号指定你要恢复哪一个 job:

jobs

在 bash 中:

fg 2

在 zsh 中(macOS 现在使用的 Terminal 程序):

fg %2

36. bg

让进程在后台 Running。

jobs

bg %2

sleep 50 &

jobs

37. sleep

中止执行持续一段时间

比如休眠 50 秒:

sleep 50

38. gzip

用来压缩文件。

  • 基本指令如下,这将会对文件进行压缩,并添加 .gz 的后缀。注意,原始的文件会被删除。:

gzip filename

  • 如果你不想删除原文件,可以加 -c 可选指令,并用 > 将输出写入新的文件(可以给 .gz 命名新的文件名):

gzip -c filename > filename.gz

  • 或者直接用 -k 可选指令:

gzip -k filename

  • 如果添加 -v 可以知道节约了多少空间

gzip filename.gz

  • 也可以叠加 -k 和 -v(推荐!):

gzip -kv filename.gz

  • 也可以用 gzip 指令来解压缩文件:

gzip -d filename.gz

39. gunzip

  • 专门用来解压缩的指令。它基本上就是 gzip -d 的简短形式。

gunzip filename.gz

40. tar

这个命令用来创建一个 archive 存档,它将会把多个文件 group 进一个新的文件。

  • 注意,原来的文件将不单独存在。类似装进文件夹的逻辑。

指令如下,会创建一个包含 file1 和 file2 且名叫 archive.tar 的 archive 存档:

tar -cf archive.tar file1 file2

这里的 -c 指令表示 create。这里的 -f 指令用来写入文件

  • 下面这个指令可以用来从 .tar 中提取文件:

tar -xf archive.tar

  • 如果想要把它们提取到某个指定的地方,可以用这个指令:

tar -xf archive.tar -C directory

  • 通常,tar 和 gzip 可以联合使用,达到非常实用的“打包 + 压缩 ️” 的效果!指令如下:

tar -cf archive.tar file1 file2

gzip -k archive.tar

这样,我们就可以获得著名的:.tar.gz 后缀的文件:archive.tar.gz

  • 至于生成、解压和提取 .tar.gz 文件,有两种方式:

第一种是分两步:

创建:先 gzip 再 tar

解压和解打包:先 gunzip 在 tar -xf

第二种是一步搞定(推荐!!⭐️):

创建:tar -czf archive.tar.gz file 1 file 2

解压和解打包:tar -xf archive.tar.gz

41. nano

这是一个对初学者很友好的编辑器:

nano <filename>

你可以直接在里面敲字符。

退出编辑:

ctrl-X

保存编辑:

Ctrl-S

切断行:

Ctrl-K

42. alias

(注意:zsh 需要额外配置)

允许我们自定义自己的命令。

比如我们常用 ls -la,那么我们可以把它存成一个自定义别名的命令:

alias myls = 'ls -la'

而运行 alias 本身,则可以查看自己的所有alias:

alias

43. xargs

通过这个指令,你可以让某个指令的输出,成为另一个指令的输入:

command1 | xargs command2

比如,我们想将一个 .txt 文件里列举所有文件都删除,则可以先 cat 读取文本内的所有内容,然后删除:

cat deadPlayers.txt | xargs rm

再比如:

find . -size +1M | xargs ls -lh

44. ln

这个指令是 Linux 文件系统指令中的一部分。它用来创建 links。

什么是 link 呢?link 是指向另一个文件的指针。一个文件指向另一个文件。

如果你熟悉 Windows 的快捷键,那它们的功能很相似。

有两种类型的 links:

第一种:hard links

hard links 很少使用。它们有一系列的限制:你不能链接到 directories,也不能链接到外部的文件系统(磁盘)。

ln <original><link>

第二种:soft links

echo "I am original" > original.txt

ln -s original.txt symlink.txt

45. who

这个指令陈列橱登入系统的 users 用户名。

除非你在用的是很多人共享的服务器,否则通常你是唯一一个登录系统的人,登录过很多次。

46. su

当你以某个 user 身份登陆了终端 shell 的时候,你可能需要切换成另一个 user。

比如你先以 root 执行了某些指令,但是你接下来想要切换 user 账号,那么你可以使用 su 指令:

su <username>

su flavio

而如果你现在正以一个普通 user 的身份,运行 su 指令本身即可让你切换成 root user

47. sudo

这是一个非常常用的指令,用来作为 super user 运行 root 一个指令。

你必须能够使用 sudo,并且一但是这习惯了们可以通过你的 user 密码来像 root 一样发出指令(而不是 root 的密码)。

而这个准许是高度可配置的,尤其是在多用户的服务器环境中。

比如,你可以编辑一个系统的配置文件:

sudo nano /etc/hosts

48. passwd

Linux 中的 users 都有指定的密码。你可以使用 passwd 指令来修改密码。

有两个场景:

第一个是当你想要修改密码的时候,你可以输入:

passwd

然后一个可交互的界面会弹出来,问你旧密码是什么,然后会问你新密码。

49. chown

在 Linux 和 macOS (以及几乎每一个类 Unix 的系统)中,每一个 file/directory 都有其 owner。

文件的 owner 可以对这个文件做任何事情,主宰这个文件的命运。

文件的 owner(以及 root user)也可以修改这个文件的 owner,把它给别人。

用到的指令就是 chown:

chown <owner> <file>

如果你想要修改 directory 的 ownership,那么需要迭代地修改,那么就要加一个 -R 的指令:

chown -R <owner><dile>

50. chmod

全称:change file mode

每一个在 Linux 和 macOS (以及几乎每一个类 Unix 的系统)中的文件都有 3 个permissions:read, write, execute。

基本语法:

chmod mode file

二、知识介绍

接下来的内容会逐一解答下列问题:
- 为什么要费心学习命令行?
- 什么是Unix?GNU?Linux?
- shell 是什么?
- Terminal 是什么?
- Bash 是什么?
- 安装(包括windows用户的WSL)。
- 在命令中使用选项
- Linux的文件夹结构
- 重定向标准输出
- 扩展(tilde, pathname, curly brace)
- 了解权限

0 MacOS/Window 如何使用 Linux 命令?

MacOS 在终端中可以直接使用 Linux 命令,因为其内核是类 Unix 的。但是 Windows 的终端不行。

若 Windows 用户,需要安装 WSL(Windows Subsystem for Linux ),即微软官方的 Linux 子系统。

1 为什么要学命令行?

原因1 - 更多控制:掌握命令行可以让你更大程度地对你的机器的控制。

你可以运行命令来改变权限、查看隐藏文件、与数据库互动、启动服务器、管理进程等。数据库、启动服务器、管理进程等等。

原因2 - 更快:一旦你学会了基本的命令并把它们记在脑子里,你就可以比使用图形用户界面更快地执行任务。这件事有一点学习曲线,但这是 100% 值得的。

原因3 - 通用性:它在任何地方都可以使用,你将学习的命令将在 Linux 和 Mac 机器上运行,但只要稍加努力,它们也可以在 Windows 上运行。

原因4 - 基本能力:这基本上是一项要求,无论你打算成为一名网络开发人员、数据科学家、开发工程师、系统管理员、安全管理员、机器学习工程师等等,你都需要使用命令行。

原因5 - 云计算所需要:大多数云服务是通过命令行界面操作的。如果你打算在云中运行任何项目或使用云资源,你将需要命令行技能。

原因6- 高薪工作!:我总是觉得谈论这个问题很卑鄙,但当然要强调它的重要性!

2. 什么是Unix?

操作系统的世界:大多数操作系统可以分为两个系列:

  • 微软 NT 的后代,包括 Windows、Xbox OS和Windows Phone/Mobile
  • 几乎所有其他系统都可以追溯到 Unix,包括Mac OS X、Linux、Android、Chrome Os,甚至PS4 OS。

那么什么是Unix?

Unix是 20 世纪 60 年代中期在贝尔实验室开发的一个操作系统。最初的 Unix 团队的许多创新和设计选择在 50 多年后仍然存在,包括多用户操作系统分层文件系统的想法。Unix 是我们今天经常使用的许多现代操作系统的 "祖父"。

操作系统中的开源软件/部分开源软件/闭源软件:

自由软件 Free Software

自由软件运动产生于20世纪80年代,是对专利和限制性软件扩散的一种回应。该运动的理念是,计算机和软件不应妨碍用户之间的合作,而应以解放网络空间中的每个人为目标。根据该运动的领导者 Richard Stallman 的说法,"用户应该有运行、复制、分发、研究、改变和改进软件的自由"

今天,"UNIX "这个名字是一个叫做开放集团的全球联盟的商标。他们维护着一套名为 "单一UNIX规范 "的标准,其中描述了定义 UNIX 操作系统的核心命令、功能、接口、实用程序等内容。如果一个操作系统通过了一致性测试,开放集团将认证其完全符合 UNIX 标准。公司必须付费接受测试,并且必须进一步付费使用 UNIX 商标

许多操作系统是基于最初的 UNIX 操作系统,并与 UNIX 标准兼容,但不被认为是 UNIX,因为它们没有经过 The Open Group 的认证。这通常是由于经济上的考虑或道德上的反对。我们把这些操作系统称为类Unix。它们完全或大部分符合规范,但不能合法地使用 UNIX 的名称

3. 什么是 GNU

理查德-斯托尔曼(Richard Stallman)是一群旨在创建自由软件替代 Unix 的开发者中的领导者。1984年,他开始了 GNU 项目的工作,目标是创建一个操作系统,其中包括 "Unix 系统通常附带的所有有用的东西,这样人们就可以在没有任何非自由软件的情况下生活"。

4. 什么是 Linux kernel

另一位开发者 Linus Torvalds 正致力于创建他自己的内核,称为Linux。内核(Kernel)是操作系统中促进硬件和软件之间相互作用的部分。当时,许多 GNU 的 "部件 "已经完成,但它缺少一个内核。托瓦 Torvalds 将他的内核与现有的 GNU 组件结合起来,创建了一个完整的操作系统

Linux 的发行版

Linux Kernel 本身并不是一个完整的操作系统。当人们谈论一个基于 Linux 的操作系统时,他们指的是 Linux 发行版。一般来说,Linux 发行版将 Linux内核、GNU工具、文档、软件包管理器、窗口系统和桌面环境捆绑在一起。目前有近1000个 Linux 发行版可用。一些比较流行的包括 Fedora、Ubuntu、Debian 和 Slackware。

5. GNU/Linux?

一些用户强烈认为应该用 GNU/Linux 这个名字来代替,因为它正确地反映了GNU项目的贡献。

"将整个系统称为 "Linux "会使人们认为该系统的开发是在1991年由Linus Torvalds开始的。这似乎是大多数用户所认为的。偶尔有几个知道GNU项目的用户常常认为我们扮演了次要角色。“

6. Shell 是什么

Shell(外壳)是操作系统的一个计算机接口。Shell 将操作系统的服务暴露给人类用户或其他程序。Shell 接受我们的命令,并把它们交给操作系统来执行。它之所以被命名为 Shell(外壳),是因为它是围绕着操作系统的外层,就像牡蛎周围的壳一样!

7. Terminal 是什么?

终端(Terminal)是一个运行在 Shell 的程序。最初终端是物理设备,但现在我们主要用软件终端工作。

8. Bash 是什么

在大多数基于 Linux 的系统中,默认的 shell 程序是 Bash。还有许多其他的 shell,但 Bash 是目前最流行的。Bash 这个名字是 "Bourne-Again SHell "的缩写,是对 Bash 直接祖先shell的创造者 Stephen Bourne 的双关语。Bash 几乎可以在每个版本的 Unix 和 类 Unix 系统上运行。

GitHub 加速计划 / term / terminal
94.53 K
8.17 K
下载
The new Windows Terminal and the original Windows console host, all in the same place!
最近提交(Master分支:23 天前 )
bc6f3e22 The underlying issue is that the "Pane" is used both as a model and as a UI element and so a pane loses its content as soon as it is closed, but the tree only gets reordered after the animation has finished. This PR is truly just a hotfix, because it doesn't solve this issue, it only adds checks to the function that crashes. Closes #17869 Closes #17871 ## Validation Steps Performed * `Split pane` a few times * Run the "Close all other panes" action * Doesn't crash ✅ 4 天前
6196a3d0 5 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐