Linux基础篇(三)-- 文件结构及操作

1 FHS标准

        FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准) 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin/sbin 则应该放置可执行文件等等。第二层则是针对 /usr/var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。Linux 目录结构如下图所示:


         FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:

可分享的(shareable)不可分享的(unshareable)
不可变的(static)
/usr(软件放置处)
/etc(配置文件)
/opt(第三方软件)
/boot(开机及内核文件)
可变动的(variable)
/var/mail(用户邮件信箱)
/var/run(程序相关)
/var/news(新闻组)
/var/lock(文件锁相关)

2 目录路径

        使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件,或者在主文件夹里面使用 Ctrl+H 快捷键进行查看),- 表示上一次所在目录, 通常表示当前用户的 home 目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。


3 文件的基本操作

  1. 终端

Linux中控制电脑的窗口,打开它就可以通过 Linux 命令控制电脑的一切。Linux 中很多操作都需要输入命令来进行,这一点与 Windows 上依靠鼠标操作是不同的,这个输入命令的入口就叫「终端」。

        打开一个终端,会默认从当前的用户目录开始操作,这就好比打开“我的电脑”,会默认显示所有磁盘的目录。如下:

shiyanlou:~/ $

        shiyanlou 代表当前用户名,后面的 $ 是命令提示符,提示你:请在后面输入命令。常见的提示符主要有 #$~ 等,#提示符表示当前用户为系统超级管理员用户,即root用户,拥有最高管理权限。$ 提示符表示当前用户为普通用户,只有一定的管理权限。

  1. touch新建空白文件
  • 语法:touch [参数] [文件名]
    如果【文件名】所对应的文件不存在,将创建一个同名的新文件;如果该文件已经存在,则修改这个文件的最后修改日期。
参数含义
-a只更改存取时间
-c不建立任何文件
-d<时间日期>使用指定的日期时间
-m只更改变动时间
-r<参考文件或目录>把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同
-t<日期时间>使用指定的日期时间
–help在线帮助
–version显示版本信息
$ touch file
  1. mkdir新建目录
  • 语法:touch [参数] [文件名]
  • 参数 -p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
            Linux 的目录类似于 Windows 系统中的文件夹
$ mkdir -p father/son/grandson		# 使用 -p 参数,同时创建父目录(如果不存在该父目录)
  1. cp复制文件
  • 语法:cp [参数] [源地址] [目的地址]
参数含义
-a此参数效果和同时指定“-dpR”参数相同
-d当复制符号连接时,将保留原始的链接
-f强制复制文件或目录,不论目标文件或目录是否已存在
-i覆盖既有文件之前先询问用户
-l对源文件建立硬连接,而非复制文件
-p保留源文件或目录的属性
-r递归处理,将指定目录下的文件与子目录一并处理
-R递归处理,将指定目录下的所有文件与子目录一并处理
-s对源文件建立符号连接,而非复制文件
-v显示指令执行过程
$ cp 1.txt father/son/grandson
  1. cp复制目录
$ cp -r father family	# 要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制,就是说有点“株连九族”的意思 
  1. rm删除文件
  • 语法:touch [参数] [文件名]
参数含义
-d直接把欲删除的目录的硬连接数据删成0,删除该目录
-f强制删除文件或目录
-i删除既有文件或目录之前先询问用户
-r递归处理,将指定目录下的所有文件及子目录一并处理
-v显示指令执行过程
$ rm test    # 有时候你会遇到想要删除一些为只读权限的文件,直接使用 rm 删除会显示一个提示,可以使用 -f 参数强制删除
  1. rm删除目录
$ rm -f family	# 不要轻易使用<rm -rf 目录>,这样会连同根目录也删除
  1. mv移动文件
  • 语法:mv [参数] [源地址] [目的地址]
参数含义
-b若需覆盖文件,覆盖前先备份
-f若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录
-i覆盖前先行询问用户
-v执行时显示详细信息
$ mv file document
  1. rename重命名文件
  • 语法:touch [参数] [文件名]

         mv——单个文件移动,rename——实现批量重命名

$ mv file1 myfile    			# mv 命令除了能移动文件外,还能给文件重命名。命令格式为 mv 旧的文件名 新的文件名

$ touch file{1..5}.txt 			# 使用通配符批量创建 5 个文件

$ rename 's/\.txt/\.c/' *.txt 	# 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件

$ rename 'y/a-z/A-Z/' *.c		# 批量将这 5 个文件,文件名和后缀改为大写: 

# rename 命令并不是内置命令,若提示无该命令可以使用 sudo apt-get install rename 命令自行安装。
  1. 查看文件内容
  • 使用cattac nl命令查看文件
    前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。
    nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。

  • 使用 moreless 命令分页查看文件
    打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。
    语法:more [参数] [文件名]

参数含义
-p在显示下一屏之前清屏
-d在每一屏的底部显示友好信息
-s文件中连续的空白行压缩为一行
-num为每屏要求显示的行数
$ more 1.txt
  • 使用 head 和 tail 命令查看文件
    head命令用于显示一个文件的前面几行或前面几个字节;tail命令用于显示一个文件的最后几行或几个字节。
    语法:head/tail [参数] [文件名]
参数含义
-c num显示最后num个字节
-num显示最后num行,若缺省,则显示10行
  1. 查看文件类型
    在Linux中文件可以没有扩展名,是否具备某种属性,主要取决于文件的属性和类型。在Ubuntu Linux中主要有以下文件类型:
参数含义
-普通文件,通常是被一些应用程序创建的,如文档、图片等
d目录,可以包含多个目录,也可以归属于其他目录
c字符设备,串口设备,比如调制解调器等
b块设备,存储数据以供系统存取的接口设备,比如硬盘、光驱等
l符号链接文件,相当于一个快捷方式,指向目标文件
s套接口文件,用于网络通信的文件
p管道文件,主要指FIFO文件,即先入先出模式的管道文件,这是一种进程间通信机制

        file命令查看文件的类型

  • 语法:file [参数] [文件名]
参数含义
-b列出辨识结果时,不显示文件名称
-c详细显示指令执行过程,便于排错或分析程序执行的情形
-L直接显示符号连接所指向的文件的类别
-v显示版本信息
  1. 编辑文件

        在 Linux 下面编辑文件通常我们会直接使用专门的命令行编辑器比如(emacsvimnano)。

$ vim hello.py
  1. 查询文件
  • find命令用于在目录结构中查询文件
    • 语法:find [路径] [参数] [关键字]
    • 说明:路径表示要查找的目录结构,如果缺省,则表示查找路径为当前目录;关键字可以是文件名的一部分。
参数含义
-ctime <24小时数>查找在指定时间内被修改的得文件或目录,单位以24小时计算
-depth从指定目录下最深层的子目录开始查找
-gid <群组识别码>查找符合指定的群组识别码的文件或目录
-group <群组名称>查找符合指定的群组名称的文件或目录
-name filename查找与filename字符串匹配的文件或目录,可使用通配符
-size <文件大小>查找符合指定的文件大小的文件
-typ <文件类型>查找符合指定的文件类型的文件
-uid <用户识别码>查找符合指定的用户识别码的文件或目录
-used <天数>查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以天计算
-user <拥有者名称>查找符合指定的拥有者名称的文件或目录
  • locate指令用于查找符合条件的文件
    • 语法:locate [参数] [关键字]
参数含义
-d <数据库文件>设置locate指令使用的数据库,取代默认的数据库
-w匹配整个路径
-c只显示找到的条目数量
  • grep查找内容包含指定的关键字的文件
    • 语法:grep [参数] 关键字 文件列表
    • 说明:grep命令一次只能查找一个关键字,但文件列表可以包含多个文件。
      | 参数 | 含义 |
      |----|---------------|
      | -i | 忽略字符大小写的差别 |
      | -v | 反转查找,只显示不匹配的行 |
      | -x | 只显示整行严格匹配的行 |
      | -r | 在指定目录中递归查找 |

4 文件权限

        Linux 系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是 Linux 有别于 Windows 的机制,也是基于这个权限机制,Linux 可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在 Linux 是用户所赋予的。

        Linux的文件权限有以下设定:

  • Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
  • Linux下权限的属组有 拥有者(User) 、群组(Group) 、其它组(Other) 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。
  • 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
  1. 查看文件权限

        Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
        使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

sudo usermod -G sudo lilei        		   # 将其他用用户加入sudo用户组
sudo chown shiyanlou  1.txtx       		   # 变更文件所有者
echo "echo \"hello shiyanlou\"" > 1.txt    # 文件里面添加内容
chmod 600 iphone11 ls -alh 1.txt    	   # 修改文件权限
  1. 修改文件权限
  • 方式一:二进制数字表示
    rwx——每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,这个顺序是固定的。。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,
  • 若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7
  • 若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
  • 若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。即我们可以用用三个8进制数字分别表示 拥有者 、群组 、其它组( u、 g 、o) 的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。

chmod 600 iphone11
  • 方式二:加减赋值操作
chmod go-rw iphone11
# + 和 - 分别表示增加和去掉相应的权限。

        常见的权限形式有:

-rw------- (600)    只有拥有者有读写权限。
-rw-r--r-- (644)    只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)    只有拥有者有读、写、执行权限。
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)    所有用户都有文件读、写权限。
-rwxrwxrwx (777)    所有用户都有读、写、执行权限。

5 帮助命令

        内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在 bash 源码的 builtins 里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。
        外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin 等等。比如:ls、vi 等。
helpman命令

help ls
ls --help
man ls
info ls

参考

  1. FHS_3.0 标准文档:https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf
  2. Linux 学习教程:https://www.bilibili.com/video/BV1mW411i7Qf?from=search&seid=7188820565101289993
  3. Linux权限详解:https://blog.csdn.net/u013197629/article/details/73608613
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长路漫漫2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值