(1)文件的类型
1、ls -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
2、stat 列出inode的每一项
3、vim link.c 编辑link.c
4、gcc link.c 编译link.c
5、./a.out 执行link.c
7、stat a.c
stat b.c 通过比较 a.c,b.c的inode每一项都是一样的
8、rm 文件名 删除文件
通过比较原来的b.c,和现在的,只是links变成了1,其他都没有变
9、sysmlink.c 符号连接 由b.c生成的c.c,size,blocks等参数都不一样,links都是1
10、Linux 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 这个账号,然后确定beinan的UID,通过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 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ;
2)关于UID 的理解:
UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs
可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限;UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinan的UID改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;
UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID ;UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;
在Fedora 系统会把前499 个UID和GID 预留出来,我们添加新用户时的UID从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UID和GID预留出来;以各个系统中/etc/login.defs中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware通过adduser不指定UID来添加用户,默认UID 是从1000开始;
12、less /etc/shadow 用户影子口令文件
1)用户名
2)加密的密码
3)上次更改密码的日期(从1970-1-1开始)
4)最短密码期限(按天计算,0 = 无最短期限)
5)最长密码期限(按天计算)
6)密码警告期限(按天计算,0 = 未指定警告)
7)密码非活动期限(按天计算)
8)账号到期时间(从1970-1-1开始)
9)保留域
13、less /etc/group 用户组的配置文件
第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
例如:root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);
14、less /etc/gshadow /etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。
第一字段:用户组
第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
第四字段:组成员,如果有多个成员,用,号分割;
此时root的其他用户没有任何权限,其他用户不能够读取root目录中的信息
15、chmod 744 root 给root目录的其他用户赋予“读”的权限
但此时其他用户仍然不能够读取root目录
16、chmod 745 root 给root目录的其他用户赋予“执行”的权限
此时可以读取root目录的信息
文件2 对其他用户只有“读”的权限
17、chmod 757 文件名 给文件的其他用户赋予“写”,“执行”的权限
18、chmod 700 文件名 只有属主有读、写、执行权限。
19、chmod 000 文件名 使所有用户对该文件都没有任何权限
fortest 即使当所有用户对其都没有任何权限的情况下,root用户拥有所有权限。
sally 是fortest 的owner ,但是也没有fortest的所有权限,但是可以更改他的权限,即
chmod 700 文件名。此时owner ,sally具有了所有权限。
20、chmod u-w 文件名 将owner 的”w”权限去掉。
21、chmod g+w 文件名 将group的“w”权限加上
22、chmod ug+w 文件名 将文件的owner,group的权限都加上”w”
23、chmod ugo-x 文件名 将文件的owner,group,other的“x”即执行权限去掉。
24、chmod a+x 文件名 将owner,group,other的”x”权限加上。此时用”a”代替的”ugo”。
25、chmod o=w 文件名 此时文件的other只有”w”权限,因为”=”此时是一个赋值操作。
26、chmod a= 文件名 此时所有用户关于该文件的权限都为空。
虽然目录的权限没有,但是不影响他下面子目录的权限。
27、chmod –R a+rwx 文件名 将目录下的所有文件权限修改,“R”的作用。
采用的是:二进制
二进制法
28、1)ls,列出当前目录内容
2)ls / ,显示根目录的内容
3)ls –a,显示隐藏文件
4)ls –l,显示详细内容
5)ls –ld,显示目录本身的属性
29、ls –la /目录名 查看其他目录的信息
30、ls –lh 当文件较大时,比较常用,显示出了单位“k”
31、cd ../文件名 切换相对目录
pwd 显示当前目录信息
cd . 进入上级目录
cd / 进入根目录
32、cd /home/sally 进去绝对目录
cd ~ 进入当前用户家目录
33、cd - 切换至上一个使用的目录