文档章节

linux文件系统与文件管理(一)

萧小蚁
 萧小蚁
发布于 2015/10/08 23:41
字数 3051
阅读 16
收藏 0

1)文件的类型

1ls  -l   以长格式的形式查看当前目录下所有可见文件的详细属性。(查看inode的大部分内容)

7个段分别是:

1.  文件属性:drwxr-xr-x

其中各个字符代表的意义:

d: 代表是目录。其他的还有,-代表文件

rwx:代表属主权限,-代表无权限;r代表具有可读权限; w代表具有可写权限;x代表具有可执行权限

r-x:代表组权限

r-x:代表其他用户权限

2.  文件硬链接数或目录子目录数:0 (一个空目录的该字段是2,表示该目录下有两个子目录,因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录".."

3.  所有者:root

4.  所属用户组:root

5.  文件大小:0 byte

6.  修改时间:sep 29 02:42

7.  文件名:1.txt

2stat  列出inode的每一项

3vim link.c  编辑link.c

4gcc link.c  编译link.c

5./a.out   执行link.c

7stat  a.c

   stat  b.c     通过比较 a.cb.cinode每一项都是一样的

8rm 文件名   删除文件

   通过比较原来的b.c,和现在的,只是links变成了1,其他都没有变

9sysmlink.c   符号连接  b.c生成的c.csize,blocks等参数都不一样,links都是1


10Linux sta t函数讲解:

表头文件: #include <sys/stat.h>

           #include <unistd.h>

定义函数: int stat(const char *file_name, struct stat *buf);

函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat

返回值: 执行成功则返回0,失败返回-1,错误代码存于errno

错误代码:

    ENOENT         参数file_name指定的文件不存在

    ENOTDIR        路径中的目录存在但却非真正的目录

    ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接

    EFAULT         参数buf为无效指针,指向无法存在的内存空间

    EACCESS        存取文件时被拒绝

    ENOMEM         核心内存不足

    ENAMETOOLONG   参数file_name的路径名称太长

#include <sys/stat.h>

#include <unistd.h>

#include <stdio.h>

int main() {

    struct stat buf;

    stat("/etc/hosts", &buf);

    printf("/etc/hosts file size = %d\n", buf.st_size);

}

-----------------------------------------------------

struct stat {

    dev_t         st_dev;       //文件的设备编号

    ino_t         st_ino;       //节点

    mode_t        st_mode;      //文件的类型和存取的权限

    nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1

    uid_t         st_uid;       //用户ID

    gid_t         st_gid;       //ID

    dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号

    off_t         st_size;      //文件字节数(文件大小)

    unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)

    unsigned long st_blocks;    //块数

    time_t        st_atime;     //最后一次访问时间

    time_t        st_mtime;     //最后一次修改时间

    time_t        st_ctime;     //最后一次改变时间(指属性)

};

先前所描述的st_mode 则定义了下列数种情况:

    S_IFMT   0170000    文件类型的位遮罩

    S_IFSOCK 0140000    scoket

    S_IFLNK 0120000     符号连接

    S_IFREG 0100000     一般文件

    S_IFBLK 0060000     区块装置

    S_IFDIR 0040000     目录

    S_IFCHR 0020000     字符装置

    S_IFIFO 0010000     先进先出

    S_ISUID 04000     文件的(set user-id on execution)

    S_ISGID 02000     文件的(set group-id on execution)

    S_ISVTX 01000     文件的sticky

    S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限

    S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限

    S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限

    S_IRGRP 00040             用户组具可读取权限

    S_IWGRP 00020             用户组具可写入权限

    S_IXGRP 00010             用户组具可执行权限

    S_IROTH 00004             其他用户具可读取权限

    S_IWOTH 00002             其他用户具可写入权限

    S_IXOTH 00001             其他用户具可执行权限

    上述的文件类型在POSIX中定义了检查这些类型的宏定义:

    S_ISLNK (st_mode)    判断是否为符号连接

    S_ISREG (st_mode)    是否为一般文件

    S_ISDIR (st_mode)    是否为目录

    S_ISCHR (st_mode)    是否为字符装置文件

    S_ISBLK (s3e)        是否为先进先出

    S_ISSOCK (st_mode)   是否为socket

    若一目录具有sticky(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。


2)文件的属主和用户组

11/etc/passwd 是系统识别用户的一个文件,做个不恰当的比喻,/etc/passwd

是一个花名册,系统所有的用户都在这里有登录记载;当我们以beinan 这个账号登录时,系统首先会查阅 /etc/passwd文件,看是否有beinan 这个账号,然后确定beinanUID,通过UID 来确认用户和身份,如果存在则读取/etc/shadow影子文件中所对应的beinan的密码;如果密码核实无误则登录系统,读取用户的配置文件;

  1/etc/passwd 的内容理解:

  在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行:

   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

   linuxsir:x:501:502::/home/linuxsir:/bin/bash

  第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan linuxsir

  第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;

  第三字段:UID ;请参看本文的UID的解说;

  第四字段:GID;请参看本文的GID的解说;

  第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;

  第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir

  第七字段:用户所用SHELL 的类型,beinanlinuxsir 都用的是 bash ;所以设置为/bin/bash

2)关于UID 的理解:

UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs

可以查到,一般Linux发行版约定为60000 Linux 中,rootUID0,拥有系统最高权限;UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinanUID改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;

UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过susudo来实现;切不可随意让一个用户和root分享同一个UID UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,一般情况下,每个Linux的发行版都会预留一定的UIDGID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftpnobodyadmrpmbinshutdown等;

Fedora 系统会把前499 UIDGID 预留出来,我们添加新用户时的UID500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UIDGID预留出来;以各个系统中/etc/login.defs中的 UID_MIN 的最小值为准; Fedora 系统 login.defsUID_MIN500,而UID_MAX值为60000,也就是说我们通过adduser默认添加的用户的UID的值是50060000之间;而Slackware通过adduser不指定UID来添加用户,默认UID 是从1000开始;

12less /etc/shadow  用户影子口令文件

1)用户名

    2)加密的密码

    3)上次更改密码的日期(从1970-1-1开始)

    4)最短密码期限(按天计算,0 = 无最短期限)

    5)最长密码期限(按天计算)

    6)密码警告期限(按天计算,0 = 未指定警告)

    7)密码非活动期限(按天计算)

    8)账号到期时间(从1970-1-1开始)

    9)保留域

13less  /etc/group  用户组的配置文件

第一字段:用户组名称;

  第二字段:用户组密码;

  第三字段:GID

  第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

例如:root:x:0:root,linuxsir 注:用户组rootx是密码段,表示没有设置密码,GID0,root用户组下包括rootlinuxsir以及GID0的其它用户(可以通过/etc/passwd查看);

14less  /etc/gshadow  /etc/gshadow/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。

第一字段:用户组

  第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;

  第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;

  第四字段:组成员,如果有多个成员,用,号分割;

此时root的其他用户没有任何权限,其他用户不能够读取root目录中的信息

15chmod 744 root  root目录的其他用户赋予“读”的权限

                但此时其他用户仍然不能够读取root目录

16chmod 745 root   root目录的其他用户赋予“执行”的权限

                 此时可以读取root目录的信息

文件2 对其他用户只有“读”的权限

17chmod 757  文件名   给文件的其他用户赋予“写”,“执行”的权限

18chmod 700 文件名  只有属主有读、写、执行权限。

19chmod 000 文件名  使所有用户对该文件都没有任何权限

 fortest 即使当所有用户对其都没有任何权限的情况下,root用户拥有所有权限。

sally fortest owner ,但是也没有fortest的所有权限,但是可以更改他的权限,即

chmod 700 文件名。此时owner ,sally具有了所有权限。


20chmod u-w 文件名  owner ”w”权限去掉。


21chmod g+w 文件名  group的“w”权限加上

22chmod ug+w 文件名   将文件的owner,group的权限都加上”w”


23chmod ugo-x 文件名   将文件的owner,group,other的“x”即执行权限去掉。

24chmod a+x 文件名  owner,group,other”x”权限加上。此时用”a”代替的”ugo”

25chmod o=w 文件名   此时文件的other只有”w”权限,因为”=”此时是一个赋值操作。

26chmod  a=  文件名  此时所有用户关于该文件的权限都为空。

虽然目录的权限没有,但是不影响他下面子目录的权限。

27chmod –R a+rwx 文件名   将目录下的所有文件权限修改,“R”的作用。

采用的是:二进制

二进制法

281ls,列出当前目录内容

       2ls / ,显示根目录的内容

       3ls a,显示隐藏文件

       4ls l,显示详细内容

       5ls ld,显示目录本身的属性

29ls –la /目录名   查看其他目录的信息

30ls –lh   当文件较大时,比较常用,显示出了单位“k

31cd ../文件名   切换相对目录

   pwd  显示当前目录信息

   cd .   进入上级目录

   cd  /   进入根目录

32cd  /home/sally 进去绝对目录

    cd  ~   进入当前用户家目录

33cd -  切换至上一个使用的目录


© 著作权归作者所有

萧小蚁

萧小蚁

粉丝 101
博文 279
码字总数 192339
作品 0
海淀
程序员
私信 提问
[84题]Linux运维常见笔试题(填空题)

[84题]Linux运维常见笔试题(填空题) 1. 在Linux 系统 中,以文件方式访问设备 。 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 。 3. Linux 文件系统中每个文件用indoe节...

代金券优惠
2018/05/23
0
0
后端程序员必备的Linux基础知识

本文同步更新在我的Github上:网页链接 我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Gui...

Amsour丶
2018/07/06
0
0
Linux面试题大全,测测你的水平(答案)

Linux面试题大全,测测你的水平(答案) 一.填空题: 1.在Linux系统中,以文件方式访问设备。 2.Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。 3.Linux文件系统中每个文件用索...

庸人谷
2013/01/29
745
2
Linux 用户(user)和用户组(group)管理概述

一、理解Linux的单用户多任务,多用户多任务概念; Linux 是一个多用户、多任务的操作系统;我们应该了解单用户多任务和多用户多任务的概念; 1、Linux 的单用户多任务; 单用户多任务;比如...

长平狐
2013/06/03
168
0
Linux内核源码分析 day01——内存寻址

前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识。 自制Antz操作系统 一个自制的操作系统,Antz 。半图形化半命令式系统,同时嵌入Ant...

AntzUhl
2018/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部