设为首页收藏本站
查看: 3371|回复: 0

[脚本语言] 3.6 处理文件

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-2 11:45
  • 签到天数: 908 天

    [LV.10]以坛为家III

    发表于 2022-8-15 23:02:00 | 显示全部楼层 |阅读模式
    本帖最后由 冷月nuanyang 于 2022-8-16 22:15 编辑

    3.6 处理文件
            shell提供了很多在Linux文件系统上操作文件的命令。
    3.6.1 创建文件
            你总会时不时地遇到创建空文件的情况,例如,有时应用程序希望它们在写入数据之前,某个日志文件已经存在,这时,可用touch命令轻松创建文件。
           
            touch命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件大小是零,因为touch命令只创建了一个空文件。
            touch命令还可用来改变文件的修改时间。这个操作并不需要改变文件内容。
           
            test_one文件的修改时间现在已经从最初的时间21:35更新到了21.37.如果只想改变访问时间,可用-a参数
           
            在上面的例子种,要注意的是,如果只使用ls-l命令,并不胡显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另一个参数:--time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间。
            创建空文件和更改文件时间戳算不上在Linux系统中的日常工作。不过复制文件可是在使用shell时经常干的活儿
    3.6.2 复制文件
            对系统管理员来说,在文件系统中将文件和目录从一个位置复制到另一个位置可谓家常便饭。cp命令可用完成这个任务。
            在基本的用法里,cp命令只需要两个参数——源对象和目标对象;
            cp source destination
            当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的修改时间。
           
            新文件test_two和文件test_one的修改时间并不一样。如果目标文件已经存在,cp命令可能并不会提醒这一点。最好加上-i选项,强制shell询问是否需要覆盖已有文件
           
            如果不回答Y,文件复制将不会继续。也可以将文件复制到现有目录中。
           
            新文件现就在documents中了,和源文件同名。
            上一个例子采用了绝对路劲,不过也可以使用相对路劲
           
            前面介绍了特殊符号可用用在相对文件路径中。其中的单点符(.)就很适合用于cp命令。记住,单点符表示当前工作目录。如果需要将一个带有很长的源对象名的文件复制到当前工作目录时,单点符能够简化该任务。
           
            想找到那个单点符可真是不容易,仔细看的话,你会发现它在第一行命令的末尾。如果你的源对象名很长,使用单点符要比输入完整的目标对项目省事儿的多
            cp 命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
           
            在执行cp -R命令之前。目录Mod_Scripts并不存在。它是随着cp -R命令被创建的,整个Scripts目录中的内容都被复制到其中。注意,在新的Mod_Scripts目录中,所有的文件都有对应的新日期。Mod_Scripts目录现在已经成为Scripts目录的完整副本
            也可以在cp命令中是使用通配符。
           
            该命令将所有以script结尾的文件复制到Mod_scripts目录中。在这里,只需要复制一个文件:my_script
            在复制文件的时候,除了单点符和通配符之外,另一个shell特性也能派上用场,那就是制表键自动补全。
    3.6.3 制表键自动补全
            在使用命令行时,很容易输出命令、目录名或文件名。实际上,对长目录名或文件名来说,输错的几率还是蛮高的
            这正是制表键自动补全挺身而出的时候。制表键自动补全允许你在输入文件名或目录名时按一下制表键。让shell帮忙将内容补充完整。
           
            在上面的例子中,我们输入了命令cp really,然后按制表键,shell就将剩下的文件名自动补充完整了,当然,目标目录还是得输入的,不过仍然可以利用命令补全来避免输入错误。
            使用制表键补全的技巧在于要给shell足够的文件名信息,使其能够将需要文件同其他文件区分开。假如有另一个文件名也是really开头,那么就算按了制表键,也无法完成文件名的自动补全。这时候你会听到嘟一声。要是在按一下制表键,shell就会列出所有以really开头的文件名。这个特性可以让你观察究竟应该输入那些内容才能完成自动补全
    3.6.4 链接文件
            链接文件时Linux文件系统的一个优势。如需要在系统上维护同一个文件的两份或多份副本,除了保存多份单独的物理文件副本外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟副本的方法称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接。
            ①符号链接
            ②硬链接
            符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同
            要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接。
           
            在上面的例子中,注意符号链接的命令sl_data_file位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接
            另外还要注意,符号链接的文件大小与数据文件的文件大小。符号链接sl_data_file只有9字节,而data_file有0字节,这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件
            另一种证明链接文件是独立文件的方法是查看inode编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数
           
            从这个例子中可以看出数据文件的inode编号是659392,而sl_data_file的inode编号则是659391,所有说它们是不同的文件
            硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置,但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件必须事先存在,只不过这次使用ln命令时不在需要加入额外的参数了
           
            在上面的例子中,我们使用ls -li命令显示了*code_file的inode编号以及长列表。注意,带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件,还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。
            复制链接文件的是一定要小心。如果使用cp命令复制一个文件,而该文件又已经被链接到了另一个源文件上,那么你得到的其实是源文件的一个副本。这很容易让人犯晕,用不着复制链接文件,可以创建原始文件的另一个链接。同一个文件拥有多个链接,这完全灭月问题。但是,千万别后才能关键软链接文件的软链接。这会形成混乱的链接链,不仅容易断裂,还会造成各种麻烦。
    3.6.5 重命名文件
            在Linux中,重命名文件称为移动(move)。mv命令可以将文件和目录移动到另一个位置或重新命名。
           
            注意,移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv只影响文件名。
            也可以使用mv来移动文件位置
           
            在上面例子中,我们使用mv命令把文件fzll从luntai移动到了pictures。和刚才一样,这个操作并没改变文件的inode编号或时间戳。
            唯一变化的就是文件的位置。luntai目录下不再有文件fzll,因为它已经离开了原先的位置,这就是mv命令所做的事情。
            也可以使用mv命令移动文件位置并修改文件名称,这些操作只需一步就能完成。
           
            在这个列子中,我们将文件fzll从目录pictures中移动到了目录luntai,并将名字改为fall。文件的时间戳和inode编号都没有改变。改变的只有位置和名称。
            也可使用mv命令移动整个木及其内容
           
            目录内容没有变化。只有目录名发生了改变
    3.6.6 删除文件
            迟早有一天,你的删除已有的文件。不管是清理文件还是删除某个软件包。总有要删除文件的时候。
            在Linux中,删除(deleting)叫做移除(removing)。bash shell中删除文件的命令是rm。rm命令的基本格式非常简单
           
            注意,-i命令参数提示你是不是真的要删除该文件,bash shell中没有回收站或垃圾箱,文件一旦删除,就无法在找回。因此,在使用rm命令时,要养成总是加入-i参数的好习惯。
            也可以使用通配符删除成组的我呢见。
           
            rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除,小心为妙!
           


    ——————————————————————————————————————————————————————————————
    3.7 处理目录
    https://www.chncert.cn/forum.php ... amp;fromuid=1016784
           
           
           
           

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    红盟社区--红客联盟 

    Processed in 0.058648 second(s), 22 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    备案号:冀ICP备20006029号-1 Powered by HUC © 2001-2021 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表