Linux<三>文件的基本操作

文件常用命令

  1. cd 与 pwd:变换目录和显示当前目录
    pwd -P:会以显示文件的真正位置,若此文件是一个连接文件的话。
  2. mkdir 与 rmdir(一般rm用的多) : 建立目录和删除目录
  3. 环境变量PATH:当我们执行一个指令时,会先到PATH中路径查找,先查找到的指令先被执行
    • 查看:echo $PATH
    • 添加:如将/root添加到环境变量PATH=$PATH:/root
    • 执行自己写的程序时候常常见到如下方式:./可执行文件。
    • 问题:何必这么麻烦,而不直接把当前目录 . 加入PATH中呢
    • 解答: 若某恶意程序在/tmp下名也为ls,则执行ls就可能会执行该恶意程序,因此为了安全,不建议将.加入PATH中

ls、cp 、rm 、mv命令

  • cp命令
    1. cp .bashrc bashrc (将.bashrc复制成bashrc)
    2. cp -r /bin /tmp/bin (复制整个目录,递归)
    3. cp -s .bashrc bashrc.cp (建立一个链接文件,文件名为bashrc.cp)
    4. cp -u /root/.bashrc /home/test/.bashrc (先检查两个文件是否相同,不同就复制一份,否则什么都不干) cp -u 有助于提高效率,特别是复制较大文件且不常更新时进行备份
    5. cp不添加任何参数的情况下,复制后的文件属性/权限会改变,目的文件的所有则通常会是命令操作者的本身;若要想将文件的属性全都复制过来,加上参数 -a即可;
  • rm 命令 注意删除时,当前目录有哪些文件,不建议rm -rf * 很危险
  • mv -[fiu]搬移或更改文件名
    f:强制,若目标文件已存在,则会不询问直接覆盖;
    i:询问;
    u:若目标文件已存在,则source较新的时,才会更新。

查看文件内容

  • cat 和 tac:一个正向显示一个反向显示
  • more 和 less (常用)
  • head 和 tail : head 显示文件的头几行。tail显示文件尾几行
    例1:head -n 20 file 打印前20行;
    例2:head -n -20 file 只有后面20行不打印;
    例3:tail -n 20 file 打印后20行;
    例4:tail -n +20 file 打印20行以后的数据,前20行数据不打印;
    例5:head -n 20 file | tail -n 10 打印文件11-20行
    例6:tail -f file会以值显示先添加到fil文件尾部的数据,直到Ctrl+C退出即可
  • od:读取非ASCII数据文件(例如二进制文件,使用vi或more等根本看不出内容),默认把文件的内容用八进制的形式清晰地写在标准输出上
  • touch:修改文件时间或创建文件
    文件主要有三个变动时间:mtime(内容改变时间)、ctime(状态改变时间,权限属性等)、atime(访问时间)

链接文件介绍

  • Block
    磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为n*512bytes,例如4K.
  • inode
    就是记录该文件的属性及其放置在哪个Block之内的信息,每个文件会占用一个inode,当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。inode数量(=硬盘容量/一个容量,这个容量比Block大一些较好)一开始就已经设定好,这样我们可以清楚知道一个分区被格式化为一个文件系统后,基本上它一定会有inode table和数据区域两大块:一个用来记录文件的属性信息与该文件放置的Block块,一个用来记录文件的内容。
  • 硬链接
    而hard link 是直接再建立一个inode链接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode table; (2) 不能链接目录。
    硬链接的文件看起来是有容量的,但是基本上还是指向原来的文件,所以整体的容量并没有增加,硬链接只是复制了一份inode信息。
  • 符号链接
    建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上
    例:现在有文件a,我们做了一个软链接文件b(只是一个链接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当您删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件。而,当您删除b时,a是不会有任何影响的。
    修改软链接文件,更改的其实是原始文档
  • 硬链接和软连接对比
    hard link 比较安全,因为即使某一个 inode 被删掉了,只要有任何一个 inode 存在,那么该文件就不会消失不见!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做目录的link ,所以在用途上面是比较受限的!符号链接的用途广
  • ln -s 源文件 目标文件
    -s:建立符号链接,不加就是建立硬链接

chattr与lsattr

这两个指令对于文件安全性非常有帮助。有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性
chattr +i 文件,则改文件“不能被删除、更名、设定链接也无法写入新增数据”还有很多属性,有些属性只能root用户才能设定。chattr -i 文件取消。
lsattr显示文件隐藏属性。

搜寻文件

  • which 查看可执行文件的位置(which只能用来查找PATH环境变量中出现的路径下的可执行文件)
  • whereis
    这两个查找速度都比find快,因为Linux会将系统内所有的文件记录在一个数据库文件中,当使用此命令查找时都会以改数据库为准,可以先updatedb下
  • locate
    通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里,可以使用 updatedb 命令立即生成(更新)这个库。如果您的服务器上正跑着重要的业务,那么您最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。到/etc/updated.conf 去配置这个数据库生成(更新)的规则。
  • find [路径] [参数] 文件名
    强大!麻烦!慢!

SetUID、SetGID、Sticky bit与file指令

  • SUID与SGID
    SUID与SGID简单来看就是users的rwx中的位x不是x,而是s。SGID和SUID一样,只是是groups上的变成s。当一个文件具有SUID时,同时others群组具有可执行权限,那么当others群组执行该程序时,others将拥有该文件的owners权限 例如passwd程序就是修改/etc/shadow文件,但该文件明明只能是root用户才可以修改,那普通用户是怎么修改的?就是用SUID,可以查看下/usr/bin/passwd权限就知。因此当用户执行 passwd 时就有了root权限。这里也可以看出了其不安全行,慎重。
    这里写图片描述
    这里写图片描述
    这里写图片描述
  • Sticky bit
    • 问题:既然有SUID和SGID,为什么没有SOID呢?
    • 解答:没有必要,因为那是属于others的权限,若你的文件是任何人皆可执行的,那么本来他们就已经具有权限,为什么还要设定s属性呢?
  • sticky bit(t)属性
    即末尾为t,其用处: 具有该属性的目录,其下文件或目录只有文件拥有者及root才有权删除。我们系统本来就预设有一个,/tmp。
  • 设置SGID、SUID、sticky bit(t)
    这里写图片描述
    这里写图片描述
    问题:有的是S,有的是s等这是为什么?
    解答:S表明虽然设置了SUID,但此位上并没有x,即使有SUID也没用,因为压根没有x位
  • file
    查看文件类型(ASCII或二进制文件),还可以用来查看文件是否被加入SUID等信息。挺好用!

权限与指令之间的关系

这里写图片描述
这里写图片描述

SGID情景

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
参考:《鸟哥的Linux私房菜》、《跟阿铭学Linux》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值