Linux 命令完全手册

Linux 命令完全手册

这本《Linux 命令完全手册》将涵盖你作为开发者需要用到的 60 个核心 Bash 命令。每个命令都附有代码示例和用法提示。

这本手册遵循二八定律:你花两成的时间学习一个主题,便可获得其中八成的知识。

我觉得这种方式能给你一个全面的概述。

这本手册并不试图涵盖所有关于 Linux 及其命令的内容,而是专注于那些你在大部分时间里都会用到的小型核心命令,同时试着简化更复杂命令的用法。

以下介绍的命令,在 Linux、macOS、WSL 和其他类 UNIX 环境均可使用。

我希望这本手册的内容可以帮助你达成你想要的目标:熟练掌握 Linux 。

你可以收藏本页,这样就能在以后随时参考这本手册。

①你也可以免费下载这本书的 PDF、ePUB、Mobi 版本.

②如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!VX【pydby01】暗号CSDN

配套学习pdf文档:

链接:https://pan.baidu.com/s/1xaYw24SwApHFhp8ChqBz-g 
提取码:6hgg 
--来自百度网盘超级会员V3的分享

尽情享受吧!

目录

  • Linux 和 Shell 简介
  • Linux 中的 man 命令
  • Linux 中的 ls 命令
  • Linux 中的 cd 命令
  • Linux 中的 pwd 命令
  • Linux 中的 mkdir 命令
  • Linux 中的 rmdir 命令
  • Linux 中的 mv 命令
  • Linux 中的 cp 命令
  • Linux 中的 open 命令
  • Linux 中的 touch 命令
  • Linux 中的 find 命令
  • Linux 中的 ln 命令
  • Linux 中的 gzip 命令
  • Linux 中的 gunzip 命令
  • Linux 中的 tar 命令
  • Linux 中的 alias 命令
  • Linux 中的 cat 命令
  • Linux 中的 less 命令
  • Linux 中的 tail 命令
  • Linux 中的 wc 命令
  • Linux 中的 grep 命令
  • Linux 中的 sort 命令
  • Linux 中的 uniq 命令
  • Linux 中的 diff 命令
  • Linux 中的 echo 命令
  • Linux 中的 chown 命令
  • Linux 中的 chmod 命令
  • Linux 中的 umask 命令
  • Linux 中的 du 命令
  • Linux 中的 df 命令
  • Linux 中的 basename 命令
  • Linux 中的 dirname 命令
  • Linux 中的 ps 命令
  • Linux 中的 top 命令
  • Linux 中的 kill 命令
  • Linux 中的 killall 命令
  • Linux 中的 jobs 命令
  • Linux 中的 bg 命令
  • Linux 中的 fg 命令
  • Linux 中的 type 命令
  • Linux 中的 which 命令
  • Linux 中的 nohup 命令
  • Linux 中的 xargs 命令
  • Linux 中的 vim 编辑器命令
  • Linux 中的 emacs 编辑器命令
  • Linux 中的 nano 编辑器命令
  • Linux 中的 whoami 命令
  • Linux 中的 who 命令
  • Linux 中的 su 命令
  • Linux 中的 sudo 命令
  • Linux 中的 passwd 命令
  • Linux 中的 ping 命令
  • Linux 中的 traceroute 命令
  • Linux 中的 clear 命令
  • Linux 中的 history 命令
  • Linux 中的 export 命令
  • Linux 中的 crontab 命令
  • Linux 中的 uname 命令
  • Linux 中的 env 命令
  • Linux 中的 printenv 命令
  • 结语

Linux 和 Shell 简介

什么是 Linux?

Linux 是一种操作系统, 就像 macOS 和 Windows 一样。

它也是最流行的开放源代码操作系统,给予用户很大的自由度。

它驱动了绝大多数的互联网服务器,是构建任何设施的“地基”,但还不仅如此。 Android 操作系统(中文也称“安卓”)实际上是基于(一种修改版的)Linux 构建的。

Linux 的“内核” (我们称之为 kernel )诞生于 1991 年的芬兰,从最初的简陋构造到今天,已经走了很长的一段路。后来它成为了 GNU 操作系统的内核,于是出现了 GNU/Linux 组合系统。

Linux 可以让你拥有用计算机做任何事情的自由。这是微软、苹果、谷歌这样的大公司永远不会向用户提供的。

他们实际走的是另一条路:创造生态壁垒,尤其是在移动端。

而 Linux 代表着无尽的自由。

它的开发人员通常来自社区志愿者,这其中一些人是独立参与开发工作的,还有一些人是由于受雇于使用它的公司而参与的,但从来没有任何一家商业公司可以擅自决定 Linux 所含的内容,或者是某个项目的优先级。

你可以将 Linux 作为日常使用的系统。我当前使用 macOS ,因为我很喜欢它的应用程序和界面设计(同时我也是一名 iOS 和 Mac 应用开发者)。但在此之前,我一直使用 Linux 作为我的主要计算机操作系统。

在 Linux 上面,没有人能够支配你可以运行哪些应用程序,或者使用特定的应用程序收集你的个人资料、位置和其他信息。

Linux 还有一个特别之处,那就是“世界上不只有一个 Linux”,这和 Windows 还有 macOS 是不一样的。对于 Linux,我们有发行版的概念。

发行版通常由某个公司或组织制作,他们会将 Linux 内核和一些额外的程序与工具整合在一起。

例如,你也许使用过 Debian、Red Hat、Ubuntu,这些可能是最流行的发行版了。

但实际上还有更多。你甚至还可以制作属于你自己的发行版。然而在大多数情况下,人们会选择一个流行的发行版,因为这些版本通常有大量的用户,以及完善的社区支持。这可以让你花更少的时间,做更多的事,既不需要重复造轮子,同时查找某个问题的解决方案也更为方便。

某些台式电脑或笔记本电脑在出厂时预装了 Linux。但你也可以在 Windows 或 Mac 电脑上手动安装它。

不过,如果你只是想了解 Linux 的运行方式,那么没有必要去打乱现有的电脑系统。

我自己并没有专门的“Linux 电脑”。

如果你在使用 Mac,你只需要了解一件事:抛去外壳,macOS 实际上是一种 UNIX 操作系统,而 GNU/Linux 是 UNIX 的自由替代品,因此 macOS 和 GNU/Linux 在很多理念和一些软件的使用上,是共通的。

UNIX 是对 20 世纪 70 年代开始在一些大型公司和机构中使用的多种操作系统的统称。

在 macOS 的终端里,你同样可以使用我在这本手册中介绍的任何命令。

微软官方提供了适用于 Linux 的 Windows 子系统,你可以(甚至是有必要!)将其安装在 Windows 上。这让在 PC 上运行 Linux 有了一种更简单的方式。

但大多数时候,人们会通过 VPS (虚拟专用服务器,如 DigitalOcean) 在云端运行 Linux 电脑。

什么是 Linux 的 Shell?

Shell 通常指的是命令行界面的解析器,简单来说,它给用户提供一个操作界面,来访问底层的操作系统内核进行工作。

它可以让你使用文本和命令执行操作,同时还提供诸如创建脚本之类的高级功能。

这很重要:Shell 为用户提供了一种比 GUI (图形用户界面)更为高效的方式来做事。命令行工具可以提供更多不同的参数设置,但用起来不会变得太复杂。

Shell 有很多种,这里主要介绍 Unix shell,通常在 Linux 和 macOS 电脑上都可以见到。

经过长年发展,很多人为这些系统开发了不同种类的 Shell。其中有一些是最主要的,比如 Bash、Csh、Zsh、Fish 等,当然还有更多。

所有的 Shell 都从 Bourne Shell 发展而来,我们把它叫做 sh。名字中的“Bourne”是取自它的创建人——史蒂夫 · 伯恩(Steve Bourne)。

Bash 的全称是 Bourne-again shell。 sh 是专有软件,并不开放源码,Bash 则在 1989 年由 GNU 计划和自由软件基金会创建,意在为其提供一个免费的替代品。由于 Bourne shell 需要付费才能在项目中使用,因而 Bash 变得非常流行。

如果你在使用 Mac,可以试试打开终端,默认的 Shell 一般是 ZSH(在 Catalina 版本之前,默认是 Bash)。

你可以在你的系统上配置和运行各种 Shell,譬如我使用的是 Fish shell。

每一种 Shell 都有其独特的功能和高级的用法,但在大多数的操作上是相通的:它们可以让你执行程序,你也可以对它们进行编程。

在本手册的余下部分,我们将详细探究那些人们最常用到的命令。

Linux 中的 man 命令

我们要介绍的第一条命令,将帮助你了解剩下的其他命令。

每当我不记得某条命令的用法时,我会输入 man <命令名> 获取它的说明:

这是一个 man (取自 manual 的缩写)页面。Man 页面是你学习开发时的必备工具。它通常包含非常多的信息(有时几乎可以说太多了!)。
上方的屏幕截图,实际上只是 ls 命令的 14 页用法指南中的第 1 页。

大多数时候,如果我需要快速了解某个命令的用法,我会访问一个叫做 tldr pages 的网站(https://tldr.sh)。 它也可以作为一条命令安装在你的电脑上。比如,你可以运行 tldr <命令名> ,它就会快速提供这条命令的概述,以及一些常见的使用场景和用法指引:

需要注意的是,这条命令并不是 man 的替代品,而只是一个帮助你摆脱迷失在 man 页面上大量信息里的便利工具。之后你还是可以在 man 页面查阅某个命令可用的不同选项和详细参数。

Linux 中的 ls 命令

在文件夹内,你可以使用 ls 命令列出其中包含的全部文件:

ls

如果你在后面加上别的文件夹名字或者路径,它就会列出那个文件夹的内容:

ls /bin

Screenshot-2019-02-09-at-18.50.14

ls 支持很多参数。我喜欢的其中一个是 -al 。试试看:

ls -al /bin

Screenshot-2019-02-09-at-18.49.52

与常规的 ls 命令相比,这会返回更多的信息。

你可以看到(从左至右):

  • 文件权限(如果你的系统支持 ACL,这里也会有一个 ACL 标识)
  • 链接到该文件的数量
  • 该文件的所有者
  • 该文件的用户组
  • 文件大小(单位为字节)
  • 文件最后的修改日期
  • 文件名

这串数据是由 l 参数产生的,而 a 参数则用来包含被隐藏的文件。

隐藏文件的文件名通常以英文句号( . )开头。

Linux 中的 cd 命令

假如有一个文件夹,那么你可以用 cd 命令来打开它。 cd 是 change directory(改变目录)的缩写。同样,你可以在后面加上文件夹的名字,或完整的路径,来访问某个特定的文件夹。

示例:

mkdir fruits
cd fruits

现在你进入了 fruits 文件夹。

你可以使用 .. 这个特殊的路径来代指上级目录。

cd .. #回到上级目录

在这里,井号(#)表示注释的开始,在它之后的整行内容都是注释。

.. 也可以用来组成路径:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

另一个特殊路径是 .,它指代的是当前所在的文件夹。

你也可以使用绝对路径,也就是从根文件夹 / 开始的位置:

cd /etc

Linux 中的 pwd 命令

如果你在文件系统里迷路了,输入 pwd ,它会显示你现在的位置:

pwd

这条命令输出当前所在文件夹的路径。

Linux 中的 mkdir 命令

使用 mkdir 命令创建新的文件夹:

mkdir fruits

这条命令还可以一次创建多个文件夹:

mkdir dogs cars

你也可以添加 -p 参数,创建多个嵌套的文件夹:

mkdir -p fruits/apples

UNIX 命令的参数通常都是这样的形式,只需要在命令的名字之后加上它们,就可以改变命令的工作方式。你可以同时使用多个参数。

你可以通过 Man 页面查找某个命令支持的具体参数,只需要输入 man <命令名>。现在,你可以试试输入 man mkdir,来查看这一命令的参数(按下字母q以退出 Man 页面)。 Man 页面是 UNIX 上非常棒的内置帮助系统。

Linux 中的 rmdir 命令

如上所述,mkdir 命令可以创建文件夹,与之相反,rmdir 命令用来删除文件夹:

mkdir fruits
rmdir fruits

这个命令也可以一次删除多个文件夹:

mkdir fruits cars
rmdir fruits cars

用这个命令删除的文件夹,必须是空的。

如果要删除含有内容的文件夹,这里有一个更通用的命令:rm ,配合 -rf 参数即可同时删除文件夹和其中的文件:

rm -rf fruits cars

请小心操作,这个命令在执行时不会向你确认,而是立刻删除你指定的文件。

用命令行删除文件,是没有回收站存在的,恢复丢失的文件会很难。

Linux 中的 mv 命令

当你有一个文件时,你可以用 mv 命令移动它。只需要指定文件的当前路径和新路径:

touch test
mv pear new_pear

文件 pear 现在被移动到 new_pear 了。这也是为文件和目录进行重命名的方法。

如果你指定的最后路径是一个文件夹,那么前面路径中的文件将被移动到那个文件夹。这时,你可以列出一组要移动的文件,这些文件将被移动到最后一个参数中指定的路径:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #文件 pear 和 apple 被移动到 fruits 文件夹

Linux 中的 cp 命令

cp 命令可以用来复制文件:

touch test
cp apple another_apple

要复制整个文件夹,可以添加 -r 参数来递归复制那个文件夹的内容:

mkdir fruits
cp -r fruits cars

Linux 中的 open 命令

open 命令可以让你打开任意一个文件,格式如下:

open <命令名>

你也可以用它打开目录。在 macOS 上,这个命令会打开访达(Finder)并显示你当前指定的目录:

open <目录名>

我一直使用下面的命令打开当前目录:

open .

特殊符号 . 代指当前目录, 而 .. 代指上级目录。

此外,它还可以用来打开一个应用程序:

open <应用程序名>

Linux 中的 touch 命令

touch 命令可以用来创建空白的文件:

touch apple

如果指定的文件已经存在,那么它将以写入模式打开文件,文件的时间戳(修改日期)也同时更新。

Linux 中的 find 命令

find 命令可以用来按特定的模式搜索文件和文件夹。它以递归的方式进行搜索。

让我们通过几个例子来学习它的用法。

你可以用下面的命令,查找当前目录树下所有扩展名为 .js 的文件,并输出每个匹配文件的相对路径:

find . -name '*.js'

在星号(*)等特殊字符周围打上引号是很重要的,这可以避免 Shell 弄错它们的意义。

如果要查找在当前目录树下,所有与"src"这一名称匹配的目录,请输入:

find . -type d -name src

同理,如果只搜索文件,可以使用 -type f 参数;如果只搜索符号链接,可以使用 -type l 参数。

-name 参数对于大小写敏感。如果不需要区分大小写,你应该使用 -iname 参数。

你可以在不同的根目录树下搜索文件:

find folder1 folder2 -name filename.txt

要在当前目录树下搜索名称为 "node_modules" 或是 'public' 的目录,请输入:

find . -type d -name node_modules -or -name public

你可以用 -not -path 参数排除某个路径:

find . -type d -name '*.md' -not -path 'node_modules/*'

你还可以搜索当前目录树中内容超过 100 个字符(字节)的文件:

find . -type f -size +100c

搜索大于 100KB,但小于 1MB 的文件:

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

搜索至少 3 天前编辑的文件:

find . -type f -mtime +3

搜索最近 24 小时编辑的文件:

find . -type f -mtime -1

你可以使用 -delete 参数同步删除搜索到的文件。比如,下面的命令会删除最近 24 小时编辑的文件:

find . -type f -mtime -1 -delete

你还可以在每个搜索结果上同时运行某个命令。在这里,我们运行 cat 来输出搜索到的文件的内容:

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

请注意结尾的 \; 。 命令执行时,搜索结果中的文件名会被自动填入花括号 {} 。

Linux 中的 ln 命令

ln 命令是 Linux 诸多文件系统命令的一部分。

它的用途是创建链接。“链接”是什么?链接就像是指针,指向另一个文件,或者说是指向另一个文件的文件。你可能熟悉 Windows 上的快捷方式,二者是类似的。

我们有两种类型的链接:硬链接软链接

硬链接

硬链接现在很少使用。它有一些弱点:你无法链接到目录,也无法链接到外部文件系统(磁盘驱动器)。

要创建一个硬链接,可以使用下面的语法:

ln <源文件路径> <链接路径>

例如,你有一个叫做 recipes.txt 的文件,你可以用下面的写法创建一个硬链接:

ln recipes.txt newrecipes.txt

这个新创建的硬链接和普通的文件没有什么区别:

Screen-Shot-2020-09-02-at-11.26.21

现在,如果你编辑这对文件中的任何一个,另一个文件的内容也会随之更新。

即使你删除了源文件,链接文件仍然会包含源文件的内容。那是因为直到创建硬链接时,源文件还没有被删除。

Screen-Shot-2020-09-02-at-11.26.07

软链接

  • 6
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值