Linux文件和目录管理
了解并掌握Linux文件和目录是学号Linux操作系统的重要组成部分。对于熟悉Windows操作系统的开发者来说,大家往往习惯了盘符的概念和图形化界面鼠标拖拽操作,但是步入Linux的大门之后,一方面需要知道Linux的文件和数据都是以目录的形式存放的,其中有很多的目录包括home、usr、etc、bin等,都需要开发者在使用中加深记忆,另一方面则是终端命令的使用,需要学会用shell命令来代替图形化界面。
说明:文本基于DataWhale组队学习专栏任务总结
1. 理解Linux文件和目录管理的原理
在Linux中,目录以树状结构管理,且树状目录的根节点 /
为起始,所以也称为根目录。它是Linux文件系统的入口,每一个文件和目录都是从这里开始的。
bin
:基本用户命令的二进制文件目录。对于外部命令而言的,包含了系统管理员和普通用户可以使用的命令的执行文件。etc
:配置文件目录。这个目录包含了所有程序所需要的配置文件,是用于控制程序操作的本地文件,也是静态不可变的。boot
:引导文件。该目录包含Linux系统启动过程中所需的所有内容。dev
目录:设备文件。dev 是 Device(设备)的缩写,这个目录下存放的是 Linux 的外部设备,比如USB接口、U盘、打印机等外部终端设备。在 Linux 中访问设备的方式与访问文件的方式是相同的。proc
:进程信息文件,包含了系统中进程的相关信息(ID、状态等)。opt
:可选择的文件,用于安装附加应用程序软件包。lost+found
:此目录通常为空,当系统非法关机后,这里就存放了一些文件。var
:变量文件。这个目录下可以找到内容可能增长的文件。tmp
:临时文件。包含系统和用户创建的临时文件(内存),当系统重新启动时,这个目录下的文件都将被删除(内存的存储介质决定的,断电易失)。home
:用户目录,所有用户都用home来存储个人文件。usr
:用户程序目录,包含了各种文件数据,比如二进制文件、库文件、文档和二级程序的源代码。mnt
:挂载目录。此目录主要是作为挂载点使用。通常包括系统引导后被挂载的文件系统的挂载点。media
:可移动媒体设备,用于挂载可移动设备的临时目录。
文件权限
以普通文件为例,使用 ls -l 命令,可以看到结果的第一列是 -rwxrwxrwx 的形式,其中第一个字符 “-” 表示这个文件为普通文件,它也可以是其他的字符,不同的字符代表不同类型的文件。其后的一串字符表明了该文件的权限。
-rwxrwxrwx 1 datawhale datawhale 3533567 5月 20 13:14 文件名.pdf
1)r 表明该文件具有可读权限,若该位置为 “-” ,则表明文件不可读;
2)w 表明该文件具有写权限,若该位置为 “-” ,则表明文件不可写;
3)x 表明该文件具有可执行权限,若该位置为 “-” ,则表明文件不具有可执行权限;
4)第一个 rwx 表示该文件的所有者对该文件的权限;第二个 rwx 表示该文件所属组对该文件的权限;第三个 rwx 表示其他用户对该文件的权限。
对于目录来说,rwx的意思又不太一样了
r:查看目录下的文件列表
w:删除和创建目录下的文件
x:可以cd进入目录,能查看目录中文件的详细属性,能访问目录下文件内容
2. 掌握Linux文件和目录管理基本命令
对Linux服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的资源耗用,稳定性和安全性都有负面影响,所以用户与Linux系统交互的常用方式是通过命令完成的。
home目录是什么?Linux系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的home,用户在自己的home目录中拥有完整权限。
- 超级管理员的home目录:
/root/
- 普通用户的home目录:
/home/用户名/
命令的基本格式:命令 [选项] [参数]
-
命令格式中的[ ]代表可选项,也就是有些命令可以不写选项或者参数,也能执行。
-
参数是命令的操作对象,一般是文件、目录、用户和进程等可以作为参数被命令操作。
-
命令的选项用于调整命令功能,而命令的参数是这个命令的操作对象。
-
命令之后不加选项和参数也能执行,只不过只能执行最基本的功能。
Linux 的命令按照来源方式分为两种:Shell 内置命令 和 外部命令。所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所以会有命令的执行文件。Linux中的绝大多数命令是外部命令。
如何理解内置命令?
内置命令在Linux系统启动时就调入内存,是常驻内存的,所以执行效率高。而外部命令是系统的软件功能,用户需要时才从硬盘读入内存。
-
ls
:显示目录下的内容-
-a
:显示目录下包括隐藏文件在内的所有文件名,即--all
注:在Linux中以 “.” 开头的文件是隐藏文件,只有通过 “-a” 选项才能查看。
-
-l
:显示文件的详细信息,即--long
注:显示的信息包括权限、引用计数、所有者、所属组、大小(字节)、文件修改时间、文件名
-
-d
:查看某个目录的详细信息,比如:ls -ld /root/
-
-h
:按照人们习惯的单位显示文件的大小,比如:ls -lh
显示的文件以千字节KB为单位 -
-i
:每个文件都有一个被称为inode的隐藏属性,可以看成系统搜索这个文件的ID,而 “-i” 选项就是用来查看文件的 i 节点号的。从理论上来说,每个文件的inode号都是不一样的。 -
-t
:依照文件最后的修改时间顺序列出文件
-
-
cd
:切换到所在目录,是Shell内置命令用法:
cd
命令切换目录只需在命令后加目录名称即可,比如:cd /usr/local/src/
。~
:代表用户的home目录.
:代表当前目录,cd .
这个命令不会有目录的改变,只是说明.
代表当前目录..
:代表当前目录的上一级目录
注:
cd ~
命令可以快速回到用户的home目录,cd命令直接按回车键也是快速切换到home目录。 -
pwd
:查看当前所在目录的路径 -
mkdir
:创建空目录用法:
mkdir [选项] 目录名
注:我们在建立目录的时候使用的是相对路径,所以这个目录被建立到当前路径下。
李华同学想建立一个保存电影的目录,执行命令
mkdir lh/movie/jp/videos
时报错,这是因为这4个目录都是不存在的,mkdir默认只能在已存在的目录中建立新目录。而如果需要建立一系列的新目录,则需要加入-p
选项,递归建立才可以。即:mkdir -p lh/movie/jp/videos
。 -
rmdir
:删除空目录用法:
rmdir [选项] 目录名
删除一个名为Test的空目录:
rmdir Test
rmdir
命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。递归删除空目录:
rmdir -p lh/movie/jp/videos
说明:这个命令不太常用,无论删除的是文件还是目录,都会使用
rm
命令。 -
tree
:以树形结构显示目录下的文件tree命令非常简单,用法也比较单一,就是显示目录树。比如:
tree /etc/
就是将目录etc
下的文件以树状结构显示出来。
其实计算机的基本操作大多数可以归纳为“增删改查”,文件操作也不例外。只是修改文件数据需要使用文件编辑器,比如常用的Vim编辑器。
文件/文件夹的:创建、删除、移动、剪切、重命名、复制
-
在某一目录或者路径下创建文件:
touch 文件名
注:如何创建隐藏文件touch .test02.txt
在文件前加上”.”即可 -
创建文件夹(或目录):
mkdir
(Make directory) -
移除某一目录下的文件:
rm
(remove的缩写)但不能移除目录。rm 文件名
比如要删除文件100.txt ,则命令是rm 100.txt
-
如何移除目录:
rm -d 文件夹(或目录)
可见rm -d dir
只能删除空目录,而rm -r dir
可以强制性的删除一个目录(不管是非为空).
-
移动文件到某一目录:
mv 文件名 目录名/路径
(move的缩写)mv 100.txt hubu
这里可以是相对路径,也可以是绝对路径,相当于Windows里面的剪切操作
注:移动不仅仅可以将文件移动到指定的路径或者文件夹下,而且还可以移动文件。
- 复制文件到某一目录下:
cp
(copy的简写)
-r
:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
mv 101.odt . 将101.odt移动到当前的目录下,此时会说重名错误
mv 101.odt ./111.odt
将当前目录下的101.odt文件移动到当前路径,并且进行改名为111.odt.
cp 127.odt ./128.odt
将当前目录下的127.odt文件复制到当前路径,并且进行改名为128.odt,以免出现重名错误.
上面学习了文件路径如何切换、如何显示出某一文件下或者路径下文件的命令之后,又深入完成了一个文件、目录的创建、删除、复制、移动等过程的学习,下面再进一步对创建出来的文件进行文本内容命令的学习。
- 查看文件内容:
cat 文件名
cat -b xx.txt
显示行号,去除空行的行号
cat -n xx.txt
显示行号,包含空行的行号
more xx.txt
分页显示文件内容 下一页(空格) 上一页(b) 下一行(Enter)
more命令,一页一页的分屏显示文件的内容。按【q】键可以退出more命令
- 搜索文件内容:grep
grep 关键字 文件名
比如:grep Linux 110.txt
grep -n 定位内容 文件 # 抓取包含关键词内容的行号
比如:grep -n Linux lxl.txt
→ 反向搜索:grep -v 定位内容 文件
# 去掉包含内容的行,显示其他所有内容
忽略大小写搜索:grep -i 定位内容 文件
注:有时候“定位内容”需要使用双引号括起来。上面的参数可以同时使用,比如”-n”标识行号,”-v”表示搜索反向等。
grep -v “#” lxl.txt
这行命令就输出在文件lxl.txt中,不包括”#”的行和行号。
grep -v ^”#” lxl.txt
grep “#”$ lxl.txt ^x开头的行 x$以x结尾的行
- 文件信息的编辑操作
echo 内容
echo xxx > xxx.txt
写入(覆盖)
echo xxx >> xxx.txt
追加(末尾)
有关写入文本的编辑操作中,可以把某些命令的输出结果作为输入,加到某些指定的文件中。
ls > xx.txt
ls >> xx.txt
ls -lh > xx.txt
注:”>”表示写入(覆盖);”>>”表示在文件末尾(追加)同样可以用的操作,比如:cat file1 > file2 cat file1 >> file2