分类 默认分类 下的文章

  1. whoami
    打印出当前在 terminal session 中登陆的用户名
  2. man
    man

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

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

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

  1. pwd
    打印当前的文件路径
  2. ls
    在一个文件夹里时,打印这个文件夹里所有的文件

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

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

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

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

cd 可以直接跳转到需要的路径

  1. mkdir
    创建文件夹

mkdir fruits

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

mkdir dogs cars

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

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

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

touch apple

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

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

touch berry.png

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

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

mkdir fruits

rmdir fruits

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

mkdir fruits cars

rmdir fruits cars

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

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

  1. 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

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

open

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

open

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

open .

  1. 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 ../

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

touch test

cp apple another_app

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

mkdir fruits

cp -r testfile another_testfile

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

cp testfile/red.png another_testfile/red2.png

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

head SongOfMyself.txt

  1. tail
    类似 head 的功能,输出文件的末尾内容。
  2. date
    打印当前的系统时间

date

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

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

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

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

head today.txt

  1. 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

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

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

其他小指令:

按 g 可以跳到开头;

按 G 可以跳到结尾。

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

echo "hello"

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

echo "hello" > echo.txt

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

echo "the second line" >> echo.txt

  1. wc
    指令的全名:word count

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

输出:1757 15767 87022 mySongLyrics.txt

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

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

cat spring.txt | wc -l

  1. 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

  1. 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

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

获取所有 .png 文件

echo *.png

枚举所有 .ipynb 文件:

ls *.ipynb

枚举所有 F 开头的文件:

echo F*

  1. diff
    逐行比较两个文件。

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

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

  1. 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 {} \ ;

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

  1. 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 支持正则表达式,很实用!

  1. du
    全称:display disk usage statistics

用来计算整个 directory 的大小。

du

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

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

du -h myTestFile

  1. df
    全称:display free disk space

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

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

df -h

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

history

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

history | less

  1. ps
    全称:process status

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

ps ax

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

top

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

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

top -o mem

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

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

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

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

kill

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

kill -l | less

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

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

语法:

killall

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

killall -9 node

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

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

top &

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

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

jobs

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

  1. fg
    全称:foreground

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

fg

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

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

jobs

在 bash 中:

fg 2

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

fg %2

  1. bg
    让进程在后台 Running。

jobs

bg %2

sleep 50 &

jobs

  1. sleep
    中止执行持续一段时间

比如休眠 50 秒:

sleep 50

  1. 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

  1. gunzip
    专门用来解压缩的指令。它基本上就是 gzip -d 的简短形式。
    gunzip filename.gz
  2. 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

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

nano

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

退出编辑:

ctrl-X

保存编辑:

Ctrl-S

切断行:

Ctrl-K

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

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

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

alias myls = 'ls -la'

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

alias

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

command1 | xargs command2

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

cat deadPlayers.txt | xargs rm

再比如:

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

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

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

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

有两种类型的 links:

第一种:hard links

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

ln

第二种:soft links

echo "I am original" > original.txt

ln -s original.txt symlink.txt

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

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

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

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

su

su flavio

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

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

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

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

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

sudo nano /etc/hosts

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

有两个场景:

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

passwd

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

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

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

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

用到的指令就是 chown:

chown

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

chown -R

  1. chmod
    全称:change file mode

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

基本语法:

chmod mode file