二、文件管理与文本编辑器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 保存退出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容