Linux系统下常用指令

Foreword

现整理一下Linux系统下常用的指令,如无特殊说明,这些指令也都可以在macOS系统上执行。所有指令均在Ubuntu 16.04.3 LTS版本下运行通过。参考Stanford大学的Chris Gregg在YouTube上的教程

Linux文件系统简介

Linux的文件系统可以用数据结构中的树表示。使用tree指令便可以以树状结构列出目录内容(不过macOS下不能直接使用tree指令),比较直观清晰。

工作路径

在Terminal下可以输入指令 pwd (print working directory)显示当前的工作路径(绝对路径)。
工作路径有两种:绝对路径与相对路径。绝对路径就是从根目录(root directory)/开始的路径,相对路径是从主目录(home directory)~开始的路径。一般情况下我们都可以使用相对路径来表示我们的工作路径。
另外,.表示当前路径,..表示上一级路径。


cd

cd: change directory
cd 路径名: 定位至目标目录
cdcd ~: 定位至主目录
cd - : 返回至之前目录
cd ..: 返回至父目录

cat

cat: concatenate
cat 文件名: 输出文件内容。注意对文件夹无法进行cat命令。
cat 文件名1 文件名2 ... 文件名n: 输出多个文件内容

ls

ls: list
ls: 列出所有非隐藏文件
ls -1: 以单列的形式列出所有非隐藏文件。(即一行只显示一个文件/文件夹)
ls -l: 列出所有非隐藏文件,包含更多信息:包括文件大小、是否为文件夹、
ls -a: 列出所有文件,包括隐藏文件。(文件名以.开头的都是隐藏文件/隐藏文件夹)
ls -rt: 按照时间修改顺序倒序显示文件
ls -后面的指令可以配合使用,例如ls -alrt便是以倒序显示所有文件,并且包含更多详细信息。

pushd / popd

pushd: push directory
popd: pop directory
在Terminal中,经过几次cd改变路径后,有没有什么快速跳转至之前某一路径的快捷指令呢?答案就是使用pushdpopd指令,利用压栈和出栈的思想实现快速跳转。
具体使用方法:
pushd 新路径: 对当前路径进行压栈操作,然后跳转至新路径
popd: 跳转至栈顶路径
举例:
假设当前我的路径为~/Documents,使用指令pushd ../Downloads后,栈中保存的路径为~/Documents,而我的路径跳转到了主目录下的Downloads文件夹。此时使用指令popd便可以跳转至栈顶路径,即~/Documents

man

man: manual
man 指令名: 查看对应命令的指导手册
例如:man ls,便可以查看完整的ls指令。
进入指导手册后,还可以进行一些操作:
可以通过上下方向键,或者J和K进行文本的浏览。
使用/查找内容指令可以查找特定内容。
在查找时按下n(即键盘上的N键)可以查找下一处,按下N(即shift和N一起按)可以查找上一处。
按下Q即退出指导手册。

man -k 关键词: 显示所有指导手册中带有关键词的指令。
例如: man -k printf: 我们会发现,除了printf外,还有许多长得类似的指令。同时macOS与Ubuntu上显示的指令是不一样的。
Linux only:在Ubuntu下有printf(1)和printf(3)两条名称相同的指令,其中printf(1)是UNIX的系统指令,而printf(3)即是我们熟悉的C语言中的输出指令。可以通过指令man 3 printf查看C语言的printf手册。所以我们在Linux下使用man也可以查看C语言的手册。

cp / mv

cp: copy
mv: move
cp 源文件 新路径: 复制源文件至新路径下,如果新路径原先不存在,则会自动生成对应路径(即文件夹)。
cp -r 源文件夹 新路径: 复制文件夹至新路径下。-r 表示recursive即递归,表示将源文件夹下的所有文件都复制,即实现了整个文件夹的复制。
注意新路径下如果存在与源文件同名的文件,则直接会被覆盖。

mv的用法与cp基本一样。不过对文件夹进行操作时无需使用-r命令。

rm

rm: remove
rm 文件
rm -r 文件夹
注意rm操作会直接删除对应文件/文件夹,而不存在回收站之类的东西(虽然可以有backup,但是……我不会)。所以在执行rm操作时需谨慎。

grep

grep "关键字" 文件名: 列出文件中所有包含pattern的行

关键字中有两个特殊的字符,.和
.可以代表任一字符
`
表示*前面的字符可以连续出现任意次数(包括0次)。 例如:grep “dif*” demo.txt`中,会将包含di、dif、diff的所有行都列出来。

配合正则表达式,grep可以实现高效的查找。这里仅举几个例子供参考:
grep "[ab]e" fileName: 查找所有包含ae或者be的行
grep "^A" fileName: 列出所有以A开头的行
grep "^B" fileName: 列出所有以B结尾的行
具体的可以使用man grep指令查看手册或者网上搜寻正则表达式的相关教程。

find

find . -name 文件名: 在当前路径下(包括当前路径的子路径)寻找对应文件
grep命令稍有不同,在find命令下使用*可以表示任意字符。
find . -type d: 在当前路径下寻找所有文件夹

ctrl+C

中断当前正在执行的指令