Linux操作系统使用基础丨(3)文件和目录
文件和目录
文件系统的层次结构
Linux中的标准系统目录
默认登录后一开始都在~$
,即/home/你的用户名
目录下,也叫“家目录”或“用户的主目录”
cd命令全称change directory,用于更改当前目录,进入想进的目录,如:cd /
指改变目录到/去,所有文件都是从根目录开始的ls
命令指查看当前目录ls /l
指查看属性:权限、创建时间、大小等cd -
指返回原文件(Linux中没有盘符,所有目录全都看成文件)pwd
指显示当前路径
文件系统的概念
- 文件系统:磁盘上有特定格式的一片区域
- 文件:存储数据的一个有名字的对象
- 目录:包含许多文件项目的一类特殊文件
- 子目录:被包含在另一个目录中的目录
- 父目录:包含子目录的目录称为父目录
- 文件名:用来标识文件的字符串,保存在一个目录文件项中
- 路径名:由
/
字符结合在一起的一个或多个文件名的集合,它指定一个文件在文件系统中的位置,如/home/nic/hmli/.bashrc
(第一个/
指根目录,后面的作为分隔符)
文件名称
- 包含大写字母、小写字母、数字、
$
、@
、_
、−
- 一般不包含以下字符:
*
、?
、>
、<
、/
、;
、$
、@
、~
、’
、”
(特殊字符导致难于访问这些文件) - 最好不以
+
或−
开头 - 最长文件名255字符
- 可以有扩展名以便于识别和管理,扩展名与实际类型无关,用扩展名作为文件名的一部分,中间用
.
隔开 区分大小写
平时自己命名文件不要以-
开头,如果遇到想要删除这种文件,要特殊处理
访问以−
开头的文件,比如删除‘-foo’可以使用以下方法之一:
rm␣−−␣−foo
(加两个横杠)rm␣ ./−foo
(加点和斜杠)
rm
是删除命令,
在使用cp
、mv
等许多命令时遇到此类文件名可类似处理
文件的主要类型
主要有以下文件类型,利用ls ␣−l
输出对应文件名的行第一个字符可判断-l
相当于ls
的参数,所以中间要加个空格
1) 普通文件:
- 文本文件:ASCII码形式存储,以-开头,如:
−rw−r−−r−− 1 root root 39599 Mar 8 12:15 x.sh
最后的x.sh
是它的名称,前面那一堆是它的属性:权限、大小、创建时间等 - 二进制文件:以二进制形式存储在计算机中,不可直接读,要通过相应的软件读取,以-开头,如:
−rw−r−−r−− 1 root root 69599 Mar 8 12:25 x
2) 目录文件:
以d开头,如:
drwxr−xr−x 2 root root 4096 Aug 2 2006 bin
最前面加个d
代表它不是个文件,而是个目录,下面还有其他东西,相当于是个文件夹
3) 设备文件:
- 块设备文件:以b开头,如:
brw−rw−−−− 1 root disk 3, 1 Jan 30 2003 /dev/hda1
前面的b
就指的是设备,比如硬盘、U盘、光驱等 - 字符设备文件:以c开头,如:
crw−−−−−−− 1 root root 4, 1 Jul 31 13:49 /dev/ tty1
前面的c
指外加的一些设备
4) 链接文件:
存放文件系统中通向文件的路径,以l开头,如:
lrwxrwxrwx 1 root root 11 Sep 30 2008 c −> /mnt/c
前面l
开头的指超链接文件,不是真正的文件,点击会跳转到其他地方,类似于Windows上的快捷方式
路径的名称
主要分为两种类型:
- 绝对路径,如
/home/hmli/linux
,以/
或~
开头 - 相对路径,如当前目录为
./home/hmli
,那么linux即是相对路径,不以/
或~
开头
/
是根目录,~
是家目录
绝对路径相对于根
相对路径相对于当前目录的父目录
这和HTML中是一样的概念
目录操作命令
ls
:显示目录中的内容pwd
:显示当前工作目录cd
:改变用户工作目录mkdir
:建立用户目录rmdir
:删除目录
列出目录内容:ls
ls
命令列出一个子目录中的全部文件和目录名,一般格式为:ls ␣ [OPTION]...␣[FILE ]...
ls
有很多参数,在Linux系统中只要有不会的,可以输入-help
,所有的就出来了
它有多个命令行参数,参数可组合使用,下面列出它最常用的几个
-a
:显示所有文件或目录(all的缩写),包括以“.”为名称开头字符的隐藏文件、现行目录“.”与上层目录“..”-l
:使用详细格式列表。将权限标示、硬件接数目、拥有者与群组名称、文件或目录大小及更改时间一并列出-R
:递归处理,将指定目录下的所有文件及子目录一并处理-t
:按照时间排序-S
:按照大小排序-r
:逆向排序–color[=WHEN]
:对不同类型的文件显示不同的颜色,WHEN默认为always,可为never和auto
ls举例:
使用长列表方式列出某个子目录中的全部文件:ls ␣−la
(参数l和a可以一起组合用,这也是Linux系统的方便之处)
1 | total 16 |
列出子目录中以字母v打头的全部非隐藏文件:ls ␣ /boot/v*
1 | −rw−r−−r−− 1 root root 2706672 Oct 8 05:42 /boot/vmlinuz−3.0.0−2−amd64 |
显示当前工作目录:pwd
pwd
没有参数,唯一的作用就是显示当前工作目录的绝对路径的名称
1 | / home / hmli |
环境变量PWD存储当前目录名,OLDPWD存储执行cd
命令切换到当前目录之前的目录名,利用echo
可以查看,如:echo␣$PWD
echo␣$OLDPWD
echo
是一个很常用的命令,是查看、屏幕输出。
这里的$
指的是一个变量符号,和用户名后的不一样。
用户名后的那里的$指普通用户,不是root用户。
改变用户工作目录:cd
cd
命令可让用户在不同目录间切换,一般格式为cd ␣ [−L|[−P]␣[dir ]
,
几个常用方式:
cd ␣ dirname
:进入名字为dirname的目录cd ␣~username
:进入用户username的主目录cd ␣~/dirname
:进入当前用户的主目录下的dirname子目录cd ␣−
:返回进入这个目录之前所在的目录cd ␣ ..
:进入上一级目录cd ␣ ../..
:进入上两级目录cd ␣ ../ subdir / subsubdir
:进入上级目录下的subdir下的subsubdir目录cd
:不跟任何参数时返回用户根目录
建立用户目录:mkdir
mkdir
可建立目录,一般格式为:mkdir␣ [OPTION]...␣DIRECTORY...
主要选项为:
- -p:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录,如
mkdir␣−p␣1/2
将建立目录1/2,如果目录1不存在,那么也会一起建立 - -m:建立目录时,同时设置目录的权限。权限的设置法与chmod命令相同,如
mkdir␣−m␣700␣3
删除目录:rmdir
rmdir
命令可删除空目录,若所要删除目录非空,则出错
rmdir ␣ dirname
:删除dirname目录- -p:删除指定目录之后,若该目录的上层目录已变成空目录,则将
其一并删除,如rmdir ␣−p␣1/2
rmdir
更常用的替代命令为后面所说的rm
命令
文件操作命令
这里不仅仅指的是普通文件,也包括目录等文件
cp
:复制文件或目录mv
:移动文件和文件换名rm
:删除文件或目录ln
:在文件间建立连接(类似Windows的快捷方式)find
:查找特定的文件locate
:定位查找特定的文件where
:查找文件which
:查看命令的路径touch
:改变文件的时间参数
复制文件或目录:cp
cp
命令用来复制文件,在缺省的情况下,工作时不做任何显示,只有在
出现错误情况的时候才显示状态信息,一般格式为:cp ␣ [OPTION]...␣SOURCE␣DEST
用
cp-help
可列出它的选项
主要选项:
-a
:复制时尽可能保持文件的结构和属性-f
:不提示直接覆盖存在的目标文件-i
:覆盖现存文件时提示,建议打开此选项,避免误操作覆盖掉原目标文件-p
:保持原始文件的所有者、组、许可和时间表属性-r
:递归地复制目录
举例:
- 复制源文件
srcfile
为destfile
:cp ␣ srcfile ␣ destfile
- 保留文件的结构和属性复制源目录
/home/hmli/srcdir
到当前目录下的destdir
目录:cp ␣−a␣ /home/hmli/ srcdir ␣ destdir
移动/重命名文件:mv
mv
命令用来把文件从一个位置移动到另外一个位置,一般格式为:mv␣[OPTION]...␣SOURCE␣DEST
主要选项:
-i
:覆盖现存文件时提示,建议打开此选项,避免误操作覆盖掉目标
文件-f
:不提示直接覆盖存在的目标文件
删除文件或目录:rm
删除了后基本不存在恢复的可能,小心
rm命令用来删除文件,一般格式为:rm␣[OPTION]...␣FILE...
主要选项:
-f
:不提示直接删除指定的目标文件-i
:指定交互模式,在执行删除前提示确认-r
:删除文件列表中的目录
删除文件名以-开头文件,比如‘-foo’可以使用以下方法之一:
rm␣−−␣−foo
rm␣ ./−foo
注:在使用cp
、mv
等许多命令时遇到此类文件名可类似处理
在文件间建立连接:ln
软连接,可以理解成指针,更形象点可以理解成快捷方式。
ln
命令用来建立硬连接和符号连接
- 硬连接是一个文件的额外的名字,相当于一个同步更新的副本,删除源文件,硬连接的内容还存在
- 符号连接相当于快捷方式,当源文件被删除后,符号连接仍然存在,
但链接的内容已经不存在
一般格式为:ln ␣ [ options ] ␣ source ␣ [ dest ]
主要选项:
-d
:用于建立目录的硬连接,默认选项-f
:覆盖已存在的目的文件-i
:提示是否覆盖已存在的目的文件。-s
:建立符号连接而不是硬连接
查找文件:find
find
命令可以根据各种检索条件查找文件,一般格式为:find ␣ [−H]␣[−L]␣[−P]␣[−D␣debugopts]␣[−Olevel]␣ [path ...] ␣ [ expression ]
path…
:准备寻找文件所在的路径及它的子路径,也可是多个路径expression
:包含要搜索文件的条件,可以包含文件名、拥有者、修改时间、权限等
find主要选项:
-atime n
:至少n*24小时内没有访问过的文件-ctime n
:至少n*24小时内没有修改过的文件-amin n
:n分钟之内没访问过的文件-cmin n
:n分钟之内没修改过的文件-empty
:文件为空-name name
:指定要寻找的文件或目录的名称,区分大小写-iname name
:指定要寻找的文件或目录的名称,不区分大小写-type c
:以文件的类型作为寻找的条件,若c为:d
:表示寻找目录f
:表示寻找普通文件c
:表示寻找字符特殊设备b
:表示寻找特殊块设备p
:表示寻找命名管道l
:表示寻找符号连接s
:表示寻找套接字(socket)
find举例:
- 查找/home子目录中至少7天没有被访问过的文件:
find ␣ /home␣−atime␣+7␣−print
- 找出/usr/src子目录中名字为core.*的文件并删除它们:
find ␣ / usr/ src ␣−name␣core.*␣−exec␣rm␣{} ␣ \;
- 找出/home中以.jpg结尾并且长度超过100KB的文件:
find ␣ /home␣−name␣"*.jpg"␣−size␣+100k
- 找出当前目录下权限不是755的目录并将其权限设置为755:
find ␣ . ␣−type ␣ d ␣ ! ␣−perm␣755␣−exec␣chmod␣755␣{}␣ \;
注意:结合-exec选项时一定要小心,特别是后面跟rm
等命令时
查找文件所在目录:locate
从系统保存文件位置信息的数据库中搜索文件:locate
如查看名字中含有libmkl_intel的库文件:locate ␣ libmkl_intel
1 | w a r ni n g : l o c a t e : w a r ni n g : d a t a b a s e / v a r / l i b / s l o c a t e / s |
注意:
- 如果系统的数据库不够新,那么查找的结果将未必正确,比如上面提示数据库的信息至少已经8天没更新
- root可以运行
updatedb
更新数据库,普通用户无权更新
显示命令的路径:which
which
查看命令的所在路径,如查看使用的是哪个mpif90:which␣mpif90
1 | / o pt / openmpi − 1 . 4 . 3 / bi n / m pi f 9 |
which
实际上是在环境变量PATH中指定的路径中显示第一个搜索到的命
令的路径,利用echo␣$PATH
可以看到以:分隔的命令路径,如:
1 | / u s r / l o c a l / bi n : / u s r / bi n : / bi n : / o pt / openmpi − 1 . 4 . 3 / bi |
改变文件的时间参数touch
touch
改变文件访问和修改时间或用指定时间建立新文件,一般格式为:touch ␣ [OPTION]...␣FILE...
主要选项:
- 不带参数:将文件的时间改为当前时间
-a
:只更改访问时间-c
:若目标文件不存在,不建立空的目标文件-t
[[CC]YY]MMDDhhmm[.ss]:以指定时间修改文件的时间,如下述
命令将文件file1
的时间修改为1月20日15点30分:touch ␣−t ␣ 01201530␣ file1
显示文件内容的命令
cat
:显示和合并文件paste
:横向合并文件,将多个文件对应行合并more
:分屏显示文件less
:分屏显示文件head
:显示文件的前几行tail
:显示文件的最后几行
显示和合并文件:cat
cat
可以结合多个文件,并将它们的内容输出到标准输出设备或者定向到
某个文件,一般格式为:cat ␣ [OPTION]...␣[FILE ]...
主要选项:
-b
:列出文件内容时,在所有非空白列开头标上编号,从1开始累加-E
:在每一行的最后标上“$”符号-n
:列出文件内容时,在每一行开头标上编号,从1开始累加
cat举例:
- 让
cat
命令从标准输入设备(如键盘)读取数据,转而输出至标准输出设备(如显示器):cat
不加任何参数之后回车,键入文字,按下回车键,系统将回应一模一样的文字 - 将屏幕输入定向到file2中:
cat ␣>␣ file2
输完后按<ctrl−d>
终止输入,就将屏幕输入的存到文件file2中 - 利用重定向符
>
将名称为file1与file2的文件合并成一个文件file3:cat ␣ file1 ␣ file2 ␣>␣ file3
>
表示覆盖,若文件file3已经存在,则其内容会被覆盖>>
表示追加,若用>>
代替>
,新的内容就会追加在原有内容之后,
而不会覆盖它
横向合并文件:paste
paste
横向合并文件,将多个文件对应行合并,一般格式为:paste ␣ [OPTION]...␣[FILE ]...
一般选项:
-d
, –delimiters=LIST:用LIST代替TABs-s
, –serial:串行而非并行合并文件
例如:
1 | file1的内容如下: file2的内容如下: |
执行paste ␣ file1 ␣ file2
将显示:
1 | 1 a |
分屏显示文件:more
more
可将文件内容显示于屏幕上,每次只显示一页。可以往下翻页,但
无法回退翻页,一般格式为:more␣[−dlfpcsu] ␣ [−num]␣[+/pattern] ␣ [+linenum]␣[ file ␣ ...]
主要选项:
+/<字符串>
:在文件中查找选项中指定的字符串,然后显示字符串所在该页的内容+<行数>
:从指定的行数开始显示-n
:每次只显示n行-c
:不滚屏,在显示下一屏之前先清屏
more启动后的主要操作:
空格
:翻页/pattern
:查找匹配pattern的字符v
:调用编辑器进行编辑<ctrl-L>
;刷新屏幕q
:退出
more举例:
- 在文件file1中查找“123”字符串,然后从该页开始显示内容:
more␣+/123␣ file1
- 显示文件file1的内容,每10行显示一次,且在显示之前先清屏:
more␣−c␣−10␣ file1
分屏显示文件:less
less
类似more
,也可以用来浏览超过一页的文件less
命令除了可按空格键向下显示文件外,还可利用上下键来卷动文件- 当要结束浏览时,只要下按q键即可
- 显示中按v,也可调用编辑器直接进行编辑
建议使用功能更强大方便的less
,man
␣ less
仔细看看用法以及功能
显示文件的前几行:headhead
显示指定文件的开头若干行,默认值是10行,一般格式为:head␣[OPTION]...␣[FILE ]...
-c N
:显示前N个字节-n N
:显示前N行-N
:显示前N行,如:head␣−20␣ file
显示文件的最后几行:tailtail
显示指定文件的末尾若干行,默认值是10行,一般格式为:tail ␣ [OPTION]...␣[FILE ]...
主要选项:
-c N
:显示后N个字节-n N
:显示后N行-N
:显示后N行-f
:连续监测需要显示文件的最后几行,如果文件更新,将自动显示出更新,常用于监测输出日志,比如:tail ␣−f ␣myjob.log
比较文件内容命令:comm与diff
comm
:比较两个已排过序的文件diff
:比较文件的差异
显示两个文件共同部分:comm
comm
用来对两个已排过序的文件进行逐行比较显示其共同部分,一般格式为:comm␣[OPTION]...␣FILE1␣FILE2
OPTION可以为:
- -1:不显示只在第一个文件里出现的行
- -2:不显示只在第二个文件里出现的行
- -3:不显示在第一、二个文件里都出现的行
comm举例:
1 | ile1的内容如下: file2的内容如下: |
用comm命令对这两个文件进行比较只显示它们共有的行:comm␣−12␣file1 ␣ file2
1 | main ( |
显示多个文件不同部分:diff
diff
可以比较多个文本文件,并显示它们的不同,一般格式为:diff ␣ [OPTION]...␣FILES
主要选项:
-c
:输出格式是带上下文的三行格式-C n
:输出格式是带上下文的n行格式-r
:两个文件都是目录时,递归比较找到的各子目录- 输出的一般形式如下:
- n1 a n3,n4
- n1,n2 d n3
- n1,n2 c n3,n4
- a-附加,d-删除,c-修改
- a、d、c前面的n1等表示第一个文件的行号,后面的n3等表示第二个文件的行号
上面的n1 a n3,n4表示两个文件若要变成相同,那么第一个文件的n1行将附加第二个文件的行号为n3到n4行之间的内容
diff举例:
1 | file1的内容如下: file2的内容如下: |
输入命令:diff ␣ file1 ␣ file2
将显示:
1 | 3 , 5 c 3 , 6 |
文件权限操作
chmod
:改变文件或目录的许可权限chown
:改变文件的所有权chgrp
:改变用户分组
文件的保护和权限
ls ␣−l
显示的文件权限格式
1 | d rwx r−x r −x 2 hmli hmli 4096 10月 19 2 3: 2 5 e xam ple |
drwxr-xr-x和-rw-r–r–的组成:第一列为文件类型标记,接着的三列为用户权限
位,之后的三列为组权限位,最后三列为组外用户权限位
文件权限:
1 | rwx rwx rwx |
- 普通文件:
- r:可以查看文件内容
- w:可以修改文件内容
- x:可以执行文件
- 目录:
- r:可以查看目录下的文件
- w:可以在目录下创建和删除文件
- x:可以进入目录或访问目录下的文件
权限
权限格式,可以为二进制、八进制或字符形式,如
user | group | others | |
---|---|---|---|
字符 | rwx | rw- | r– |
二进制 | 111 | 110 | 100 |
八进制 | 7(4+2+1) | 7(4+2+1) | 4(4+0+0) |
多数文件的权限为:
- 文件:−rw−r −−r −− 644
- 目录:d rwx r−x r −x 755
改变文件权限:chmod
chmod
用于改变文件或目录的权限,一般格式为:chmod␣[OPTION]...␣MODE[,MODE]...␣FILE...
MODE模式:
u
:文件所属帐户g
:文件所属组o
:不同组的帐户a
:所有帐户+
:添加权限-
:去除权限=
:使得指定文件只具有这些权限
主要选项:
-v
:详细显示权限改变的信息-c
:类似-v,仅权限改变时显示-R
:对所有某目录下的文件进行递归处理
chmod举例:
- 使文件file各用户都拥有完全权限:
chmod␣777␣ file
- 允许所有人读file,但只有拥有者能改变它:
chmod␣644␣ file
- 给所有人增加写权:
chmod␣a+w␣file
- 对组级和其他用户除去写权和读权:
chmod␣o−wr,g−wr␣file
- 建立其他用户的只读权:
chmod␣o=r␣ file
注意控制权限,尽量不要给其他用户修改删除文件等权限
设置缺省权限:umask
利用umask
可以设置新生成的文件和目录的缺省权限,但不影响已经存在的文件或目录权限,一般格式为:umask␣[−p]␣[−S]␣ [mode]
mode与chmod
的类似,应该设其mode为ls
看到的权限的异或,简单说就是777−ls
显示的
如避免其他用户查看自己新建的文件,可用umask␣077
,将设置缺省权限为:
- 文件:−rw−−−−−−− 600
- 目录:drwx−−−−−− 700
如想要每次登录都起作用,需要加入shell的启动初始文件,比如bash的~/.bashrc
改变文件的所有权:chown
只有root用户能够进行这样的操作
chown
可把一个文件的所有权修改为其他用户的,一般格式为:chown␣[OPTION]...␣[OWNER][:[GROUP]]␣FILE...
主要选项:
-v
:详细显示所有权的变化-c
:类似-v,仅所有权改变时显示-R
:递归改变目录及其内容的所有权
比如,将所有文件的所有者修改hmli及其所在的组nic:chown␣−R␣hmli:nic ␣ dirname
改变文件的用户组:chgrp
只有root才可以执行
chgrp
命令可以改变一个文件的用户分组设置情况,一般格式为:chgrp␣ [OPTION]...␣GROUP␣FILE...
主要选项:
-v
:详细说明文件所属的用户组的变化-c
:类似-v,仅所有权改变时显示-r
:改变本目录及其所有子目录中的文件所属的用户组
此外还有很多命令,这些命令其实不用死记硬背(也背不完啊那么多),而是像HTML标签和css属性一样,遇到需要的可以去搜索引擎直接查来用(当然那几个常用的你得会)。
推荐更多
B站教学视频:
【小白入门 通俗易懂】2021韩顺平 一周学会Linux
(该教程有很多分P选集,可自行点击跳转)
几个命令查找网站:
Linux命令大全(手册)
Linux命令大全
Linux命令手册