$PATH
输入 ls
时,无论位于哪个目录,系统都能准确找到并执行 /bin/ls
,这是因为环境变量 PATH
保存了命令 ls
的目录路径,系统在 PATH
定义的目录下查找名为 ls
的可执行文件。如果含有多个名为 ls
的可执行文件,则优先执行最先被查找到的同名指令。
echo
指令可以打印字符串,在 PATH
前加 $
可以获取 PATH
定义的变量。执行 echo $PATH
可以打印 PATH
当前定义的目录:
PATH
变量的内容是由一些目录组成,每个目录之间通过冒号 :
分隔,且目录有顺序之分。/usr/bin
在 PATH
变量内,所以能在任何地方执行 ls
来找到 /bin/ls
文件。如果想添加路径到 PATH
内,例如将 /home/wcy
添加到 PATH
,可以执行 PATH="${PATH}:/home/wcy"
。
不同身份的用户默认的 PATH
不同,默认能随意执行的命令也不同。执行命令时使用绝对路径指定某个命令会比系统查找 PATH
准确。.
目录最好不要放到 PATH
中,因为如果有用户在所有人都可以访问的目录写了恶意程序,并命名为常用指令的名称,位于当前目录就有可能中招。
目录的操作
cd
cd
(change directory)的作用是切换工作目录,目录名称和 cd 命令之间存在一个空格。有几个特殊目录:.
代表此层目录,..
代表上一层目录,-
代表前一个目录,~
代表当前用户的家目录,~account
代表 account 用户的家目录。在所有的目录下都会有 .
与 ..
目录。
cd [相对路径或绝对路径]
cd ~wcy # 代表进入用户 wcy 的家目录
cd ~ # 代表进入自己的家目录
cd # 没有加上路径,也是进入自己的家目录
cd .. # 去到上层目录
cd - # 回到刚刚的目录
pwd
pwd
(print working directory)是显示目前所在路径的命令,很多软件使用的目录名相同,为了避免弄错目录,可以输入 pwd
命令。
pwd [-P]
选项与参数:
-P :显示真正的路径,而非使用链接(link)路径
/bin
是 /usr/bin
的链接文件,使用 -P
选项能显示正确的目录名称。
mkdir
mkdir(make directory)可以建立新的目录,默认情况下需要一层一层的建立目录,加上 -p
选项可以让系统自动逐层建立目录,如果目录存在系统也不会显示错误信息。
mkdir [-mp] 目录名称
选项与参数:
-m :设置文件的权限,不使用默认权限(umask)
-p :直接将需要的目录(包括上层目录)递归创建。
创建 test1/test2
的目录,原先不存在 test1
目录,所以 mkdir test1/test2
命令会报错,通过 mkdir -p test1/test2
可以自动建立 test1
目录,然后建立 test2
目录。
一般用户新建目录的权限默认为 775
,这与 umask
有关。如果想创建文件夹时修改权限,可以通过 -m
设置文件夹的权限。例如新建一个目录 test3
并赋予 711
的权限,输入命令 mkdir -m 711 test3
。
rmdir
rmdir(remove directory) 删除旧有的目录,可以使用 rmdir
。目录需要一层一层的删除,被删除的目录里不能存在其他的目录与文件。如果要删除目录下所有东西,需要使用 rm -r 目录名
。
rmdir [-p] 目录名称
选项与参数:
-p :连同上层“空”的目录一起删除
对于 test1/test2
目录结构,可以使用 rmdir -p test1/test2
命令。删除 test1/test2
目录后 test1
目录为空,因为有 -p
选项所以会连同此时的空目录 test1
一同删除。也可以通过 rm -r test1
直接删除 test1
目录,不过 rmdir
命令会安全一些。
文件与目录管理
ls
ls
命令是经常会执行的命令,执行命令时默认会显示非隐藏的文件名,以文件名进行排序并显示文件名代表的颜色。
ls [-aAdfFhilnrRSt] 文件名或目录结构
ls [--color={never,auto,always}] 文件名或目录名称
ls [--full-time] 文件名或目录名称
选项与参数:
-a :全部的文件,连同隐藏文件(开头为 . 的文件)一起列出
-A :全部的文件,连同隐藏文件,但不包括 . 和 .. 这两个目录
-d :仅列出目录本身,不列出目录内的文件数据
-f :直接列出结果,不进行排序(ls 默认以文件名排序)
-F :根据文件、目录等信息,给予附加数据结构
*:可执行文件 /:目录 =:socket文件 |:FIFO文件
-h :将文件容量以 GB、KB 等方式列出来
-i :列出 inode 号码
-l :显示详细信息,包含文件的属性与权限等数据
-n :列出 UID 与 GID 代替使用者与用户组的名称
-r :将排序结果反向输出
-R :连同子目录内容一起列出
-S :以文件容量大小排序
-t :以时间排序
--color=never :不要依据文件特性显示颜色
--color=always :显示颜色
--color=auto :让系统自行依据设置判断是否显示颜色
--full-time :以完整时间模式输出
--time=(atime,ctime) :输出 access 时间或改变权限属性时间(ctime)
例如使用 ls -alF --color=never
命令,不显示颜色,显示文件类型。
因为 ls
常会用到 -l
的选项,很多 Linux 发行版都会将 ll
设置成 ls -l
的意思。这是 Bash shell 的 alias
功能。
cp
复制文件可以使用 cp
(copy)命令,cp
命令还可以建立链接文件(快捷方式),对比文件予以更新以及复制目录等功能。
cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp [options] source1 source2 source3 ... directory
选项与参数:
-a :相当于 -dr --preserve=all
-d :若源文件为链接文件,则复制链接文件属性而非文件本身
-f :若目标文件已存在且无法打开和删除,可以强制复制到现有的目标文件
-i :若目标文件已存在,覆盖时会先询问操作
-l :建立硬链接的链接文件,而非复制文件本身
-p :连同文件的属性一起复制,而非使用默认属性
-r :递归复制,用于目录的复制操作
-s :复制成为符号链接文件(快捷方式)
-u :destination 不存在或比 source 旧才更新 destination
--preserve=all :除了 -p 权限相关参数,还加入 SELinux 的属性,links 和 xattr 也会复制
复制数据时默认的数据拥有者是命令操作者本身,通过 -a
或 -p
选项复制的文件会完整复制文件权限和属性。复制文件时要注意文件权限,否则其他人可能无法操作复制的文件。
通过 -l
和 -s
可以创建链接文件。创建硬链接时第二栏的链接数会增加。创建软连接相当于创建了一个快捷方式,文件名右侧有 ->
符号指向源文件。
复制链接时默认复制原始文件,而不是链接文件的属性。通过 -d
选项可以复制链接文件的属性。
cp
指令可以将多个文件复制到一个目录,目录名放在最后。
rm
rm
是删除(remove)的命令。为了防止被 root 误删,很多 Linux 发行版默认加了 -i
选项。如果要删除目录及目录下的所有文件,需要使用 -r
选项。
rm [-fir] 文件或目录
选项与参数:
-f :force 的意思,忽略不存在的文件,不出现警告信息
-i :删除前会询问使用者是否删除
-r :递归删除,最常用于删除目录
删除 tmp
目录下的 .bashrc
文件,加上 -i
选项会主动询问,避免删除到错误的文件名。
如果要删除以 -
开头的文件,通过加上本目录 ./
避免首位字符是 -
。
mv
mv
是移动(move)的意思,用来移动文件和目录,可以使用 -u
测试新旧文件,判断是否需要移动。mv
命令也可以修改文件名。 Linux 中的 rename
命令同样可以更改文件的文件名。
mv [-fiu] source destination
mv [options] source1 source2 source3 ... directory
选项与参数:
-f :force 的意思,如果目标文件存在,会直接覆盖文件
-i :若目标文件已存在,会询问是否覆盖
-u :若目标文件已存在,且 source 文件比较新,才会更新
将文件或目录移动到指定目录中。
将目录名称更改为 test
。
basename、dirname
文件的完整名包含目录和文件名,每个文件名的长度都可以达到255个字符。利用 /
可以辨别,同样可以使用 basename
、dirname
命令获取。
文件内容查看
需要查看一个文件的内容时,有很多命令可以使用。下面是各个命令的用途。
cat
从第一行开始显示文件的内容tac
从最后一行开始显示nl
显示内容的时候,同时输出行号more
一页一页的显示文件内容less
与more
类似,可以往前翻页head
只查看前面几行tail
只查看后面几行od
以二进制的方式读取文件内容
cat
cat
是 Concatenate 的简写,功能是将一个文件的内容连续打印在屏幕上。不过文件内容超过 40 行时,来不及在屏幕看到结果,可以配合 less
或 more
命令使用。
cat [-AbEnTv]
选项与参数:
-A :相当于 -VET 的整合选项,可以列出一些特殊字符
-b :列出行号,仅显示非空白行
-E :显示结尾的换行符 $
-n :打印行号,空白行也会出现行号
-T :将 [tab] 按键以 ^I 显示出来
-v :列出一些特殊字符
tac
tac
是将文件从最后一行到第一行反向在屏幕上显示出来,功能和 cat
相反。
nl
nl
可以将文件内容自动加上行号,可以做比较多的显示设计。
nl [-bnw] file
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :不论是否为空行,都列出行号
-b t :空行不列出行号(默认)
-n :列出行号表示的方法:
-n ln :行号在屏幕最左侧栏位显示
-n rn :行号在栏位最右方显示,不加0
-n rz :行号在栏位最左方显示,加0
-w :行号栏位占用字符数
用 nl
列出 /etc/issue
的内容。默认空白行不会列出行号。
通过 -b a
选项给空白行加上行号,类似 cat -n
。
用 -n rz
选项给行号前补 0。
如果要将行号的栏位改为 4 位,可以加上 -w 4
选项。
more
通过more
和 less
命令,在查看数据多的文件时,就可以一页一页查看文件内容。在命令过程中,可以按以下几个按键。
- [Space] :向下翻一页
- [Enter] :向下翻一行
- /string :向下查找 string 字符串
- :f :显示文件名及目前显示的行数
- q :退出 more 命令
- b 或 [Ctrl] + b :往回翻页,只对文件有效
输入 more /etc/man_db.conf
命令,就可以看到下面的画面。
查找字符串时,输入 /
后光标会到最后一行并等待输入。输入字符串并按下 [Enter] 时,more
就会向下查找。重复查找时按下 n 即可。
less
使用 less
命令时,可以用 [Page Up]、[Page Down] 来前后翻看文件。less
拥有更多查找方式,可以前后查找。可以输入的命令有:
- [Space] :向下翻一页
- [Page Up] :向上翻动一页
- [Page Down] :向下翻动一页
- ?string :向上查找 string 字符串
- /string :向下查找 string 字符串
- n :重复前一个查找
- N :反向重复另一个查找
- g :前往这个数据的第一行
- G :前往这个数据的最后一行
- q :退出 less 命令
less
还有很多功能,可以使用 man less
查找。man
命令就是使用 less
来显示说明文件的内容。
head
可以使用 head
或 tail
对输出数据进行截取,这两个命令都是以行为单位,不加 -n
选项时,默认显示十行。如果跟的是负数,如 -n -10
时表示列出所有行,但不包括最后 10 行。
head [-n number] file
选项与参数:
-n :后面跟着截取的行数。
tail
tail
的用法与 head
类似,只是显示的是后几行。当使用 tail -n +10
表示文件从 10 行以后会被列出来。由于有些数据会实时写入,所以加上 -f
选项可以一直刷新文件并显示新加的数据到屏幕上,直到按下 [Ctrl] + c 才会结束命令。
tail [-n number] file
选项与参数:
-n :后面跟着截取的行数。
-f :表示持续刷新显示文件中的内容,按下 [Ctrl]+c 才会停止
如果想要显示文件的 11 到 20 行,可以先取文件的前 20 行,再取后 10 行,可以使用命令 head -n 20 file | tail -n 10
。这两个命令中间有个管道符号 |
存在,表示前面的命令所输出的信息,通过管道交由后续的命令继续使用。因此 tail
命令不需要文件名,因为 tail
的数据来自于 head
处理后的结果。
od
查找字符串时,输入 /
后光标会到最后一行并等待输入。输入字符串并按下 [Enter] 时,more
就会向下查找。重复查找时按下 n 即可。
less
使用 less
命令时,可以用 [Page Up]、[Page Down] 来前后翻看文件。less
拥有更多查找方式,可以前后查找。可以输入的命令有:
- [Space] :向下翻一页
- [Page Up] :向上翻动一页
- [Page Down] :向下翻动一页
- ?string :向上查找 string 字符串
- /string :向下查找 string 字符串
- n :重复前一个查找
- N :反向重复另一个查找
- g :前往这个数据的第一行
- G :前往这个数据的最后一行
- q :退出 less 命令
less
还有很多功能,可以使用 man less
查找。man
命令就是使用 less
来显示说明文件的内容。
head
可以使用 head
或 tail
对输出数据进行截取,这两个命令都是以行为单位,不加 -n
选项时,默认显示十行。如果跟的是负数,如 -n -10
时表示列出所有行,但不包括最后 10 行。
head [-n number] file
选项与参数:
-n :后面跟着截取的行数。
tail
tail
的用法与 head
类似,只是显示的是后几行。当使用 tail -n +10
表示文件从 10 行以后会被列出来。由于有些数据会实时写入,所以加上 -f
选项可以一直刷新文件并显示新加的数据到屏幕上,直到按下 [Ctrl] + c 才会结束命令。
tail [-n number] file
选项与参数:
-n :后面跟着截取的行数。
-f :表示持续刷新显示文件中的内容,按下 [Ctrl]+c 才会停止
如果想要显示文件的 11 到 20 行,可以先取文件的前 20 行,再取后 10 行,可以使用命令 head -n 20 file | tail -n 10
。这两个命令中间有个管道符号 |
存在,表示前面的命令所输出的信息,通过管道交由后续的命令继续使用。因此 tail
命令不需要文件名,因为 tail
的数据来自于 head
处理后的结果。
od
…