Linux 是多用户多任务操作系统,支持多个用户在同一时间内登 陆,不同用户可以执行不同的任务,并且互不影响。
▶ 每个用户都有唯一的用户名和密码
▶ 每个用户有自己独立的主目录
▶ 用户组是具有相同特征用户的逻辑集合
▶ 同一个用户组的多个用户具有相同的权限
▶ 一个用户可以属于多个组
列出根目录的文件信息:ll /
进入根目录:cd /
以下命令需要sudo,提权
新建用户:useradd -m -g groupname username
修改密码:passwd username
切换用户:su username
删除用户:userdel username
*tips:通过 man command 可以查看 command 的说明文档
示例:sudo useradd -m -g os siat
sudo passwd siat
su siat
Linux 系统上一切都是文件,对某个文件执行某种操作,必须具 有对应的权限方可执行成功 Linux 的文件权限有以下设定:
▶ Linux 下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
▶ Linux 下权限的属组有拥有者、群组、其它组三种。每个文件都可以针对这三个属组(粒度),设置不同的 rwx(读写执行) 权限。
▶ 通常情况下,一个文件只能归属于一个用户和组,如果其它的用户想有这个文件的权限,则可以将该用户加 入具备权限的群组,一个用户可以同时归属于多个组。
权限表示法:
修改文件权限:chmod [可选项] mode <file>
形式可以是:增加可读 ( +r ),删除可写 ( -w );
或者直接赋予数字权限,如 600 修改文件夹所有者:chown -R group:username
C 语言操作文件的库为: ‘include‘ ‘include‘
1. 打开文件夹 DIR* opendir (const char * path );
path 为目录路径,打开一个目录,在失败的时候返回一个空的指针。
2. 读取文件夹下目录和文件 struct dirent* readdir(DIR* dirh andle);
drent 的结构如下: struct dirent { long d_ino ; /* inode number 索引 节点 号 * /
off_t d_off ; /* offset to t his dirent 在 目 录 文 件 中 的 偏 移 * /
unsigned short d_reclen ; /* length of t his d_name 文件名长 * /
unsigned char d_type ; /* the type of d_name 文件类型 * /
char d_name [NAME_MAX+ 1 ] ; /* f i l e name ( n ull − terminated ) 文件名 , 最长256字符 * / } 3. 关闭文件夹 int closedir(DIR *dp);
#!/usr/bin/sh
./priv
# 补充代码,赋予/SiatApp/hello.txt可读写权限,并移动回当前目录下
# TO-DO
chmod -R 777 /SiatApp/hello.txt
mv /SiatApp/hello.txt /home/os/lab4
# 修改XXX为自己的学号
echo "\n SIAT100051" >> hello.txt
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
DIR * dir;
struct dirent * ptr;
// TO-DO
// 遍历test目录下的文件,输出对应的文件名和文件inode号
//
dir = opendir("/home/os/lab4/test");
for(ptr = readdir(dir); ptr != NULL; ptr = readdir(dir)){
printf("FileName\t%s\tFileInode\t%d\n",ptr->d_name,ptr->d_ino);
}
closedir(dir);
}
实验结果