您的位置:首页 > 运维架构 > Linux

linux学习笔记之 文件和目录管理

2014-10-13 09:39 627 查看
这里列这些常用的命令提醒一下自己,免得老是会忘记那么几个

cd pwd mkdir rmdir ls mv cp rm cat tac nl more less head tail od

ls -l file <==显示的是默认的mtime
ls --time={ctime|atime] file <==显示指定的时间类型
ls --full-time <==显示完整的时间 mtime

mtime(modification time), ctime(status tim), atime(access time)

#touch [-acdmt] 文件名
选项和参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

# touch -d "2 days ago" bashrc <==日期改为2天前
# touch -t 0709150202 bashrc <==日期改为 2007/09/15 2:02
日期在 atime和mtime 都改变了,但是 ctime则是记录目前的时间!

文件预设权限:umask
#umask <==查看默认设置
设定umask
#umask 002 <==umask后直接接要减去的权限即可
文件和目录的初始权限:
文件: (-rw-rw-rw-)
目录: (drwxrwxrwx)
所以用户建立的文件和目录的权限为
[文件|目录]初始权限-用户umask
预设 umask 的设定可以参考 /etc/bashrc 这个文件的内容,不过,不建议修改该文件

文件隐藏属性:
不过要先强调的是,chattr 指令只能在 Ext2/Ext3的文件系统上面生效, 其他的文件系统可能就无法支持这个指令了。

chattr (配置文件隐藏属性)

#chattr [+-=][ASacdistu] 文件或目录名称
选项和参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
A :当设定了 A 这个属性时,若你有存取此文件(或目录)时,他的访问时间atime将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。这对速度较慢的计算机有帮助
S :一般文件是异步写入磁盘的,如果加上 S这个属性时,当你进行任何文件的修改,
该更动会『同步』写入磁盘中。
a :当设定a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root才能设定
c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存,对于大文件似乎蛮有用。
d :当dump 程序被执行的时候,设定 d 属性将可使该文件(或目录)不会被dump 备份
i :这个 i 可就很厉害了!他可以是让一个文件『不能被删除、改名、设定连结也无法写入或新增资料!』对于系统安全性有相当大的帮助!只有 root 能设定此属性
s :当文件设定了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u :和s相反的,当使用u来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
注意:属性设定常见的是 a和i的设定值,而且很多设定值必须要身为 root才能设定
更多详细使用自行man

由于这些属性是隐藏的性质,所以需要以 lsattr才能看到该属性
lsattr (显示文件隐藏属性)
#lsattr [-adR] 文件或目录
选项和参数:
-a :将隐藏文件的属性也显示出来;
-d :如果接的是目录,仅列出目录本身的属性而非目的内的文件名;
-R :连同子目录的数据也一并列出来

使用 chattr设定后,可以利用 lsattr来查阅隐藏的属性。不过, 这两个指令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录文件给他设定成为具有 i的属性,那么过了若干天之后, 你突然要新增使用者,即一直无法新增!别怀疑,赶快去将i的属性拿掉吧!

SUID SGID SBIT
Set UID
当 s 这个标志出现在文件拥有者的x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状
态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。SUID的功能和限制:
仅对二进制程序有效;
执行者对于该程序需要具有x的可执行权限;
本权限只在执行该程序的过程中有效(run-time);
执行者将具有该程序拥有者的权限。
另外,SUID仅可以用在二进制程序上,不可以用在shell script上。

Set GID
当 s 这个标志出现在文件群组的x 权限时就称为 Set GID,简称为 SGID 的特殊权限。

用于二进制程序:
执行者对于该程序需要具有x的可执行权限;
本权限只在执行该程序的过程中有效(run-time);
执行者将具有该程序群组的权限。

用于目录,此时:
用户若对于此目录具有r与x权限时,该用户能够进入此目录;
用户在此目录下的有效群组将变成该目录的群组;
用途:若用户在此目录下具有w权限,则用户新建的新文件的群组与此目录的群组相同

Sticky Bit :
只针对目录有效:
当用户对于此目录具有w,x权限,亦即具有写入权限时;
当用户在该目录下建立文件或目录,仅有用户自己与root才有权力删除该文件或目录。
数值代表:
SUID 4
SGID 2
SBIT 1

观察文件类型:file
#file file

指令和文件的搜寻:
因为我们常常需要知道那个文件放在哪里,才能够对该文件迚行一些修改或维护等动作。有些时候某些软件配置文件的文件名是不变的,但是各 distribution 放置的目录则不同。此时就得要利用一些搜寻指令将该配置文件的完整文件名捉出来,这样才能修改
脚本文件名的搜寻:
我们知道在终端机模式当中,连续输入两次[tab]按键就能够知道用户有多少指令可以下达。那你知不知道这些指令的完整文件名放在哪里?举例来说,ls 这个常用的指令放在哪里呢? 就透过 which或type来寻找!
# which [-a] command
选项和参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
which 预设是找 PATH 内所规范的目录

文件文件名的搜寻:
whereis (寻找特定文件)
# whereis [-bmsu] 文件或目录名
选项和参数:
-b :只找 binary 格式的文件
-m :只找在说明文件 manual路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

#locate [-ir] keyword
选项和参数:
-i :忽略大小写的差异;
-r :后面可接正规表示法的显示方式
whereis和locate是经由数据库来搜寻的,而数据库的建立默认是在每天执行一次 (每个distribution
都不同,CentOS 5.x 是每天更新数据库一次),所以当你新建立起来的文件, 即还在数据库更新之前搜寻该文件,那么 locate 会告诉你『找不到』,因为必须要更新数据库,手动更新locate 数据库的方法非常简单,直接输入『 updatedb 』就可以了, updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件。因为updatedb会去搜寻硬盘,所以当你执行 updatedb 时,可能会等待数分钟的时间。

updatedb:根据 /etc/updatedb.conf的设定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件;
locate:依据 /var/lib/mlocate内的数据库记载,找出用户输入的关键词文件名。

find命令:
#find [PATH] [option] [action]
选项和参数:
1. 和时间有关的选项:共有 -atime, -ctime 和 -mtime,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

2.和使用者或组名有关的参数:
uid n :n 为数字,这个数字是用户的账号 ID,亦即 UID ,这个 UID是记录在/etc/passwd里面和账号名称对应的数字。
-gid n :n 为数字,这个数字是组名的ID,亦即 GID,这个 GID 记录在/etc/group。
-user name :name 为使用者账号名称喔!例如 dmtsai
-group name:name 为组名喔,例如 users ;
-nouser:寻找拥有者不存在 /etc/passwd 的文件
-nogroup :寻找拥有群组的不存在于/etc/group的文件
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的,在这个时候,就可以使用
-nouser 和 -nogroup 搜寻。

3.和文件权限及名称有关的参数:
-name filename:搜寻文件名为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE的规格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB还要大的文件,就是『 -size +50k 』
-type TYPE:搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f),装置文件 (b, c), 目录 (d),
连结档 (l), socket (s),及 FIFO (p) 等属性。
-perm mode :搜寻文件权限『刚好等于』 mode的文件,这个 mode 为类似chmod的属性值,举例来说,
-rwsr-xr-x属性为 4755
-perm -mode :搜寻文件权限『必须要全部包括 mode 的权限』的文件,举例来说,我们要搜寻 -rwxr--r--,亦即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经包括了 -rwxr--r-- 的属性了。
-perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,
我们搜寻-rwxr-xr-x ,亦即-perm +755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在

4. 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令处理搜寻到的结果。
-print:将结果打印到屏幕上,这个动作是预设动作
例如:
# find / -perm +7000 -exec ls -l {} \;
该范例中特殊的地方有 {} 以及 \; 还有 -exec 这个关键词,这些东西的意义为:
{} 代表的是『由 find 找到的内容』,如上图所示,find 的结果会被放置到 {} 位置中;
-exec 一直到 \; 是关键词,代表 find 额外动作的开始 (-exec) 到结束 (\;) ,在这中间的就是find 指令内的额外动作。
在本例中就是『 ls -l {} 』!因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜杠来跳脱。

另外,find 还可以利用通配符来找寻文件名呢!
举例来说,你想要找出 /etc 底下文件名包含 httpd的文件, 那么你就可以这样做:
#find /etc -name '*httpd*'
不过由于find 在寻找数据的时候是搜寻硬盘,所以没事情不要使用 find
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: