Linux文件与目录管理

TOC

文件和目录

Linux的目录结构为树状结构,最顶级的目录为根目录/,对于目录的概念主要分为绝对路径相对路径

  • 绝对路径:绝对路径是一个完整的路径,不依赖当前文档的位置。一切由根目录/出发,比如:/usr/local/usr/bin/ect/systemd/...等。
  • 相对路径:相对路径表示目的对象相对于当前文档的位置。

处理文件目常用命令

Linux常使用以下命令来处理文件目录:

  • ls(英文全拼:list files): 列出目录及文件名
  • cd(英文全拼:change directory):切换目录
  • pwd(英文全拼:print work directory):显示目前的目录
  • touch(英文全拼:touch):创建一个新的空文件
  • mkdir(英文全拼:make directory):创建一个新的目录
  • rmdir(英文全拼:remove directory):删除一个空的目录
  • rm(英文全拼:remove): 删除文件或目录
  • cp(英文全拼:copy file): 复制文件或目录
  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

切换目录:cd

用来变换工作目录的命令。
语法:cd【绝对路径/相对路径目的目录】
绝对路径:从/根目录出发文件所在根目录下所在的位置
相对路径:相对当前所在的文件的位置
选项与参数:

  • cd:默认返回到/root目录
  • cd .:当前目录
  • cd ..:返回上级目录
  • cd -: 返回上次目录所在位置
  • cd ~:返回home目录

【示例】

# 绝对路径切换目录到/var/lib目录下
cd /var/lib
# 当前目录在/home下,切换相对路径到/home/jack目录下
cd jack
cd ./jack

查看目录清单:ls

查看目录及文件列表的命令。
语法:ls【选项】【绝对路径/相对路径目的目录】
选项后面没有路径跟随的话就是查看当前目录。
选项与参数:

  • -l:以长格式现实文件和目录
  • -a:显示所有的子目录和文件信息包括隐藏目录
  • -A:相似于-a但是有两个特殊隐藏目录不会显示
  • -d:显示目录的属性,不显示内容
  • -h:显示出目录或文件的大小,默认为B,-h为KB、MB等单位
  • -t:以文件修改时间排序
  • -S:以文件大小排序
  • -R:以递归的方式显示指定目录或文件大小

【示例】

# 显示当前目录的文件目录属性包括隐藏文件
ls -la
# 显示/data目录的文件目录属性列表
ls -l /data

显示当前目录位置:pwd

查看当前所在的工作目录的位置的命令。
语法:pwd
选项与参数:

  • -P:显示出确实的路径,而非使用链接 (link) 路径。

【示例】

# 查看当前工作目录
pwd
/var/lib  # 显示的目录

文件和目录操作

常有的文件和目录的操作就是:创建文件或目录、拷贝和移动文件目录,删除文件或目录。

创建文件:touch

创建文件的命令。
语法:touch【文件名】
文件名可以是相对路径或者是绝对路径。
选项与参数:

  • -a:只修改文件的访问时间(atime),不改变修改时间。
  • -m:只修改文件的修改时间(mtime),不影响访问时间。
  • -c或–no-create:如果文件不存在,不会新建文件,只在文件存在时更新时间戳。
  • -t:使用指定格式的时间字符串设置文件时间,格式较严格。
  • -d:用字符串形式指定时间,支持自然语言。
  • -r:将目标文件的时间戳修改为和其他参考文件相同。

【示例】

# 当前目录创建一个文件a.txt
touch a.txt
# 创建一个文件b.txt如果文件不存在不报错更新时间戳
touch -c b.txt

创建目录:mkdir

创建目录的命令。
语法:mkdir【选项】【目的目录】
加上-p选项依次按目录创建目录,如:mkdir –p /home/a/b/c/d/e,如果目录下没有就创建,没有-p就是只创建最后d目录里的e目录,没有前面的目录则报错。
目的目录可以是相对路径也可以是绝对路径。
选项与参数:

  • -p:递归的方式创建
  • -m:对新建目录设置存取权限,也可以用chmod命令设置

【示例】

# 递归在/data目录下创建a/b目录
mkdir -p /data/a/b

删除空目录:rmdir

删除空目录的命令。
语法:rmdir【选项】【目的目录】
跟mkdir命令一样目的目录可以是相对路径也可以是绝对路径。但是必须是空的目录否则报错。
选项与参数:

  • -p :从该目录起,一次删除多级空目录

【示例】

# 删除test目录
rmdir test/

删除文件目录:rm

删除文件或者目录的命令。
语法:rm【选项】【目录文件对象】
删除目录一定要加上-r选项否则会报错,目录文件对象也可以是相对路径或者是绝对路径。
选项与参数:

  • -f:强制删除文件或目录
  • -i:删除文件或目录是提醒用户确认
  • -r:递归删除整个目录树

【示例】

# 强制删除当前目录的aaa目录
rm -rf aaa
# 删除/data目录下的a.txt文件
rm /data/a.txt
# 删除/data下的test目录
rm -r /data/test

拷贝文件目录:cp

语法:cp【选项】【源目录文件名】【目的目录文件】
注意复制目录的时候一定要加上-r选项才能复制目录下的所有文件,这里的源目录文件名和目的目录文件都可以是相对路径或者是绝对路径,只要找对文件位置即可。
当复制的目录下没有最后的文件名的话则你的源目录文件会被改名。
选项与参数:

  • -a:归档模式,等同于-dR --preserve=all,会尽量保留源文件的所有属性(权限、时间、符号链接等),常用于完整拷贝目录。
  • -f:强制覆盖同名文件或目录
  • -i:覆盖目标同文件或目录是提醒用户确认
  • -p:复制时保持源文件的权限、属主和时间等属性不变
  • -r:递归复制所有文件和目录
  • -v:显示正在复制的过程(调试或确认时很有用)
  • -u:只在源文件比目标文件新,或目标文件不存在时才复制
  • -d:保留符号链接本身,而不是复制它指向的内容(默认会复制实际文件)
  • -l:进行硬式链接(hard link)的链接档创建,而非复制文件本身
  • -s:创建符号链接而不是复制文件。

【示例】

# 复制a.txt文件到/data目录下
cp a.txt /data
# 复制a.txt文件到/data目录下并改名为b.txt
cp a.txt /data/b.txt
# 复制aaa目录到/data目录下有重复强制覆盖
cp -rf aaa /data/

移动文件目录:mv

语法:mv【源目录文件】【目的目录文件】
跟cp命令一样当复制的目录下没有最后的文件名的话则你的源目录文件会被改名。
选项与参数:

  • -i:如果后面的文件存在,询问是否覆盖
  • -f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -u:若目标文件已经存在,且source比较新,才会升级 (update)

【示例】

# 移动aaa目录到/data目录下
mv aaa /data
# 移动aaa目录到/data目录下并改名为bbb
mv aaa /data/bbb

文件内容查看常用命令

Linux常使用以下命令来查看文件内容:

  • cat  由第一行开始显示文件内容
  • tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl   显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行

查看文件:cat

文本输出命令,通常是用于观看某个文件的内容的命令。
语法:cat【选项】【文件名】
选项与参数:

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已
  • -b :显示行号,仅针对非空白行做行号显示,空白行不标行号!
  • -n :显示出行号,连同空白行也会有行号,与 -b 的选项不同
  • -E :将结尾的断行字节 $ 显示出来
  • -T :将[tab]按键以^I显示出来
  • -v :列出一些看不出来的特殊字符

【示例】

# 查看a.txt文件并显示行号包括空格
cat -n a.txt

查看文件:tac

文本输出命令,从最后一行开始显示文件内容的命令。
语法:tac【文件名】
跟cat命令刚刚好相反,cat从头开始正序显示内容,tac从尾部开始倒序显示内容。
【示例】

# 倒序a.txt文件的内容
tac a.txt

显示行号:nl

显示文件的每一行的行号的命令。
语法:nl【选项】【文件名】
选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:
    -n ln :行号在荧幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。

【示例】

# 显示a.txt文件内容和行号
nl a.txt

按页查看文件:more

一页一页翻动文件查看内容的命令。
语法:more【文件名】
选项与参数:

  • 空白键 (space):代表向下翻一页
  • Enter:代表向下翻一行
  • /字串:代表在这个显示的内容当中,向下搜寻『字串』这个关键字
  • :f:立刻显示出档名以及目前显示的行数
  • q:代表立刻离开 more ,不再显示该文件内容
  • b或[ctrl]-b:代表往回翻页,不过这动作只对文件有用,对管线无用

【示例】

more test.txt

按页查看文件:less

一页一页翻动文件查看内容的命令。
语法:less【文件名】
less为more的升级版有查找功能。
选项与参数:

  • 空白键(space):向下翻动一页
  • [pagedown]:向下翻动一页
  • [pageup] :向上翻动一页
  • /字串:向下搜寻『字串』的功能
  • ?字串:向上搜寻『字串』的功能
  • n:重复前一个搜寻 (与 / 或 ? 有关!)
  • N:反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q:离开 less 这个程序

【示例】

less test.txt

按行查看文件:head

查看文件前面几行的命令。
语法:head【选项】【文件名】
选项与参数:

  • -n:进行多行查看,n为显示的行数

【示例】

# 查看前10行a.txt文件内容
head -10 a.txt

按行查看文件:tail

查看文件后面几行的命令。
语法:tail【选项】【文件名】
该命令加上-f选项一般拿来动态实时查看日志。
选项与参数:

  • -n:进行多行查看,n为显示的行数
  • -f:动态查看文件,实时监控文件命令

【示例】

# 查看文件a.txt后10行
tail -10 a.txt
# 实时查看info.log文件
tail -f info.log

文件权限与归属

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

了解文件权限

大家都可以通过ls -l或者ll命令查看文件或者目录的所属权限和用户以及组信息
【示例】查看当前目录文件或者目录权限

root@test:~/test# ls -l
total 4
drwxr-xr-x 2 root root 4096 Aug 30 00:15 aaa
-rw-r--r-- 1 root root    0 Aug 30 00:15 a.txt
-rw-r--r-- 1 root root    0 Aug 30 00:15 b.txt

文件目录权限展示格式:【文件类型】【文件所有者权限】【用户组权限】【组员权限】
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为d则是目录
  • 当为-则是文件;
  • 若是l则表示为链接文档(link file);
  • 若是b则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是c则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为rwx的三个参数的组合。
r对应4: 读取权限(允许查看文件内容、显示文件夹列表)
w对应2: 写权限(允许修改文件内容,允许在没有了中新建,移动,删除文件或子目录)
x对应1: 可执行权限(允许运行,切换目录)

补充:在Linux系统中目录默认权限:755,文件默认权限:644

总的权限值加起来最多为7,如下表所示:

名称 属主权限 属组权限 其他权限
字母权限 r,w,x r,w,x r,w,x
数字权限 4,2,1 4,2,1 4,2,1

目录默认权限:755
文件默认权限:644
如:-rw-r–r--(一般文件权限格式,权限为:644)

文件权限管理:chmod

chmod:设置文件权限
语法:chmod 【u g o a】【±=】【r w x】【目录文件名】
或者chmod【nnn】【文件名】(每个n为权限数对应u g o)
选项和参数:

  • -R:递归修改子目录中所有子项的权限

u:user,用户 g:group,组 o:other,其他人 a:all,所有

命令 对象 操作方式 权限 操作对象
chmod u
g
o
a
+(加入)
-(除去)
=(设定)
r
w
x
文件或目录

【示例1】修改a.txt文件用户的权限加上可执行权限x

chmod u+x a.txt 

【示例2】修改b.txt文件用户和组还有其他人全部加上可执行权限x

chmod a+x b.txt
# 或者换种写法
chmod +x b.txt

【示例3】修改aaa的权限为drwxrwxrwx就是777

chmod 777 aaa

文件属主和属主管理:chgrp和chown

chgrp:修改文件属组
语法:chgrp【选项】【属主】【文件名】
选项和参数:

  • -R:递归修改目录属主

【示例1】修改a.txt文件的属主为test

chgrp test a.txt

chown:修改文件拥有者和文件所属组
语法:chown【选项】【属主】:【组名】【目录文件名】
选项和参数:

  • -R:递归修改目录

【示例1】修改a.txt文件的属主为test

chown test a.txt

【示例2】递归修改包括aaa目录以及以下所有文件目录的属主和属组都为test

chown -R test:test aaa
# 也可以这种写法
chown -R test.test aaa

特殊权限管理

chattr:修改特殊权限
语法:chattr 【±=】【权限选项】【目录文件名】
选项和参数:
i:任何人都不可以修改文件
a:只能追加,不能删除文件内容(不能用文本编辑vim追加,只能用程序追加)
s:文件属组设置s后,文件将以root身份执行,必须有x权限才能设置
t:设置粘贴位,特殊的删除文件,只有文件的属主和root才能删除这个文件

lsattr:显示文件底层属性
语法:lsattr【选项】
选项和参数:

  • -a:显示所有文件属性
  • -d:显示目录属性
  • -R:递归显示