文件常用命令
- cd 与 pwd:变换目录和显示当前目录
pwd -P:会以显示文件的真正位置,若此文件是一个连接文件的话。 - mkdir 与 rmdir(一般rm用的多) : 建立目录和删除目录
- 环境变量PATH:当我们执行一个指令时,会先到PATH中路径查找,先查找到的指令先被执行
- 查看:echo $PATH
- 添加:如将/root添加到环境变量PATH=$PATH:/root
- 执行自己写的程序时候常常见到如下方式:./可执行文件。
- 问题:何必这么麻烦,而不直接把当前目录 . 加入PATH中呢
- 解答: 若某恶意程序在/tmp下名也为ls,则执行ls就可能会执行该恶意程序,因此为了安全,不建议将.加入PATH中
ls、cp 、rm 、mv命令
- cp命令
- cp .bashrc bashrc (将.bashrc复制成bashrc)
- cp -r /bin /tmp/bin (复制整个目录,递归)
- cp -s .bashrc bashrc.cp (建立一个链接文件,文件名为bashrc.cp)
- cp -u /root/.bashrc /home/test/.bashrc (先检查两个文件是否相同,不同就复制一份,否则什么都不干) cp -u 有助于提高效率,特别是复制较大文件且不常更新时进行备份
- 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》