1.3 Linux文件系统
一、Linux文件系统结构
Linux下都是文件,所以没有Windows一样的盘,有的只有文件夹。
cd / // 进入根目录
ls // 查看根目录"/"下的文件及文件夹
/bin :存储了很多系统命令, /usr/sbin 也存储了许多系统命令。
/sbin :超级用户 root 的根目录文件。
/root :普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/home :存放 Ubuntu 系统内核和系统启动文件。
/boot :通常包括系统引导后被挂载的文件系统的挂载点。
/mnt :存放设备文件,我们后面学习 Linux 驱动主要是跟这个文件夹打交道的。
/dev :保存系统管理所需的配置文件和目录。
/etc :保存系统程序运行所需的库文件, /usr/lib 下存放了一些用于普通用户的库文件。
/lib :存储一些二进制可执行命令文件, /usr/bin 也存放了一些基于用户的命令文件。
/lost+found :一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var :包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/usr :存放 Ubuntu 系统自动挂载的设备文件。
/media :虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/proc : 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/tmp :可选文件和程序的存放目录。
/opt :系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。
/sys :存储一些不断变化的文件,比如日志文件
二、文件操作基础知识
1.创建新文件(touch)
命令格式: touch 不仅仅可以用用来创建文本文档,其它类型的文档也可以创建。
touch [参数] [文件名]
参数如下:
-a :只更改存取时间。
-c :不建立任何文件。
-d<日期> : 使用指定的日期,而并非现在日期。
-t<时间> :使用指定的时间,而并非现在时间。
2.创建文件夹(mkdir)
命令格式: mkdir [参数] [文件夹名目录名]
主要参数:
-p :如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。
3.删除文件及目录(rm)
命令格式: rm [参数] [目的文件或文件夹目录名]
主要参数:
-d :直接把要删除的目录的硬连接数据删成 0,删除该目录。
-f :强制删除文件和文件夹(目录)。
-i :删除文件或者文件夹(目录)之前先询问用户。
-r : 递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉。
-v :显示删除过程。
4.删除文件夹(rmdir)
命令格式: rmdir [参数] [文件夹(目录)]
5.复制文件(cp)
命令格式: cp [参数] [源地址] [目的地址]
主要参数:
-a :此参数和同时指定“-dpR”参数相同
-d :在复制有符号连接的文件时,保留原始的连接。
-f :强行复制文件,不管要复制的文件是否已经存在于目标目录。
-I :覆盖现有文件之前询问用户。
-p :保留源文件或者目录的属性。
-r 或-R :递归处理,将指定目录下的文件及子目录一并处理
“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件,也就是 a.c 和 b.c。
“../test2”中的“../”表示上级目录,因此“../test2”就是上级目录下的 test2 文件夹。
6.文件移动(mv)
命令格式: mv [参数] [源地址] [目的地址]
主要参数:
-b :如果要覆盖文件的话覆盖前先进行备份。
-f :若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录。
-I :在覆盖之前询问用户。
7.目录查询文件(find)
命令格式: find [路径] [参数] [关键字]
主要参数:
-name<filename> : 按照文件名称查找,查找与 filename 匹配的文件,可使用通配符。
-depth :从指定目录下的最深层的子目录开始查找。
-gid<群组识别码> :查找符合指定的群组识别码的文件或目录。
-group<群组名称> :查找符合指定的群组名称的文件或目录。
-size<文件大小> :查找符合指定文件大小的文件。
-type<文件类型> :查找符合指定文件类型的文件。
-user<拥有者名称> :查找符合指定的拥有者名称的文件或目录。
8.关键字查询(grep)
命令格式: grep [参数] 关键字 文件列表
-b :在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号。
-c :计算符合关键字的列数。
-d<进行动作> : 当指定要查找的是目录而非文件时,必须使用此参数!否则 grep 指令将回报信息并停止搜索。
-i :忽略字符大小写。
-v :反转查找,只显示不匹配的行。
-r :在指定目录中递归查找。
9.文件压缩(zip)
命令格式: zip [参数] [压缩文件名.zip] [被压缩文件]
主要参数:
-b<工作目录> : 指定暂时存放文件的目录。
-d :从 zip 文件中删除一个文件。
-F :尝试修复已经损毁的压缩文件。
-g :将文件压缩入现有的压缩文件中,不需要新建压缩文件。
-h :帮助。
-j :只保存文件的名,不保存目录。
-m :压缩完成以后删除源文件。
-n<字尾符号> :不压缩特定扩展名的文件。
-q :不显示压缩命令执行过程。
-r :递归压缩,将指定目录下的所有文件和子目录一起压缩。
-v :显示指令执行过程。
-num :压缩率,为 1~9 的数值。
常用参数: -rv
10.文件解压(unzip)
命令格式: unzip [参数] [压缩文件名.zip]
主要参数:
-l :显示压缩文件内所包含的文件。
-t :检查压缩文件是否损坏,但不解压。
-v :显示命令显示的执行过程。
-Z :只显示压缩文件的注解。
-C :压缩文件中的文件名称区分大小写。
-j :不处理压缩文件中的原有目录路径。
-L :将压缩文件中的全部文件名改为小写。
-n :解压缩时不要覆盖原有文件。
-P<密码> :解压密码。
-q :静默执行,不显示任何信息。
-x<文件列表> : 指定不要处理.zip 中的哪些文件。
-d<目录> : 把压缩文件解到指定目录下。
11.文件压缩和解压(tar)
tar是用于Linux最常用的.bz2和.gz两种压缩格式。
命令格式: tar [参数] [压缩文件名] [被压缩文件]
主要参数:
-c :创建新的压缩文件。
-C<目的目录> :切换到指定的目录。
-f<备份文件> :指定压缩文件。
-j :用 tar 生成压缩文件,然后用 bzip2 进行压缩。
-k :解开备份文件时,不覆盖已有的文件。
-m :还原文件时,不变更文件的更改时间。
-r :新增文件到已存在的备份文件的结尾部分。
-t :列出备份文件内容。
-v :显示指令执行过程。
-w :遭遇问题时先询问用户。
-x :从备份文件中释放文件,也就是解压缩文件。
-z :用 tar 生成压缩文件,用 gzip 压缩。
-Z :用 tar 生成压缩文件,用 compress 压缩
常用指令: -vcjf(压缩为.bz2文件) -vczf(压缩为.gz文件) -vxjf(解压.bz2文件) -vxzf(解压.gz文件)
三、文件基础知识
1.文件类型
每个文件的详细信息占一行,每行最前面都是一个符号就标记了当前文件类型。例如testdir1是d开头,那么它就是目录文件。
- :普通文件,一些应用程序创建的,比如文档、图片、音乐等等。
d :目录文件。
c :字符设备文件, Linux 驱动里面的字符设备驱动,比如串口设备,音频设备等。
b :块设备文件,存储设备驱动,比如硬盘, U 盘等。
l :符号连接文件,相当于 Windwos 下的快捷方式。
s :套接字文件。
p :管道文件,主要指 FIFO 文件。
我们后面学习 Linux 驱动开发的时候基本是在和字符设备文件和块设备文件打交道。
2.权限管理
其中“-rw-rw-r--”表示文件权限与用户和用户组之间的关系,第一位表示文件类型。剩下的 9 位以 3 位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。后面的“luoxuesong luoxuesong ”分别代表文件拥有者(用户)和该用户所在的用户组,因此文件 test.c 的权限情况如下:
①文件 test.c 的拥有者是用户 luoxuesong ,其对文件 test.c 的权限是“rw-”,也就是对该文件拥有读和写两种权限。
②用户 luoxuesong 所在的用户组也叫做 luoxuesong ,其组内用户对于文件 test.c 的权限是“rw-”,也是拥有读和写这两种权限。
③其它用户对于文件 test.c 的权限是“r--”,也就是只读权限。
2.1权限修改(chmod)
chmod用于修改文件或文件夹权限。
chmod [参数] [文件名/目录名]
主要参数:
-c :效果类似“-v”参数,但仅回显更改的部分。
-f :不显示错误信息。
-R :递归处理,指定目录下的所有文件及其子文件目录一起处理。
-v :显示指令的执行过程。
这个766是根据以上表格来算出来的,766=rwx rw- rw-
u+x=归属用户+可执行权限
2.1 文件归属者修改 (chown)
命令 chown 用来修改某个文件或者目录的归属者用户或者用户组。
chown [参数] [用户名.<组名>] [文件名/目录]
其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:
-c :效果同-v 类似,但仅回报更改的部分。
-f :不显示错误信息。
-h :只对符号连接的文件做修改,不改动其它任何相关的文件。
-R :递归处理,将指定的目录下的所有文件和子目录一起处理
-v :显示处理过程。