文件系统与操作
1、Linux操作系统中文件的访问权限是怎样规定的?如何修改文件的访问权限?
文件的访问权限有着严格的限制规定,规定用户可以对自己的文件进行权限设置,其他用户只能在权限许可的情况下进行访问。有三组访问权限,文件属组,同组用户和其他用户。用 chmod命令进行权限修改。
2、解释inode节点在文件系统中的作用?
i是索引节点,它包含着文件的索引信息,包括文件大小属主、归属的用户组、读写权限等。根据指令,可以通过i值最快找到相对应的文件。
3、什么是符号链接?什么是硬链接?二者有什么区别?
硬链接是通过i节点链接产生的新文件名,而不是新文件。符号链接是特殊的文件,它的内容是指向另一个文件的路径(位置信息)。它与目标文件有不同的inode值。所有的读写命令在涉及符号链接的文件时,将会沿着链接前进找到实际的被链接文件进行修改。区别就是软链接,没有硬链接的限制,可以对目录文件做符号链接,也可以在不同系统之间做符号链接。
4、将U盘连接到USB接口后,如何将其挂载到/mnt/usb目录下?
- 查找 U 盘设备:
- 插入 U 盘后,使用以下命令查看 U 盘的设备信息:
- sudo fdisk -l
- 记住 U 盘的设备路径,例如 /dev/sdb1。
- 创建挂载目录:
- 在 /mnt 目录下创建一个用于挂载 U 盘的目录,例如:
- sudo mkdir /mnt/usb
- 挂载 U 盘:
- 使用以下命令将 U 盘挂载到 /mnt/usb 目录:
- sudo mount -t vfat /dev/sdb1 /mnt/usb
- 这里假设 U 盘的文件系统类型是 VFAT(FAT32)。如果是其他文件系统类型(如 NTFS),请相应地更改 -t 参数。
5、建立符号链接文件和硬链接文件之后,如果删除源文件会有什么结果?原因是什么?
符号链接是指向文件的路径,删除源文件会使其无效。符号链接只是一个指向目标文件的路径,而不是实际的数据块。
硬链接是共享相同数据块的不同文件名,删除源文件不会影响硬链接。
6、LINUX操作系统有几种类型文件,它们分别是什么?有哪些相同点和不同点?
有普通文件,目录文件、链接文件和设备文件。普通文件是常规文件,是用来保存信息的载体,可以看作纯粹的字节流。目录文件也称文件夹,可以将文件系统构成树形结构。链接文件是指一种在共享文件和访问它的用户若干目录项之间建立联系的方法。设备文件是将所有设备看作文件来管理。
7、用C语言编程,打开/etc/passwd文件,显示当前系统中已经注册的普通用户账号。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fp;
char line[256];
char *token;
int uid;
fp = fopen("/etc/passwd", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
while (fgets(line, sizeof(line), fp)) {
token = strtok(line, ":");
strtok(NULL, ":");
strtok(NULL, ":");
uid = atoi(strtok(NULL, ":"));
if (uid >= 1000) {
printf("%s\n", token);
}
}
fclose(fp);
return 0;
}
8、假设Linux分配给光驱的设备名是/dev/cdrecord,叙述LINUX如何在光驱上使用光盘?
- 创建挂载点:
- 首先创建一个用于挂载光盘的目录。您可以选择在 /mnt 目录下创建一个空文件夹,例如:
- sudo mkdir /mnt/cdrom
- 插入光盘:打开光驱,将光盘放入光驱中。如果您使用的是 VMware 中的虚拟机,可以在虚拟机设置中选择“CD/DVD”硬件,勾选“已连接”和“启动时连接”,然后选择“使用ISO映像文件”,浏览并选择您下载好的 ISO 光盘镜像文件。
- 执行挂载命令:
- 使用以下命令将光盘挂载到先前创建的挂载点上:
- sudo mount /dev/cdrecord /mnt/cdrom
- 访问光盘内容:现在,您可以通过访问 /mnt/cdrom 目录来查看光盘中的文件。
- 卸载光盘:在使用完光盘后,务必先卸载它,然后才能取出光盘:sudo umount /mnt/cdrom
9、用C语言编程,打开用户指定的文件,将文件内容倒序后再写入该文件。
#include <stdio.h>
#include <stdlib.h>
void reverseWrite(const char* filename) {
FILE* file = fopen(filename, "rb"); // 以二进制读取模式打开文件
if (!file) {
printf("无法打开文件 %s\n", filename);
return;
}
// 确定文件大小
fseek(file, 0, SEEK_END);
long fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
// 动态分配内存来存储文件内容
char* buffer = (char*)malloc(fileSize);
if (!buffer) {
printf("内存分配失败\n");
fclose(file);
return;
}
// 读取文件内容到缓冲区
fread(buffer, 1, fileSize, file);
// 倒序遍历缓冲区的内容
for (long i = fileSize - 1; i >= 0; --i) {
// 在这里你可以对数据进行处理,例如修改字符顺序
// 这里只是简单地将字符写回文件
putc(buffer[i], file);
}
// 关闭文件和释放内存
fclose(file);
free(buffer);
}
int main() {
const char* filename = "input.txt"; // 用户指定的文件名
reverseWrite(filename);
printf("已将文件内容倒序写回 %s\n", filename);
return 0;
}
10、查看LINUX操作系统有哪些根目录,并且解释他们的作用。
让我们来看看这些目录及其功能:
- /bin:这里存放着最常用的命令,例如 ls、cp、mv、cat 等。这些命令对于系统管理和日常操作非常关键。
- /boot:存放启动 Linux 时所需的核心文件、连接文件和镜像文件。这是系统启动的关键目录。
- /dev:存放 Linux 的外部设备文件,以文件形式表示各种设备和接口。在 Linux 中,访问设备的方式与访问文件的方式相同。
- /etc:存放系统管理所需的配置文件和子目录。这里包含了许多系统级别的配置信息。
- /home:用户的主目录,每个用户都有一个自己的目录,一般以用户名命名。例如,/home/alice、/home/bob 和 /home/eve。
- /lib:存放系统最基本的动态连接共享库,类似于 Windows 中的 DLL 文件。几乎所有应用程序都需要使用这些共享库。
- /lost+found:通常情况下是空的。当系统非法关机后,这里存放一些文件。
- /media:Linux 系统会自动识别一些设备,例如 U 盘、光驱等,识别后会将其挂载到这个目录下。
- /mnt:用于临时挂载其他文件系统。例如,可以将光驱挂载到 /mnt/,然后查看光驱中的内容。
- /opt:用于放置额外安装的软件,例如 Oracle 数据库。
- /proc:是一个虚拟文件系统,存储当前内核运行状态的一系列特殊文件。可以通过访问这个目录获取系统信息。
- /root:系统管理员(超级用户)的用户主目录。
- /sbin:存放系统管理员使用的系统管理程序。
- /selinux:Redhat/CentOS 特有的目录,存放与 SELinux 安全机制相关的文件。
- /srv:存放服务启动后需要提取的数据。
- /sys:Linux 2.6 内核引入的目录,包含 sysfs 文件系统,用于获取系统信息。
- /tmp:用于存放临时文件。
- /usr:非常重要的目录,存放用户的许多应用程序和文件,类似于 Windows 下的 Program Files 目录。
- /var:存放经常被修改的目录,包括各种日志文件。
- /run:临时文件系统,存储系统启动以来的信息。