二、文件管理与文本编辑器vim

一、Linux文件系统结构

       文件和目录被组织成一个单根倒置树结构,从根目录下开始,用“/”表示,根文件系统(rootfs):root filesystem路径为分隔的 /。


文件系统树结构
  • /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
  • /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
  • /lib64:专用于x86_64系统上的辅助共享库文件存放位置
  • /etc:配置文件目录
  • /home/USERNAME:普通用户家目录
  • /root:管理员的家目录
  • /usr:存放所有命令、库、手册页
  • /dev:存放设备文件
  • /var:包含经常发生变动的文件,如邮件、日志文件、计划任务等
  • /tmp:存放临时文件
  • /run:存放自系统启动以来描述系统信息的文件。

二、文件元数据

文件有两类数据:
元数据:metadata
数据:data

       元数据包含属性(Mode)、所有者信息(owner info)、大小(Size)、时间戳(Timestamps)。

命令名称:stat
命令所在路径:/bin/stat
执行权限:所有用户
功能描述:显示文件的元数据信息
语法:stat [-c] 文件名
选项:
-c 自定义输出格式
%a 以八进制格式显示文件访问权限
%A 以可读形式显示访问权限

范例1:
显示文件的元数据信息

命令:stat anaconda-ks.cfg
执行结果:
File: ‘anaconda-ks.cfg’
Size: 1419            Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33574992    Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-06 12:10:57.881048189 +0800
Modify: 2020-04-06 12:10:57.885048189 +0800
Change: 2020-04-06 12:10:57.885048189 +0800
 Birth: -

输出解释:
File:文件名
Size:文件大小(单位:B)
Blocks:文件所占扇区个数,为8的倍数(通常的 Linux 的扇区大小为 512 B,连续八个扇区组成一个block)
IO Block:每个数据块的大小(单位:B)
regular file:普通文件(此处显示文件的类型)
Inode:文件的Inode号
Links:硬链接次数
Access:权限
Uid:(属主id/属主名)
Gid:(属组id/属组名)
Access:最近一次访问时间
Modify:内容/数据改动时间
Change:属性改动时间

命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户
功能描述:创建空文件,刷新时间戳
语法:touch [-a] 文件名
选项:
-a 仅改变 atime和ctime
-m 仅改变mtime和ctime

范例1:
创建一个空文件

命令:touch newfile;stat newfile
执行结果:
  File: ‘newfile’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 33638660    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-10 14:06:46.891046046 +0800
Modify: 2020-04-10 14:06:46.891046046 +0800
Change: 2020-04-10 14:06:46.891046046 +0800
 Birth: -

范例2:
更新文件的时间戳信息

命令:touch newfile;stat newfile
执行结果:
  File: ‘newfile’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 33638660    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-10 14:06:59.701046720 +0800
Modify: 2020-04-10 14:06:59.701046720 +0800
Change: 2020-04-10 14:06:59.701046720 +0800
 Birth: -

对比范例1的执行结果发现时间戳信息已被刷新

三、文件链接

硬链接,并列关系,不同名称且独立,不能跨设备(分区)
软链接,类似Windows的快捷方式,删除对原文件不会产生影响

命令名称:ln
命令所在路径:/bin/ln
执行权限:所有用户
功能描述:创建文件链接
语法:ln [-sf] 原始文件名 链接文件名
选项:
-s 创建一个符号链接
-f 强制,创建链接文件时如已存在则覆盖

范例1:
创建一个硬链接

命令:cd /etc;ln hosts hosts.hard
           ls -l hosts
执行结果:
-rw-r--r--. 2 root root 158 6月   7 2013 hosts

从执行结果可以看到创建时原始文件的链接数递增+1

尝试删除原始文件,查看链接文件内容是否依旧存在。

命令:rm -f hosts(删除前通过cp命令进行文件备份)
     cat hosts.hard 
执行结果:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

从上述执行结果可以看到原始文件即使被删除,硬链接文件不会受到影响。

范例2:
创建一个软链接

命令:cd /root;ln -s newfile newfile.link
     ls -l newfile.link;ls -l newfile
执行结果:
lrwxrwxrwx. 1 root root 7 4月  10 14:27 newfile.link -> newfile
-rw-r--r--. 1 root root 0 4月  10 14:30 newfile

从执行结果可以看到为newfile创建软链接文件newfile.link,链接数不会递增。

尝试删除原始文件,查看链接文件内容是否依旧存在。

命令:rm -f newfile
     cat newfile.link 
执行结果:
cat: newfile.link: 没有那个文件或目录

从上述执行结果可以看到原始文件被删除,软链接文件将会受到影响。

通过实验操作,得出硬链接和软链接区别如下:
1.本质:硬链接同一个多个名字,软链接不同文件
2.跨分区,硬链接不支持跨设备
3.目录,硬链接不支持对目录创建
4.相互关系,硬链接为平等关系,软链接有依赖关系
5.inode号
6.链接数,软链接不会增长链接数
7.路径,软链接原始文件路径相当于链接文件,硬链接相对于当前目录
8.文件类型,软链接为l,硬链接同原始文件

四、文件管理常见命令

1.pwd
命令所在路径:/bin/pwd
执行权限:所有用户
功能描述:显示当前的工作目录

范例1:
显示当前所在的工作目录

命令:pwd
执行结果:
/root

2.cd
命令所在路径:/bin/cd
执行权限:所有用户
功能描述:切换目录

范例1:
切换到指定的目录

命令:cd /etc

范例2:
切换到上一次目录

命令:cd -

范例3:
切换到上级目录

命令:cd ..

3.mkdir
命令所在路径:/bin/mkdir
执行权限:所有用户
功能描述:创建文件夹
语法:mkdir [-pv] 文件夹名
选项:
-p 多级文件夹
-v 显示详细的输出

范例1:
创建一个指定名称的文件夹

命令:mkdir newdir

范例2:
创建多级目录

命令:mkdir -p dir1/dir2

范例3:
创建目录并显示详细的过程

命令:mkdir -pv dir3/dir4/dir5
执行结果:
mkdir: created directory ‘dir3’
mkdir: created directory ‘dir3/dir4’

4.rm
命令所在路径:/bin/rm
执行权限:所有用户
功能描述:删除文件/文件夹
语法:rm [-rf] 文件/文件夹
选项:
-r 删除文件夹
-f 强制执行

范例1:
删除一个指定名称的文件

命令:rm newfile
rm: remove regular empty file ‘newfile’? y

范例2:
删除一个指定名称的文件夹

命令:rm -r dir3
rm: descend into directory ‘dir3’? y
rm: remove directory ‘dir3/dir4’? y

范例3:
强制删除一个指定名称的文件

命令:rm -f newfile.link

5.rmdir
命令所在路径:/bin/rmdir
执行权限:所有用户
功能描述:删除空文件夹
语法:rmdir 文件夹
选项:
-p 递归删除文件夹

范例1:
删除一个空文件夹

命令:rmdir dir1

6.ls
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:列出文件的信息
语法:ls [-alh] [-Rt] 文件/文件夹
选项:
-a 显示所有文件,包含隐藏文件
-l 以长格式显示文件详细信息
-h 以方便查看的形式显示文件大小
-R 递归显示
-t 以最新的内容修改时间作为条件倒序显示

范例1:
查看指定文件的详细信息

命令:ls -l anaconda-ks.cfg
执行结果:
-(文件类型,普通文件)rw-------(权限). 1(引用次数) root(所有者) root(所属组) 1419(文件大小,单位Bytes) Apr  6 12:10(默认日期时间) anaconda-ks.cfg(文件名)

范例2:
递归显示/etc目录下的文件/文件夹

命令:ls -R /etc
执行结果:
/etc:
adjtime
aliases
aliases.db
alternatives
anacrontab
asound.conf
audisp
audit
bash_completion.d
bashrc
……

7.file
命令所在路径:/bin/file
执行权限:所有用户
功能描述:显示文件的类型
语法:file [-bL] 文件名称
选项:
-b 列出文件辨识结果时,不显示文件名称
-L 查看指定软链接对应文件的文件类型

范例1:
查看指定文件的类型

命令:file anaconda-ks.cfg
执行结果:
anaconda-ks.cfg: ASCII text

8.cp
命令所在路径:/bin/cp
执行权限:所有用户
功能描述:拷贝文件/文件夹
语法:cp [-rpa] 源文件/文件夹 目标文件/文件夹
选项:
-r 拷贝目录
-a 归档,相当于-dR --preserv=all
-p 等同于 --preserve=mode,ownership,timestamps

范例1:
将一个文件拷贝到指定目录下

命令:cp /etc/profile /tmp

范例2:
将一个文件夹拷贝到指定目录下

命令:cp -r /etc/ /tmp

9.mv
命令所在路径:/bin/mv
执行权限:所有用户
功能描述:移动文件/文件夹位置或重命名
语法:mv [-b] 源文件/文件夹 目标位置或新名称
选项:
-b 目标存在,覆盖前先备份,形式为filename ~

范例1:
将一个文件移动到指定目录下

命令:mv newfile /opt

范例2:
重命名一个文件

命令:mv newfile1 newfile2

五、vi/vim文本编辑器

三种工作模式:

  1. 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
  2. 插入(Insert)或编辑模式:修改文本
  3. 扩展命令(extended command )模式:保存,退出等

命令名称:vi
命令所在路径:/bin/vi
执行权限:所有用户
功能描述:编辑文件内容
语法:vi [-br] 文件名
选项:
-b 二进制方式打开文件
-r 恢复之前记录的会话

查找并替换功能
格式:s/要查找的内容/替换为的内容/修饰符
修饰符:
i 忽略大小写
g 全局替换,默认情况下,每一行只替换第一次出现
gc 全局替换,每次替换前询问

范例1:
查找替换删除/tmp/profile文件中行首的空白字符

命令:vi /tmp/profile
%s/^[[:space:]]\+//
33 substitutions on 33 lines

输入:wq 保存退出

范例2:
vim中设置TAB缩进4个字符

命令:vi .vimrc
set ts=4

输入:wq 保存退出

你可能感兴趣的:(二、文件管理与文本编辑器vim)