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

1)文件的类型

111211_18io_2356966.jpg

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

111212_S9lB_2356966.jpg

2stat  列出inode的每一项

111212_TvAh_2356966.jpg

111212_zGVJ_2356966.jpg

3vim link.c  编辑link.c

4gcc link.c  编译link.c

5./a.out   执行link.c

111212_rujd_2356966.jpg

7stat  a.c

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

111213_A5lf_2356966.jpg

8rm 文件名   删除文件

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

111214_n0H9_2356966.jpg

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

111214_gNco_2356966.jpg


111214_I7hp_2356966.jpg

111214_BNCL_2356966.jpg

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来删除或改名。

111214_SYnK_2356966.jpg


111215_a8CU_2356966.jpg

111215_ctOV_2356966.jpg

111215_EcyD_2356966.jpg

2)文件的属主和用户组

111215_KXW4_2356966.jpg

111215_OSxP_2356966.jpg

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开始;

111216_Zulf_2356966.jpg

111216_ZDX1_2356966.jpg

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

1)用户名

    2)加密的密码

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

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

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

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

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

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

    9)保留域

111216_cO8f_2356966.jpg

111217_LZye_2356966.jpg

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

第一字段:用户组名称;

  第二字段:用户组密码;

  第三字段:GID

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

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

111217_VMzA_2356966.jpg

111217_wrH4_2356966.jpg

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

第一字段:用户组

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

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

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

111217_V6iB_2356966.jpg

111218_AMHX_2356966.jpg

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

111218_ChPY_2356966.jpg

111218_x1vL_2356966.jpg

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

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

111219_FgRL_2356966.jpg

111219_Xmp8_2356966.jpg

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

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

111219_Ljke_2356966.jpg

231237_C5Mr_2356966.jpg

111219_XXZ7_2356966.jpg

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

111220_huLE_2356966.jpg

231434_KjmB_2356966.jpg

231801_81ud_2356966.jpg

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

231435_cHv4_2356966.jpg

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

231435_ouW0_2356966.jpg

231436_Jo80_2356966.jpg

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

231437_zAKg_2356966.jpg

231438_JRqj_2356966.jpg

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

231438_oNcP_2356966.jpg

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

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

232057_CU1n_2356966.jpg

231438_Bi3D_2356966.jpg

231439_RJMG_2356966.jpg

231439_TuW0_2356966.jpg


231440_ySF5_2356966.jpg

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


231441_6gAP_2356966.jpg

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

231442_ecTu_2356966.jpg

231443_o8Cw_2356966.jpg

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


231443_ByiK_2356966.jpg

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

231444_WzGH_2356966.jpg

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

231445_rS8W_2356966.jpg

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

231445_AsXN_2356966.jpg

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

231446_jgUH_2356966.jpg

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

231447_2nmF_2356966.jpg

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

231447_HOOh_2356966.jpg

采用的是:二进制

231448_WpPQ_2356966.jpg

231449_i5zB_2356966.jpg

二进制法

231449_yJkX_2356966.jpg

231450_p46f_2356966.jpg

231450_ujXs_2356966.jpg

231451_2f5Y_2356966.jpg

281ls,列出当前目录内容

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

       3ls a,显示隐藏文件

       4ls l,显示详细内容

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

231451_K9sR_2356966.jpg

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

231451_2UNt_2356966.jpg

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

231452_fsQv_2356966.jpg

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

   pwd  显示当前目录信息

   cd .   进入上级目录

   cd  /   进入根目录

231452_MRO2_2356966.jpg

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

    cd  ~   进入当前用户家目录

231453_TF6T_2356966.jpg

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


转载于:https://my.oschina.net/u/2356966/blog/514513

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值