注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

Linux 文件的基本操作(查阅、权限 、归档、压缩、特殊权限suid)  

2013-11-13 11:27:36|  分类: Web技术-Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文件目录权限问题:

[root@www ~]# ls -al
total 156
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例说明处
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ]
[ 权限 ][连结][拥有者][群组][文件容量][ 修改日期 ][ 檔名 ]

第一栏代表这个文件的类型与权限(permission):drwxr-xr-x

第一个字符代表这个文件是『目录、文件或链接文件等等』:
当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
当为[ - ]则是文件,例如上表档名为『install.log』那一行;
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行;
第二组为『同群组的权限』;
第三组为『其他非本群组的权限』。

第二栏表示有多少档名连结到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了.

第三栏表示这个文件(或目录)的『拥有者账号』
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为bytes;
第六栏为这个文件的建档日期或者是最近的修改日期:
第七栏为这个文件的档名

这个字段就是档名了。比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』,例如上表中的.gconf那一行,该文件就是隐藏档。 你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档啰!

例题:

如果我的目录为底下的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
    drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/

答:

  • 文件拥有者test1[rwx]可以在本目录中进行任何工作;
  • 而testgroup这个群组[r-x]的账号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
  • 至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
改变权限, chmod(数字类型改变文件权限)

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:
[root@www ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
举例来说,如果要将.bashrc这个文件所有的权限都设定启用,那么就下达:
[root@www ~]# ls -al .bashrc
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
那如果要将权限变成『 -rwxr-xr-- 』呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下达『 chmod 754 filename』。 另外,在实际的系统运作中最常发生的一个问题就是,常常我们以vim编辑一个shell的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是664, 如果要将该文件变成可执行文件,并且不要让其他人修改此一文件的话, 那么就需要-rwxr-xr-x这样的权限,此时就得要下达:『 chmod 755 test.sh 』的指令啰!

另外,如果有些文件你不希望被其他人看到,那么应该将文件的权限设定为例如:『-rwxr-----』,那就下达『 chmod 740 filename 』吧!


相关命令

//************拥有者与组****************

#改变所属用户

chown test t.txt

#改变目录以及目录下的文件的所属用户

chown -R test testdir

#改变所属组

chgrp test t.txt

#改变目录以及目录下的文件的所属组

chgrp -R test testdir


//************改变权限方式一****************

#改变权限(去掉目录testdir的other组执行权限)

chmod o-x testdir

#改变权限(去掉目录testdir的other组读与执行权限)

chmod o-rx testdir

#改变权限(给目录testdir的group组添加写权限)

chmod g+w testdir

#注:同相加参数-R递归处理


//************改变权限方式二****************

#改变权限(给文件t.txt添加拥有者可读写(rw)、组可读写(rw)、其他用户不可访问(---)的权限)

chmod 660 t.txt


文件目录默认权限:
 使用umask属性来设定文件的默认权限,表示方式为:使用数字权限方式,如 022。
 目录默认权限= 777-(减去)umask值
 文件默认权限=666-(减去)umask值
 一般情况下,普通用户的umask值默认为002,root的为022
如:

#如果是普通用户

新建文件的权限: 666-002 = 664(rw-rw-r--)

新建目录的权限: 777-002 = 775(rwx-rwx-r-x)


特殊权限

权限 对文件影响 对目录影响

suid 以文件的所属用户身份执行,

而非执行文件的用户

sgid 以文件所属组身份执行 在该目录中创建的任意新文件的所属组

与该目录的所属组相同



sticky 对目录拥有写入权限的用户仅可以删除其

限拥有的文件无法删除其他用户所拥有的文件

操作

命令chmod用以设置特殊权限:
//******************方式一*******

chmod u+s file 设置suid
chmod g+s dir 设置sgid
chmod o+t dir 设置sticky


//****************方式二************

使用数字方式

suid = 4

sgid = 2

sticky = 1


#设置上suid,rwx-rx-rw-

chmod 4756 test.txt


#设置上suid,sgid,rw-r-r

chmod 6644 test.txt

比如:设置testdir目录下所有新建文件都继承目录的所属组

原 testdir 权限为: drwxr-xr-x

执行: chmod g+s testdir

testdir权限变为: drwxr-sr-x

即可以看到,当设置了特殊权限后 x 权限变为了s

这样以后,在testdir目录下新创建的文件(目录)都会继承testdir所属组。



文件目录表示:

. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录(account是个帐号名称)


需要特别注意的是:在所有目录底下都会存在的两个目录,分别是『.』与『..』 分别代表此层与上一级目录的意思。那么来思考一下底下这个例题:

例题:
请问在Linux底下,根目录下有没有上一级目录(..)存在?
答:
若使用『 ls -al / 』去查询,可以看到根目录下确实存在 . 与 .. 两个目录,再仔细的查阅, 可发现这两个目录的属性与权限完全一致,这代表根目录的上一层(..)与根目录自己(.)是同一个目录。


文件目录相关操作

cd xx:变换目录

cd: 回到家目录

cd ~: 回到家目录

cd -: 表示回到刚刚操作目录
pwd:显示目前的目录路径


//************ls 相关**************

ls -l /tmp/test #此命令会查阅到 tmp/test 目录下的所有文件与目录的权限

ls -l --color=never /tmp/test #加上color参数后,目录不再在以蓝色显示

ll /tmp/test # ll 就是 ls -l

ll -d /tmp/test #参数-d 查阅目录/tmp/test的权限


//***************复制文件******************
复制文件
cp 源 目标
加-r参数,复制文件夹
cp -r 源 目标
加-v参数,打印出(日志)被复制了的文件路径。
cp -rv 源 目标
//****************移运、重命名**********
mv 源 目标(重命名)
//****************删除文件**********
rm 目标文件
rm -r 目标文件夹(实际上在大多数linux版本中,默认就是-i行为)
rm -i 加-i参数提示是否删除(实际上在大多数linux版本中,默认就是-i行为)
rm -f 强制删除(不要提示),如:rm -rf 强制删除文件夹中所有文件(以及它本身)
//****************创建、删除空文件夹**********
mkdir 目标
rmdir 目标




关于文件查阅
  • cat  由第一行开始显示文件内容
  • tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
  • nl   显示的时候,顺道输出行号!
  • od   以二进位的方式读取文件内容!
  • echo 显示输入的内容
  • more: 翻页查看内容(只向下,q 退出)
  • less:翻页查看内容(可上下看, q 退出)
  • head [-n] 显示文件头几行
  • tail [-n][-f] 显示文件尾几行, -f表示追踪显示文件更新的内容(常用查看日志)。


归档、压缩

zip压缩
zip test.zip test.txt
解压
unzip test.zip
gzip压缩


命令tar: 用以归档(默认并不会压缩)
tar [选项] 归档名 目标文档
-c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的档名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗(必须)!
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其他后续练习会使用到的选项介绍:
-p :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档
-P :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

如创建归档(注意不会压缩)
tar -c -f test.tar test

显示出哪些文档正在被处理
tar -cv -f test.tar test

查看归档中有哪些文档(仅仅列出文档名)
tar -t -f test.tar

创建压缩归档(透过gzip的方式压缩)
tar -cz -f test2.tar.gz test

查看被压缩文档中有哪些文件
tar -tz -f test2.tar.gz

打包压缩文档并显示出压缩日志,以zip的方式
tar -czv -f test3.tar.gz

解压缩,以gzip的方式
tar -xz -f test3.tar.gz

解压到指定的目录(参数-C)

tar -C /usr/local -xzf go.tar.gz


显示解压日志并解到指定目录
tar -C /usr/local -xzv -f go.tar.gz



源:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_1.php
  评论这张
 
阅读(410)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017