Linux 文件系统基础

1、Linux发行版系统目录名称命名规则以及用途

http://www.pathname.com/fhs/

目录 描述
/bin 所有用户可用的基本命令程序文件;
/sbin 供系统管理使用的工具程序;
/boot 引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等;
/dev 存储特殊文件或设备文件; 设备有两种类型:字符设备(线性设备)、块设备(随机设备);
/etc: 系统程序的配置文件,只能为静态;
/home 普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME;
/root 管理员的家目录;可选;
/lib 为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块;
/lib64 64位系统特有的存放64位共享库的路径;
/media 便携式设备挂载点,cdrom, floppy等;
/mnt 其它文件系统的临时挂载点;
/opt 附加应用程序的安装位置;可选路径;
/srv 当前主机为服务提供的数据;
/tmp 为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;
/usr 全局共享的只读数据路径;
/usr/local 让系统管理员安装本地应用程序;也通常用于安装第三方程序;
/var 存储常发生变化的数据的目录;
/proc 基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward;
/sys sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的的接口;

2、stat 命令查看文件的元数据信息

$ stat test.txt          
  File: test.txt
  Size: 5               Blocks: 8          IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 917656      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      hx)   Gid: ( 1000/      hx)
Access: 2019-12-03 17:58:12.144463726 +0800
Modify: 2019-12-03 17:58:40.491315603 +0800
Change: 2019-12-03 17:58:40.491315603 +0800
 Birth: -

简单的介绍一下stat命令显示出来的文件其他信息:

  • File:显示文件名
  • Size:显示文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)
  • Device:设备编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid、Uid:文件所有权的Gid和Uid。

Linux下的三个时间:

  1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
  2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

3、软链接和硬链接区别

  • 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块;
  • 软链接: 软链接又叫符号链接,它实际上是一个特殊的文件,有点类似于 Windows 的快捷方式。这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
# 创建硬链接: ln TARGET LINK_NAME
$ ln test.txt hlink_test.txt

# 创建软链接: ln -s TARGET LINK_NAME
$ ln -s test.txt slink_test.txt

$ ll
total 8
-rw-rw-r-- 2 hx hx 7 Dec  3 18:12 hlink_test.txt
lrwxrwxrwx 1 hx hx 8 Dec  3 18:15 slink_test.txt -> test.txt
-rw-rw-r-- 2 hx hx 7 Dec  3 18:12 test.txt

软链接的特点:

  1. 要建立链接时,LINK_NAME必须是存在的;而当TARGET不存在时建立的连接是一个空链接,相当于空指针。空链接文件也可以操作,而且如果对空链接进行操作,比如 emptyFile是空链接,进行vi emptyFile输入一些字符后保存,那么系统会自动生成一个对应emptyFileTARGET空链接会变成一个软链接;

  2. LINK_NAME指向TARGET,当TARGET的内容改变时,LINK_NAME的内容也会改变,反过来也是一样,当LINK_NAME改变也会导致TARGET改变;

  3. 当删除LINK_NAME 时,不会对TARGET产生影响。而删除TARGET时,LINK_NAME会变成一个空链接,见第1条后半段。如果此时再创建一个与之前TARGET同名的文件,就会重新建立链接。但此时TARGETLINK_NAME的内容都为空。

硬链接的特点:

  1. TARGET 文件必须存在;
  2. TARGETLINK_NAME相互影响,同步执行,创建了硬链接相当于文件实体多了入口;
  3. 建立硬链接后,TARGETLINK_NAME的链接数都为2,当删除TARGET后,LINK_NAME的内容不受影响,但其链接数减少一,从链接文件变成一个普通文件。

对文件链接:

  1. 文件可以创建硬链接,增加了文件的入口,但是创建硬链接不能跨分区
  2. 其实文件名本身就是个硬链接,也是文件入口

对于目录链接

  1. 目录不能创建硬链接,目录可以创建软链接
  2. 每个目录下都会有两个硬链接, . 当前目录, .. 上级目录

4、Linux上的常用文件管理类命令

cp 命令:复制文件

$ man cp
NAME
       cp - copy files and directories
SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST       # 复制单个文件
       cp [OPTION]... SOURCE... DIRECTORY    # 复制多个文件
       cp [OPTION]... -t DIRECTORY SOURCE... # 复制多个文件
# 常用选项:
    -i:交互式复制,即覆盖之前提醒用户确认;
    -f:强制覆盖目标文件;
    -r, -R:递归复制目录;
    -d:复制符号链接文件本身,而非其指向的源文件;
    -a:-dR --preserve=all, archive,用于实现归档;
    --preserv=
        mode:权限
        ownership:属主和属组
        timestamps: 时间戳
        context:安全标签
        xattr:扩展属性
        links:符号链接
        all:上述所有属性

$ touch demo-{1..5}.txt
$ ll
total 12
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-5.txt

$ cp demo-1.txt /tmp/
$ cp demo-1.txt demo-2.txt demo-3.txt /tmp
$ cp -t /tmp/  demo-4.txt demo-5.txt 
$ ll /tmp/
total 0
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-1.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-2.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-3.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-4.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-5.txt

mv 命令:移动文件

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..            

常用选项:
  -i:交互式;
  -f:force
  
$ mv demo-1.txt /tmp/
$ mv demo-2.txt demo-3.txt /tmp/
$ mv -t /tmp/ demo-4.txt demo-5.txt

# 目标文件存在是,交互式确认
$ mv -i demo-1.txt /tmp/
mv: overwrite '/tmp/demo-1.txt'? 

# 目标文件存在是,强制覆盖
$ mv -f demo-1.txt /tmp/

rm命令:删除文件

rm [OPTION]... FILE...

常用选项:
  -i:interactive
  -f:force
  -r: recursive
$ rm -i demo-2.txt 
rm: remove regular empty file 'demo-2.txt'?

# 强制递归删除,谨慎使用
$ rm -rf demo-2.txt 

5、vi 文本查找替换

在末行模式下:
语法:     [range]s/s1/s2/ [option]

[range] 表示检索范围,省略时表示当前行
         1,10表示从第 1 行到 10 行
         %表示整个文件,同1,$
         .,$表示从当前行到文件尾
         s 为替换命令
         s1 要被替换的串,s2 为替换的串
        
[option] 表示选项:
            /g表示在全局文件中进行替换。
            /c表示在每次替换之前需要用户进行确认。
            省略时仅对每行第一个匹配串进行替换。


1. :s/old/new/     把当前行第一个出现的old替换成new,后面加g就是替换当前行所有
2. :1,5 s/old/new  把1到5行的第一个old替换成new,可以加g表示所有
3. :3,$s/old/new/  把从3行开始到最后一行的第一个出现的old替换成new,后面加g替换当前行所有,3用.表示就是当前行
4. :%s/old/new/    把所有行的第一个old替换成new,后面加g表示替换当前行所有

用查找替换命令删除/tmp/profile文件中的 行首的空白字符

$ cp /etc/profile /tmp/
$ vi /tmp/profile
vi-1575440956160.png

6、在vim中设置tab缩进

# 设置tab缩进为4个字符宽度
set tabstop=4 或 set ts=4

# TAB替换为空格
:set ts=4
:set expandtab
:%retab!

# 空格替换为TAB
:set ts=4
:set noexpandtab
:%retab!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容