Linux 系统可以使用 man [命令]
来查看各个命令的使用文档。
目录管理
-
Linux 的目录结构为树状结构,最*的目录为根目录
/
。 -
其他目录通过挂载将它们添加到树中,通过解除挂载移除它们。
首先我们需要知道什么是绝对路径和相对路径。
绝对路径
由根目录 /
写起,例如:/usr/share/doc
。
相对路径
不是由 /
写起,例如由 /usr/share/doc
要到 /usr/share/man
底下时,可以写成:../man
。
处理目录的常用命令
常见的处理目录的命令:
-
ls
:列出目录。 -
cd
:切换目录。 -
pwd
:显示目前的目录。 -
mkdir
:创建一个新的目录。 -
rmdir
:删除一个空的目录。 -
cp
:复制文件或目录。 -
rm
: 移除文件或目录。 -
mv
:移动文件与目录(也可以用于修改文件与目录的名称)。
可以使用 man [命令]
来查看各个命令的使用文档,如 :man cp
。
ls
在 Linux 系统当中, ls
命令可能是最常被运行的。
语法
ls [-aAdfFhilnrRSt] 目录名称
参数
-
-a
:全部的文件,连同隐藏文件(开头为 . 的文件) 一起列出来(常用)。 -
-l
:长数据串列出,包含文件的属性与权限等等数据(常用)。 -
-i
:显示文件的inode节点信息。
将目录下的所有文件列出来(含属性与隐藏档)
[root@sail /]# ls -al
total 68
dr-xr-xr-x. 18 root root 4096 Oct 25 21:28 .
dr-xr-xr-x. 18 root root 4096 Oct 25 21:28 ..
lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 11 2019 boot
drwxr-xr-x 19 root root 2980 Oct 31 22:57 dev
drwxr-xr-x. 77 root root 4096 Oct 31 22:54 etc
drwxr-xr-x. 3 root root 4096 Oct 25 21:14 home
lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Jul 11 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 90 root root 0 Oct 31 22:54 proc
dr-xr-x---. 5 root root 4096 Oct 31 22:54 root
drwxr-xr-x 23 root root 640 Oct 31 22:55 run
lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Nov 1 2021 sys
drwxrwxrwt. 10 root root 4096 Oct 31 22:55 tmp
drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr
drwxr-xr-x. 19 root root 4096 Jul 11 2019 var
cd
cd 是 Change Directory 的缩写,这是用来变换工作目录的命令。
语法
cd [相对路径或绝对路径]
切换到用户目录下
[root@sail /]# cd home
[root@sail home]#
回到上一级
[root@sail home]# cd ..
[root@sail /]#
回到根目录
[root@sail /]# cd /
[root@sail /]#
回到root目录
[root@sail /]# cd root
[root@sail ~]#
pwd
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。
语法
pwd [-P]
参数
-P
:显示出确实的路径,而非使用连接(link) 路径。
单纯显示出目前的工作目录
[root@sail ~]# pwd
/root
如果是链接,要显示真实地址,可以使用 -P参数
[root@sail ~]# cd /bin
[root@sail bin]# pwd
/bin
[root@sail bin]# pwd -P
/usr/bin
mkdir
make directory,创建新目录
语法
mkdir [-mp] 目录名称
参数:
-
-m
:配置文件的权限。直接配置,不需要看默认权限(umask)的脸色。 -
-p
:帮助你直接将所需要的目录(包含上一级目录)递归创建起来。
创建目录
[root@sail home]# mkdir sail
[root@sail home]# ls
admin sail
创建多级目录
# 没办法直接创建多级目录
[root@sail home]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory
# 需要加上 -p 参数
[root@sail home]# mkdir -p test1/test2/test3/test4
[root@sail home]# ls
admin test1
创建权限为 rwx--x--x 的目录
[root@sail home]# mkdir -m 711 test2
[root@sail home]# ls -l
total 12
drwx------ 3 admin admin 4096 Oct 29 09:56 admin
drwxr-xr-x 3 root root 4096 Oct 31 23:19 test1
drwx--x--x 2 root root 4096 Oct 31 23:21 test2
rmdir
删除目录
语法
rmdir [-p] 目录名称
参数
-p
: 连同下一级(空的)目录也一起删除
删除空目录
[root@sail home]# rmdir test2
[root@sail home]# ls
admin test1
删除非空目录
# 因为目录不是空的,无法删除
[root@sail home]# rm test1
rm: cannot remove ‘test1’: Is a directory
# 加上参数 -p ,可以将 test1/test2/test3/test4 依次删除
[root@sail home]# rmdir -p test1/test2/test3/test4
[root@sail home]# ls
admin
这个 rmdir
仅能删除空的目录,可以使用 rm
命令来删除非空目录。
cp ( 复制文件或目录 )
语法:
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
- -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
- -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
- -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
- -r:递归持续复制,用於目录的复制行为;(常用)
- -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身。
- -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
- -u:若 destination 比 source 旧才升级 destination !
测试:
# 找一个有文件的目录,我这里找到 root目录
[root@kuangshen home]# cd /root
[root@kuangshen ~]# ls
install.sh
[root@kuangshen ~]# cd /home
# 复制 root目录下的install.sh 到 home目录下
[root@kuangshen home]# cp /root/install.sh /home
[root@kuangshen home]# ls
install.sh
# 再次复制,加上-i参数,增加覆盖询问?
[root@kuangshen home]# cp -i /root/install.sh /home
cp: overwrite ‘/home/install.sh’? y # n不覆盖,y为覆盖
rm ( 移除文件或目录 )
语法:
rm [-fir] 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
测试:
# 将刚刚在 cp 的实例中创建的 install.sh删除掉!
[root@kuangshen home]# rm -i install.sh
rm: remove regular file ‘install.sh’? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
# 尽量不要在服务器上使用 rm -rf /
mv ( 移动文件与目录,或修改名称 )
语法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
测试:
# 复制一个文件到当前目录
[root@kuangshen home]# cp /root/install.sh /home
# 创建一个文件夹 test
[root@kuangshen home]# mkdir test
# 将复制过来的文件移动到我们创建的目录,并查看
[root@kuangshen home]# mv install.sh test
[root@kuangshen home]# ls
test
[root@kuangshen home]# cd test
[root@kuangshen test]# ls
install.sh
# 将文件夹重命名,然后再次查看!
[root@kuangshen test]# cd ..
[root@kuangshen home]# mv test mvtest
[root@kuangshen home]# ls
mvtest
文件管理
创建文件
touch
在当前目录创建一个文件
语法
touch 文件名
演示
[root@sail home]# touch f1
[root@sail home]# ls
admin f1
echo
输入内容给指定文件
语法
echo "内容" >>文件名
演示
[root@sail home]# echo "I am f1 file" >>f1
[root@sail home]# cat f1
I am f1 file
基本属性
文件属性
介绍
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们可以使用 ls –l
或者 ll
命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@sail /]# ls -l
total 60
lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 11 2019 boot
drwxr-xr-x 19 root root 2980 Oct 31 22:57 dev
drwxr-xr-x. 77 root root 4096 Oct 31 22:54 etc
drwxr-xr-x. 3 root root 4096 Oct 31 23:28 home
lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Jul 11 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 89 root root 0 Oct 31 22:54 proc
dr-xr-x---. 5 root root 4096 Oct 31 22:54 root
drwxr-xr-x 23 root root 640 Oct 31 22:55 run
lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Oct 31 23:00 sys
drwxrwxrwt. 8 root root 4096 Nov 5 03:42 tmp
drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr
drwxr-xr-x. 19 root root 4096 Jul 11 2019 var
[root@sail /]# ll
total 60
lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 11 2019 boot
drwxr-xr-x 19 root root 2980 Oct 31 22:57 dev
drwxr-xr-x. 77 root root 4096 Oct 31 22:54 etc
drwxr-xr-x. 3 root root 4096 Oct 31 23:28 home
lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Jul 11 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 89 root root 0 Oct 31 22:54 proc
dr-xr-x---. 5 root root 4096 Oct 31 22:54 root
drwxr-xr-x 23 root root 640 Oct 31 22:55 run
lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Oct 31 23:00 sys
drwxrwxrwt. 8 root root 4096 Nov 5 03:42 tmp
drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr
drwxr-xr-x. 19 root root 4096 Jul 11 2019 var
展示结果的第一列为文件属性,代表该文件的类型及权限。
文件属性中第一个字符代表这个文件的类型:
- d:目录
- -:文件;
- l:链接文档 ( link file );
- b:装置文件里面的可供储存的接口设备 ( 可随机存取装置 );
- c:装置文件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中:
- r 代表可读(read)。
- w 代表可写(write)。
- x 代表可执行(execute)。
这三个权限的位置不会改变,如果没有权限,就会出现减号 - 代替。
每个文件的属性由左边第一部分的 10 个字符来确定,如下图:
从左至右用 0 - 9 的数字来表示:
- 第 0 位确定文件类型。
- 第 1 - 3 位确定属主(该文件的所有者)拥有该文件的权限。
- 第 4 - 6 位确定属组(所有者的同组用户)拥有该文件的权限。
- 第 7 - 9 位确定其他用户拥有该文件的权限。
其中:
-
第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限。
-
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限。
-
第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
属主:对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
属组:在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux 系统按文件所有者、文件所有者同组用户和其他用户规定了不同的文件访问权限。
在以上实例中,boot 文件是一个目录文件,属主和属组都为 root。
修改
chgrp
更改文件属组。
语法
chgrp [-R] 属组名 文件名
参数
-R
:递归更改文件属组。在更改某个目录文件的属组时,如果加上 -R
的参数,那么该目录下的所有文件的属组都会更改。
chown
更改文件属主,也可以同时更改文件属组。
语法
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
参数
-R
:递归更改文件属主。在更改某个目录文件的属主时,如果加上 -R
的参数,那么该目录下的所有文件的属主都会更改。
chmod
更改文件9个属性
语法
chmod [-R] xyz 文件或目录
以数字设置属性
Linux 文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限有九个,分别是 owner、group、others 三种身份各有自己的 read、write、execute 权限。
文件的权限字符为:rwx rwx rwx, 这九个权限是三个三个一组的。
其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份 owner、group、others 各自的三个权限分数是需要累加的,例如当权限为:rwxrwx--- 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others = --- = 0+0+0 = 0
chmod 770 filename
内容查看
概述
Linux 系统中使用以下命令来查看文件的内容:
- cat:由第一行开始显示文件内容。
- tac:从最后一行开始显示,可以看出 tac 是 cat 的倒着写。
- nl:显示的时候,顺道输出行号。
- more:一页一页的显示文件内容。
- less:与 more 类似,但是比 more 更好的是,他可以往前翻页。
- head:只看头几行。
- tail:只看尾几行。
命令
cat
由第一行开始显示文件内容。
语法
cat [-AbEnTv]
演示
[root@sail ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
参数
-
-A
:相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已。 -
-b
:列出行号,仅针对非空白行做行号显示,空白行不标行号。 -
-E
:将结尾的断行字节 $ 显示出来。 -
-n
:列印出行号,连同空白行也会有行号,与 -b 的选项不同。 -
-T
:将 [tab] 按键以 ^I 显示出来。 -
-v
:列出一些看不出来的特殊字符。
tac
tac
是 cat
命令的反写,意思也很明显:由最后一行开始显示文件内容。
演示
[root@sail ~]# tac /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=dhcp
DEVICE=eth0
nl
查看文件并显示行号
语法
nl [-bnw] 文件
演示
[root@sail ~]# nl /etc/sysconfig/network-scripts/ifcfg-eth0
1 DEVICE=eth0
2 BOOTPROTO=dhcp
3 ONBOOT=yes
参数
-
-b
:指定行号指定的方式,主要有两种:-
-b a
:不论是否为空行,也同样列出行号(类似cat -n
)。 -
-b t
:如果有空行,空的那一行不要列出行号(默认值)。
-
-
-n
:列出行号表示的方法,主要有三种:-
-n ln
:行号在荧幕的最左方显示。 -
-n rn
:行号在自己栏位的最右方显示,且不加 0。 -
-n rz
:行号在自己栏位的最右方显示,且加 0。
-
-
-w
:行号栏位的占用的位数。
more
一页一页翻动。
按键
在 more 这个程序的运行过程中,你有几个按键可以按的:
-
空白键
:代表向下翻一页。 -
回车键
:代表向下翻一行。 -
/
:代表在这个显示的内容当中,向下搜寻这个关键字。 -
f
:立刻显示出档名以及目前显示的行数; -
q
:代表立刻离开 more ,不再显示该文件内容。 -
b
或ctrl b
:代表往回翻页,不过这动作只对文件有用,对管线无用。
less
一页一页翻动
按键
-
空格键
:向下翻动一页。 -
上键
:向下翻动一页。 -
下键
:向上翻动一页。 -
/
:向下搜寻『字串』的功能。 -
?
:向上搜寻『字串』的功能。 -
n
:重复前一个搜寻 (与 / 或 ? 有关!)。 -
N
:反向的重复前一个搜寻 (与 / 或 ? 有关!)。 -
q
:离开 less 这个程序。
head
取出文件前面几行
语法
head [-n number] 文件
参数
-n
:后面接数字,代表显示几行的意思。默认显示前面 10 行。
[root@sail ~]# head -n 15 /etc/csh.login
# /etc/csh.login
# System wide environment and startup programs, for login setup
#add sbin directories to the path
foreach p ( /usr/local/sbin /usr/sbin )
switch (":${PATH}:")
case "*:${p}:*":
breaksw
default:
if ( $uid == 0 ) then
set path = ( ${p} ${path:q} )
else
set path = ( ${path:q} ${p} )
endif
tail
取出文件后面几行
语法
tail [-n number] 文件
参数
-
-n
:后面接数字,代表显示几行的意思。默认显示最后 10 行。
[root@sail ~]# tail -n 15 /etc/csh.login
set history=1000
if ( -d /etc/profile.d ) then
set nonomatch
foreach i ( /etc/profile.d/*.csh /etc/profile.d/csh.local )
if ( -r "$i" ) then
if ($?prompt) then
source "$i"
else
source "$i" >& /dev/null
endif
endif
end
unset i nonomatch
endif
链接
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接或者符号链接(Symbolic Link)。
硬链接
一般情况下,ln
命令产生硬链接。
硬链接通过索引节点来进行链接。
在 Linux 中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在 Linux 中,多个文件名指向同一索引节点是存在的。比如:
A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同。
一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件。
A 和 B 对文件系统来说是完全平等的,删除其中任何一个都不会影响另外一个的访问。
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止误删的功能。
其原因如上所述,因为对应该目录的索引节点有一个以上的连接,只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。
也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软链接
另外一种连接称之为软链接(Symbolic Link),也叫符号链接。
软链接类似于 Windows 的快捷方式。它实际上是一个特殊的文件。
在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:
A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。
A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。
A 和 B 之间是主从关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
演示
[root@sail home]# touch f1 # 创建一个测试文件 f1
[root@sail home]# ls
admin f1
[root@sail home]# ln f1 f2 # 创建 f1 的一个硬连接文件 f2
[root@sail home]# ln -s f1 f3 # 创建 f1 的一个符号连接文件 f3
[root@sail home]# ls -li # -i 参数显示文件的 inode 节点信息
total 4
1048909 drwx------ 3 admin admin 4096 Oct 29 09:56 admin
664707 -rw-r--r-- 2 root root 0 Nov 6 22:09 f1
664707 -rw-r--r-- 2 root root 0 Nov 6 22:09 f2
664708 lrwxrwxrwx 1 root root 2 Nov 6 22:09 f3 -> f1
可以看出,硬链接文件 f2 与原文件 f1 的 inode 节点相同,均为 664707,然而软链接文件的 inode 节点不同。
[root@sail home]# echo "I am f1 file" >>f1 # 输入字符到 f1
[root@sail home]# cat f1
I am f1 file
[root@sail home]# cat f2
I am f1 file
[root@sail home]# cat f3
I am f1 file
[root@sail home]# rm -f f1
[root@sail home]# cat f2
I am f1 file
[root@sail home]# cat f3
cat: f3: No such file or directory
可以看出,当删除原始文件 f1 后,硬链接 f2 不受影响,但是软链接 f3 无效。
由此可以得到如下结论:
- 删除符号连接 f3,对 f1、f2 无影响。
- 删除硬连接 f2,对 f1、f3 也无影响。
- 删除原文件 f1,对硬链接 f2 没有影响,导致软链接 f3 失效。
- 同时删除原文件 f1、硬连接 f2,整个文件会真正的被删除。