Linux文件操作

Linux的基本思想之一是:一切都是文件。

系统中的所有都被视为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。

Linux目录树

为了统一Linux各分支(distributions)的目录结构,引入了文件目录配置标准(File Hierarchy System,FHS)

Linux的目录是以目录树的结构组织的,所有目录都在根目录下(/), 其它所有的目录、文件、设备都在/之下.

从根目录开始的文件路径称为绝对路径,同一系统下的每个文件的绝对路径是唯一的

.表示工作目录(如./file),..表示上一层目录,-代表上一个工作目录,代表当前用户的home目录,~用户名代表相应用户的home目录

根目录下第一层目录为:

  • /bin:bin 是二进制(binary)英文缩写, 常用的系统命令文件均处于此目录下.

  • /boot:Linux的内核及引导系统程序所需要的文件目录.

  • /cdrom: 光盘挂载目录

  • /dev: dev 是设备(device)的英文缩写,保存设备文件,并非设备驱动

  • /etc: 系统配置目录

  • /home: 普通用户主目录

  • /lib: 存放动态链接库(dll)

  • /lost+found: 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统

  • /mnt: 常用作存储设备挂载目录

  • /media: 某些发行版用作存储设备挂载目录

  • /proc: 存储在内存中的虚拟文件系统,包括内存中系统内核,进程,网络与外部设备状态等.

  • /sys:与/proc类似的存储在内存中的虚拟文件系统,主要记录与内核有关的信息包括已加载的内核模块,内核检测到的硬件设备等.

  • /root:Linux超级权限用户root的home目录.

  • /sbin: 这个目录是用来存放系统管理员的系统管理程序,只有超级权限用户root可执行此目录下的命令,普通用户无权限执行这个目录下的命令.

  • /selinux :Secure Enhance Linux执行目录,主要进行程序(特别是网络程序)的权限控制.

  • /tmp:临时文件目录,用来存放不同程序执行时产生的临时文件.

  • /srv: 服务所需的数据目录

  • /usr: 存放用户应用程序和文件, /usr/local通常用来存放手动安装而不是由包管理器安装的文件.

  • /usr/share: 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。

  • /var: var是vary的简写,用于存放频繁变动的文件,比如/var/log用来存放系统日志.

Linux文件类型

普通文件

存储器存储的数据文件,由ls -l命令将这类文件的类型标记为[-].

可以大致分为:

  • 纯文本文件: 以ASCII编码存储的文件

  • 可执行二进制文件

  • 二进制数据文件

二进制文件是否可执行不由后缀名而由是否拥有x权限来确定.

文件名由主文件名和后缀名两部分组成,以'.'开始文件为隐藏文件.ls命令不显示隐藏文件,需要使用ls -a参数显示隐藏文件.

Linux下的后缀名只提醒文件类型,不具有文件关联. 现在很多Linux桌面环境都提供了根据后缀名调用相应程序读取文件的功能.

目录文件

目录,类型显示为[d].

符号链接文件

类似Windows下的快捷方式,类型显示为[l].

设备文件

系统外设在Linux下被认为是一个文件, 分为:

-块设备文件

提供随机访问的设备,如硬盘。类型标为[b].

  • 字符设备文件

串行端口的接口设备,只能进行顺序读取。例如键盘、鼠标等等。类型标为 [c].

套接字

网络通信套接字(socket),类型标记为[s]

管道文件

解决多进程并发读写同一个文件的特殊类型,类型标记为[p].

Linux文件权限和属性

文件权限和属性

ls命令可以显示文件的属性和权限,

 $ls -al
 -rwxr-xr--  1  root  root  42304  Sep 4 18:26  install.log

第一个字符代表文件的类型, [-]代表文件,[d]代表目录,[l]代表链接文件, [b]块设备文件,[c]字符设备文件

后面的九个字符分为三组,每组字符依次代表文件所有者(user),用户组(group),他人(others)的权限. 超级用户(root)对文件的访问是不受限制的.

每组由r,w,x三个字符组成,[r]代表可读(read),[w]代表可写(write),[x]代表可执行(execute)。三个字符的位置不会改变,如果没有该权限相应位置将出现[-].

对文件而言,r代表读取文件内容的权限,w代表修改文件的权限但没有删除文件的权限,x代表执行权限。

Windows系统下的文件可否执行由后缀名决定,Linux操作系统下文件能否执行取决于有无可执行权限,当然执行不可执行的文件系统将报错。

对目录而言,r代表读取目录内容的权限,用户可以用ls命令查看目录下的内容; 目录的可执行权限代表能否使用cd命令将该目录变成工作目录,如果无法转换成工作目录那么用户也无法执行该目录下的命令。

对目录的可写权限[w]代表可以对目录下的文件和子目录进行删除(即使对该文件/目录本身没有任何权限),重命名,移动,复制,新建等所有权限。但是,拥有该权限不能对目录本身进行上述操作,那是它父目录的权限。

第二列的数字表示有多少文件名链接此节点(inode), 文件系统通过inode记录文件的权限和属性.

第三列表示文件所有者,第四列表示所属用户组.

第五列表示文件大小单位为字节, 第六列表示最后修改日期.

最后一列是文件名, 以"."开头的文件名表示为隐藏文件.

Linux的文件包括修改时间(Modification Time,mtime); 状态改变时间(Status Time, ctime);读取时间(Access Time, atime).

当文件被读取时atime将会更新,当属性或权限改变时将会更新ctime但不会更新mtime,后者只会在文件内容被改变时更新。通常使用ls命令查看时显示的是文件的mtime.

修改所有者和文件权限

** 改变文件所有者 **

chown [-r] [user] [file]

r代表递归(recursive)即应用到所有子目录和子文件夹

user参数可以同时修改所有者和用户组, 中间用":"或"."分隔, 如chmod user.grp file

也可以只修改文件用户组, chmod .grp file

** 修改文件用户组 **

chgrp [-r] [grp] [file]

用法类似chown, 但只能修改用户组

** 改变文件权限 **

chmod [-r] [expr] [file]

-r选项代表递归, expr为权限表达式有数字式或符号式两种.

数字式的每一位由1,2,4分别代表x,w,r三种权限, 0代表无权限. 三者之和为某一身份用户的所有权限如7代表所有权限, 5代表rx权限.

数字式由三位数字组成,分别代表owner, group和other的权限, 如chmod 777 file 代表所有人都有rwx权限, chmod 740代表owner有rwx, group有r权限,其它人无权限.

符号式用u,g,o代表所有者, 用户组和其它用户, a代表所有用户. r,w,x代表读,写,执行权限三者可以以任意顺序组合.

"="代表指定用户权限, 如chmod a=rxw给予所有用户所有权限, chmod g=rx,o=r给予用户组rx权限无w权限, 其他人r权限无wx权限.

"+"代表新增权限,若用户已拥有新增的权限则不起作用, 'chmod a+r'所有人新增r权限

"-"代表移除权限, 若用户本无此权限则不起作用, chmod o-x移除other的x权限.

默认文件权限

umask [-S] [expr]

umask用于设置权限掩码, 掩码是默认不给与用户的文件权限.

在没给出掩码参数时该命令将显示当前掩码.显示掩码时,使用-S参数将显示符号式默认权限.

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

设置掩码时只能采用数字式, 后三位的含义与chmod的数字式表达相同, 第一位代表特殊文件权限.

特殊文件权限

umask中的第一位代表特殊文件权限SUID,SGID,SBIT.

SUID(Set UID)仅对二进制可执行文件有效,且用户必须拥有其执行权限。SUID属性的文件在其执行期间(run tiime),执行者拥有和文件所有者相同的权限。

SGID(Set GID)与SUID类似,只是执行者只拥有用户组权限.

当文件被设置了SUID或SGID权限时,使用ls命令查询权限时所有者或用户组的执行权限位置会显示s而非x

SBIT(Sticky Bit)仅对目录有效,当用户对目录拥有w、x权限时,其在其下创建的文件或目录只有自己或着root可以删除。设置了SBIT权限后,others执行权限位置将显示t.

Linux常用文件操作

这里只列出指令常用操作, 更详细的操作请使用man--help等帮助系统和文档.

cd

cd [path]

切换工作目录

pwd

pwd

显示工作目录(Print Working Director).

在使用链接文件作为工作目录时:

  • -L--logical : 显示链接文件的路径

  • -P--physical(默认): 显示链接指向的路径

ls

ls [dir]

选项:

  • -a (--all) 列出所有文件包括隐藏文件和“.”、“..”这两个目录

  • -A (--almost-all) 列出所有文件和目录,但不包括“.”和“..”这两个目录

  • -d (--director) 仅列出当前目录的信息,不列出子目录和文件的信息

  • -f 不进行排序直接列出结果(默认按文件名进行排序)

  • -h (--human-readable) 以人类较易读的方式(KB ,MB,)的形式列出文件大小

  • -l 使用长数据格式,包含权限和属性等信息

  • -n (--numeric-uid-gid) 使用UID和GID来代替用户和用户组名

cp

复制文件或目录

cp [src] [dest]

选项:

  • -a (--archive) 此参数的效果和同时指定"-dpR"参数相同

  • -b (--backup) 删除、覆盖目的文件先备份。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录

  • -f (--force) 强行复制文件或目录, 不论目的文件或目录是否已经存在

--i (--interactive)覆盖文件之前先询问用户

  • -l (--link) 对源文件建立硬链接,而非复制文件

  • -p (--preserve) 保留源文件或目录的属性,包括所有者、所属组、权限与时间

  • -r (--recursive) 递归处理,将指定目录下的文件及子目录一并处理

  • -s (--symbolic-link) 对源文件建立符号链接,而非复制文件

  • -u (--update) 只有当源文件比目标文件更新或目标文件不存在时才进行复制

cp的源文件可以是单个或多个,当源文件是多个时目标文件必须是目录.

cp产生的目标文件权限通常是命令操作者,若要保留原权限需要使用p参数.

rm

移除文件或目录

rm [file/dir]

选项:

  • -f (--force)忽略不存在的文件,不出现警告信息
  • -i (interactive)移除前将询问是否要执行操作
  • -r (recursive)递归删除,将子文件和子目录一同删除

参数也可以是正则表达式

mv

mv [src] [dest]

移动或重命名文件(目录)

选项:

  • -f (--force) 强行复制文件或目录, 不论目的文件或目录是否已经存在
  • -i (--interactive) 覆盖文件之前先询问用户
  • -u (--update) 只有当源文件比目标文件更新或目标文件不存在时才进行复制
  • -n (--no-clobber)不进行覆盖

mkdir

mkdir [dir]

创建空目录

选项:

  • -m (--mode)直接设置文件权限而不使用umask

  • -p (--parents)递归建立父目录

  • -v (-verbose)每次创建都返回报告

rmdir

rmdir [dir]

删除空目录

cat

cat [file]

查看文本文件

选项:

  • -A 此参数的效果和同时指定-vET参数相同
  • -b (--number-nonblank)显示行号,不含空行
  • -E (--show-ends)显示结尾的“$”字符
  • -n (--number)显示行号,包含空行
  • -T ( --show-tabs)将[Tab]以^I显示出来
  • -v ( --show-nonprinting)显示非打印字符

touch

touch [file]

修改文件时间,当文件不存在时创建空文件。

-a 仅修改atime
-c 仅修改ctime
-d 不使用系统日期,而使用给定日期
-m 仅修改mtime
-t 不使用系统时间,而使用给定时间

tac

就是以行为单位反向查看,与cat正好相反(连名字也是~)

head / tail

head [file]

显示文件开头或结尾

-c k 显示开头(结尾)的k个字符。head中-k 表示除最后k个字符外均显示,tail中+k表示除开头k个字符外均显示。

-n k 显示开头(结尾)的k行。head中-k 表示除最后k行外均显示,tail中+k表示除开头k行外均显示。

默认显示前(末)10行,可以通过选项来调整。

less / more

less [file]

可以上下翻页,操作和man page相同提供翻页,查找等操作。

more [file]

可以实现翻页查看,只能向下查找。:f可以显示文件名和行数

nl

显示行号的输出,可以进行更多个性化设置

更多操作参见Linux帮助系统

原文地址:https://www.cnblogs.com/Finley/p/5520507.html