文档章节

Linux 文件指令

simpower
 simpower
发布于 2014/11/10 18:15
字数 2604
阅读 102
收藏 11
点赞 0
评论 0

只 要是磁盘就得 式化,好像已经是天经地义的事情了,几乎没有人去问为什么。很多有经验的同学 乎都有过这样的经历,就是风风火火的从朋友那里借来了一张装满高清岛国爱情动作片的移动硬盘,暗爽过后还想留下一些待以后慢慢品味,可是总有那么一些质量 比较好的片子(尺寸超过 4G)复制失败。追问原因还往往被高手们嘲笑:“都什么年代了你还用 FAT32,赶紧换 NTFS 吧。”我想这个时候你就不得不追问一下,为什么 FAT32 不行而 NTFS 却能行吧? 

    因为它们是不同的文件系统,功能不同,能力不同。FAT32 是 在 Windows95 时代开始采用的文件系统,到现在都有人在用(比如 U盘),可以说是伴随着我们成长的文件系统。FAT 是 File Allocation Table 的缩写,从字面意义上就能看出这是一种类 表 一样的文件系统。由于其用于描述文件大小的属性是一个 32 位的 ,导致其能够支持的单个文件最大不能超过 4G。而 NTFS 是微软专门为 NT 系统设计的,单个文件最大可以达到 2T。现在最为常用的 Windows XP 和 Windows 7 都支持 NTFS。至于 NTFS 是怎么管理文件的有点不太好说,因为微软一直当它是个“秘密”。

    Linux 也有自己的文件系统 式,被称为 ExtN(N=2、 3、4)。如果要追溯 ExtN 的起源,其实要比 FAT32 和 NTFS 都要古老。ExtN 文件系统必定要包含 inode 数据结构来代表一个文件,并且存储这个文件的各种属性和权限。至于实际的数据则放在 data block 块区中。除此之外,ExtN 文件系统还有一个超级块区(super block),用于记录整个文件系统的整体信息,包括 inode 与 data block 的总量、使用量和剩余量。

    使用 stat -f filename 可查看系统的 inode 和 data block 使用情况。

        -f, --file-system
              display file system status instead of file status

    weiyuzhang@weiyuzhang:/work/windows$ stat -f /work/workspace/so/main
    文件:"/work/workspace/so/main"

   以下输出都跟 main 文件无关
    ID:1371e0e3c96e0461 文件名长度:255     类型:ext2/ext3
    块大小:4096       基本块大小:4096
    块:总计:23151106   空闲:14056882   可用:12880870
    Inodes: 总计:5881856    空闲:5836277

    data block 与 inode 一样,每一个都有一个唯一编号,inode 只需要记录这些编号,就能够定位整个文件的任意一段数据。我们假定有一个编号为 3 的 inode,它所代表的文件的数据被放置在编号为 2、5、6、8、13 和 20 的这几个 data block 中。那么读取这个文件的过程则如 图1 所示。

 

 alt

 

图 1 ExtN 文件系统读取数据过程示意图

 

采用这种数据存取的方法的文件系统被称之为“索引式文件系统”。它与伴随着很多人成长的 FAT32 有什么不同呢?图2 展示了这个过程。

 

 alt

 

图 2 FAT32 文件系统读取数据过程示意图

 

    通过对两个图的比较,我们可以清晰的看出,ExtN 通过 inode 能够一次性获得文件数据所存放的位置,可以据此来安排磁盘的阅读顺序,尽量保证在磁盘只旋转一圈的情况下将所有内容读出来。而 FAT32 则只有将对应的 data block 读入之后才知道下一个 data block 在什么地方。如果一个文件的 data block 比较分散的话,将很难保证在磁盘只旋转一圈的情况下读取全部数据,有时候甚至要多转很多圈才能读完数据。

    这就是我们非常熟悉的“磁盘碎片”问题。由于长时间的对文件进行创建、删除、读写,很难保证同一个文件的 data block 的位置相邻。而由于 FAT32 的读写特性,在 data block 不相邻的情况下读写性能会急剧下降。所以,为了提高 Windows 系统的磁盘性能,经常性的做“磁盘碎片整理”是非常有必要的。

    而对于 Linux 这种文件系统,则基本上不需要进行磁盘碎片整理。而且你也基本上找不到类 的工具。但是 Linux 系统经过长时间使用之后,还是会有文件数据过于分散的问题的。即便能够做到很好的规划,但是对性能多多稍稍还是会有一些影响,只是没有使用 FAT32 的 Windows 那么严重罢了。所以,一个使用时间很久的Linux 系统也会因为磁盘碎片问题而变慢,这也是事实。只是不需要太过在意它。


一. 文件相关

1. 节点(inode)

    在 Linux 的文件系统中,保存在磁盘分区中的文件,不管是什么类型,都有一个编号,即节点号。

    通过 ls -i 可以查看。

2. atime/ctime/mtime 访问时间/更改时间/修改时间

    后 2 者的区别是,ctime 会同时跟踪文件属性和数据,mtime 仅关系到文件数据。

    例如,修改一个 .sh 文件的内容,mtime 会发生变化,但是仅修改 .sh 文件的权限,例如 chmod a+x test.sh,ctime 会发生变化

    通过 stat filename 可以查看文件的 inode 节点信息:

3. 链接

    分为软链接(符号链接)和硬链接。不论哪一种,都会保持链接文件的同步性;可以使用相对路径链接文件。

    a. 软链接(符号连接)  

        ln -s 源 目

    类 于 Windows 中的快捷方式,实际上是一个文本文件,包含了被链接文件的位置信息,但与被链接文件的节点号不同;支持跨分区链接

    既然是快捷方式,其大小就不是所链接文件的大小,而是只有几个字节。

    stat 命令查看源文件和软链接的结果如下:

    weiyuzhang@weiyuzhang:/work/workspace$ stat client.c
      File: "client.c"
      Size: 686       Blocks: 8(表示为了存储该文件,使用了几个 data block,其结果,并不是严 的 Size/512)         IO Block: 4096  普通文件
    Device: 809h/2057d Inode: 131252      Links: 1
    Access: (0644/-rw-r--r--)  Uid: ( 1000/weiyuzhang)   Gid: ( 1000/weiyuzhang)
    Access: 2012-09-20 10:26:40.466391743 +0800
    Modify: 2012-09-18 17:33:15.405397461 +0800
    Change: 2012-09-20 10:25:06.786254344 +0800

    weiyuzhang@weiyuzhang:/work/workspace$ stat fake
      File: "fake" -> "client.c"
      Size: 8         Blocks: 0          IO Block: 4096   符号链接
    Device: 809h/2057d Inode: 131318      Links: 1
    Access: (0777/lrwxrwxrwx)  Uid: ( 1000/weiyuzhang)   Gid: ( 1000/weiyuzhang)
    Access: 2012-09-20 10:24:12.236174347 +0800
    Modify: 2012-09-20 10:24:11.486173237 +0800
    Change: 2012-09-20 10:24:11.486173237 +0800

    也可以看到,增加软连接,stat 信息中的 Links 不会增加

    b. 硬链接  

        ln 源 目

    通过节点号进行链接,即多个文件名指向同一个节点号;windows 中不具备该功能;

    其功能是,允许一个文件拥有多个有效路径名称,防止误删。只删除一个链接,并不影响节点本身和其它链接,只有当最后一个链接被删除后,文件的数据块才会被释放。即,文件真正删除的条件是,与之相关的所有硬链接文件均被删除。

    只能在同一分区内,否则提示:

        “ln: 创建硬链接"test" => "/work/out": 无效的跨设备连接”

    stat 命令查看源文件和硬链接的结果如下:

    weiyuzhang@weiyuzhang:/work/workspace$ stat client.c

      File: "client.c"
      Size: 686       Blocks: 8          IO Block: 4096   普通文件
    Device: 809h/2057d Inode: 131252      Links: 2
    Access: (0644/-rw-r--r--)  Uid: ( 1000/weiyuzhang)   Gid: ( 1000/weiyuzhang)
    Access: 2012-09-20 10:26:40.466391743 +0800
    Modify: 2012-09-18 17:33:15.405397461 +0800
    Change: 2012-09-20 10:25:06.786254344 +0800

    weiyuzhang@weiyuzhang:/work/workspace$ stat fake2
      File: "fake2"
      Size: 686       Blocks: 8          IO Block: 4096   普通文件
    Device: 809h/2057d Inode: 131252      Links: 2
    Access: (0644/-rw-r--r--)  Uid: ( 1000/weiyuzhang)   Gid: ( 1000/weiyuzhang)
    Access: 2012-09-20 10:26:40.466391743 +0800
    Modify: 2012-09-18 17:33:15.405397461 +0800
    Change: 2012-09-20 10:25:06.786254344 +0800

    此外,ll 命令输出的第二列也显示对应文件的硬链接数目

    weiyuzhang@weiyuzhang:/tmp$ ll

    总用量 68

    drwxrwxrwt 11 root               root                4096 11月 26 14:46 ./

    drwxr-xr-x   25 root               root                4096 11月 9    16:42 ../

    drwx------      2 weiyuzhang weiyuzhang 4096 11月 26  09:10 .com.google.Chrome.X8rA1c/

    drwx------      2 weiyuzhang weiyuzhang 4096 11月 26  09:16 CRX_75DAF8CB7768/

    prw-rw-r--     1 weiyuzhang weiyuzhang 0        11月 26  10:06 fifo|

4. 编辑文件

    除了 vi,还有一个常用的工具是 nano。 

    在其底部有效的命令列表中,^ 表示 Control。

5. touch

    用于更新文件的访问时间和更改时间,虽然实际上不会编辑文件的内容。

6. 压缩和解压

    提供 gzip 和 bzip2 两种压缩方法。

        tar zcvf archive.tar.gz [file1 file2...]

        tar jcvf archive.tar.bz2 [file1 file2...]

7. 挂载

    在 /dev 目录中,有些可用的设备是存储设备,例如软驱或者 CD-ROM。访问它们提供的内容不是简单的 cd 进入驱动器,存储驱动器需要挂载到文件系统。换句话说,驱动器需要附加到一个固定的目录。

        mount /dev/md1 /mnt/alexdrive

    将驱动器 /dev/md1 附加到系统中现有的目录 /mnt/alexdrive。一旦驱动器被挂载,就可以使用文件系统的任何指令访问驱动器。

    查看已启用的驱动器名,可通过 df -h。

    在现代的 Linux 发行版本中,CD-ROM、U盘等一些常见设备能够由系统自动挂载

    此外,不带参数的 mount 指令,可以输出系统中每一个被挂载的驱动器及使用的文件系统。

    例如,插入 U 盘,通过 mount 指令可以看到:

        ......

        /dev/sdb1 on /media/username/PENDRIVE type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

    这是系统自动挂载的结果。/dev/sdb1 即为 U 盘对应的驱动器名。可以使用 umount /dev/sdb1 来取消挂载。但是如果再次打开文件,又会被自动挂载。

    如果想让一个驱动器在开机时自动挂载,或者简单设置一个目录作为一个驱动器的默认挂载点,需要修改 /etc/fstab 文件。

8. 文件查找

    a. locate & updatedb

        locate filename

    该命令与 updatedb 关联,完全依赖于索引,如果新建一个文件,使用 locate 是找不到的,除非执行过 updatedb

    updatedb 需要 root 权限,一般通过 cron 定期执行。


本文转载自:http://c.360webcache.com/c?m=4aea3065cf4e2ca82d38c78525bf5ed5&q=ln+linux+%E6%97%A0%E6%95%88%E7%9A...

共有 人打赏支持
simpower
粉丝 24
博文 422
码字总数 20207
作品 0
海淀
程序员
Linux简单又实用的指令介绍

导读 今天,与大家分享的是学习Linux过程中的心得体会,写下来与大家分享。 1、指令:ls 说明:ls常常用于在Console界面下,查看当前目录下文件,其中包括文档、脚本、软件包等。类似于Windo...

问题终结者 ⋅ 05/04 ⋅ 0

Linux下文件的打包、解压缩指令——tar,gzip,bzip2

Linux下文件的打包、解压缩指令——tar,gzip,bzip2   本文是对 鸟叔的Linux私房菜(基础学习篇) 第三版 的学习笔记,原文可参考原书中文网站 鸟叔的Linux私房菜。更多详细信息可直接参考对...

xiaocao13140 ⋅ 05/28 ⋅ 0

SQL Server 2017 on Linux自动安装

SQL Server 2017在Linux平台安装虽然很简单,只要按照指令一行一行贴上就可以完成,但懒人总是想着更快的方法,于是找了官方文件发现竟然有自动安装的范例,测试一下果真OK。 请参阅以Red H...

326647452 ⋅ 05/29 ⋅ 0

Linux下高效指令(很重要)

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和6...

寰宇01 ⋅ 04/23 ⋅ 0

Ubuntu18搭建Gtk开发环境

发布自Kindem的博客,欢迎大家转载,但是要注意注明出处 gtk是在Linux下使用c语言构建图形界面的一个库,它构建的图形界面是基于gnome运行的。 Ubuntu18已经回归到了主流Linux桌面gnome上,所...

Kindem ⋅ 05/18 ⋅ 0

x86、Linux、GNU、GNOME是什么

一、指令集架构: 指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,...

easonjim ⋅ 2017/07/16 ⋅ 0

初识GCC——关于GCC编译器的相关语法与介绍

一个C文件要变成可执行的文件,需要经过四个过程: 预处理(处理以“#”为开头的命令) 编译(将.c .i等文件翻译成汇编代码) 汇编(将汇编代码翻译成机器代码) 连接(将生成的多个目标文件...

HelloRookie ⋅ 昨天 ⋅ 0

Linux:内核、CPU和处理机

想要有顺序地学习Linux,入口在这里哦:Linux:目录索引 1.什么是内核? 内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内...

w_y_x_y ⋅ 04/20 ⋅ 0

嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院 ⋅ 04/10 ⋅ 0

编写有趣且有价值的 Systemd 服务

让我们假设你希望搭建一个游戏服务器,运行 Minetest 这款非常酷、开源的,以采集 & 合成为主题的沙盒游戏。你希望将游戏运行在位于客厅的服务器中,以便搭建完成后可供你的学校或朋友使用。...

24% ⋅ 05/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部