Linux 操作系统课程练习题(五)综合练习
一、 按要求完成如下操作,请把相关命令写出来
-
查看当前所在工作目录;
pwd -
查看根目录下 tmp 中文件的详细信息;
ls -l /tmp -
显示当前系统的日期和时间;
date -
列出 2020 年 10 月的日历;
cal 10 2020 -
清屏;
claer -
统计/etc/passwd 文件中所有包含字符串“user”的行数;
grep user /etc/passwd | wc -l -
显示历史命令表,执行当前倒数第 5 个命令;
history !-5 -
查看/etc/passwd 文件的前 10 行;
head -10 /etc/passwd -
查看正在使用系统的用户信息;
who -
在家目录中创建文件 ABC,将/etc/passwd 的内容追加文件 ABC 中;
cd ~
cat /etc/passwd >> ABC -
使用相对路径将/etc 目录下的 inittab 文件拷贝到自己的家目录下;
cp …/…/etc/inittab .解析:
当前目录为家目录,例如/home/tom,etc文件在根目录下,..
为返回当前工作目录 的父目录,../../
表示根目录。 -
将家目录下的 inittab 文件移动到/tmp 文件夹下;
mv inittab /tmp -
为 tmp 下的 inittab 创建软链接文件 inittab_slink,并查看两个文件的 i节点号是否一致。
ln -s inittab inittab_slink
ll -i
二、按要求完成如下操作,请把相关命令写出来。
- 新建一个用户 wang,密码设为 123456,附加组为 bin 和 root,默认 shell 为/bin/csh,注释信息为“Gentoo Distribution”;
useradd wang
passwd wang
usermod -G bin wang
usermod -aG root wang
usermod -s /bin/csh wang
usermod -c “Gentoo Distribution” - 查看用户 wang 的附加组信息;
cat /etc/group - 创建名为 admins 的用户组;
groupadd admins - 创建用户 zhang,使其基本组为 admins,附加组为 bin,其使用期限为 2020
年 12 月 31 日;
useradd –g admins –G bin zhang –e “2020-12-31” - 查看用户 zhang 的基本组信息;
id zhang - 创建用户 zhao,使其 id 为 1234;
useradd -u 1234 zhao - 将用户 wang 改名为 elvis,并锁定该用户,不允许其登陆。
usermod -l elvis wang
usermod -L elvis - 彻底删除用户 zhao。
userdel -r zhao
三、按要求回答如下问题:
- 哪些用户可以阅读用户 einstein 的 theory 文件?
einstein、elvis、roottheory的文件权限为文件主可读可写,同组用户可读,theory属于physics组,physics组有einstein、elvis成员。root用户是超级用户,均可访问。
- 哪些用户可以修改 nero 的 census 文件?
nero、elvis、root - 哪些用户可以阅读 alice 的 adventures 文件?
所有用户 - 用户 Pataki 希望 governor 组成员都可以修改他的 budget 文件,他该怎么做?
chmod g+w budgetgovernor属于文件主的组,修改同组用户的写权限即可
- 用户 elvis 希望组 games 的成员可以阅读他的 pacman 文件,其他人不能访问这个文件,他该怎么做?
chgrap games pacman
chmod 640 pacman - 系统中哪个用户可以改变文件 theory 的权限?
root、einstein - 你创建了文件 foo.txt(默认权限),你现在希望 music 的成员可以阅读修改这个文件,其他人只能阅读,不能修改,你应该怎么做?
chgarap music foot.txt
chmod 664 foot.txt
四、有一普通用户 user1 想在每月 1 日凌晨 3 点整定期备份其家目录内到/tmp/backup目录下,该用户应如何做?
crontab –e
0 3 1 * * cp -r /home/user1 /tmp/backup
五、当一个用户的 umask 分别是 0033 与 0044,他所建立的文件与目录的权限是什么?
umask命令用来设置新建文件或目录权限的掩码,即默认权限。普通用户文
件的默认权限为666,目录文件的默认权限为777。
033 = 000 011 011
取反744(111 100 100)
与666相与,为644(110 100 100),普通文件的默认权限为644
与777相与,为744(111 100 100),目录文件的默认权限为744
同理:umask 为 0044,普通文件的默认权限为 622,目录文件的默认权限为 733
六、以下程序的输出结果是什么?请说明原因。
#include<stdio.h>
#include<stdlib.h>
int main(void){
int i,k;
for(i=0;i<3;i++){
k=fork();
If(k==0)
break;
else
wait(0);
}
printf(“Counter=%d Pid=%d Parent Pid=%d\n”,getpid(),getppid());
exit(0);
}
wait()函数功能:父进程一旦调用了 wait 就立即阻塞自己,由 wait 自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息,并把它彻底销毁后返回。
七、编写一个 shell 脚本,该脚本有一个参数,利用 for 循环将当前目录下的.c文件复制到该参数指定的目录,完成后显示该目录下的文件内容。
if [ -d $1 ]
then
for file in *.c
do
cp $file $1
done
ls $1
else
echo "$1 is not a directory."
fi
八、完成下面的 c 语言程序 main.c,该程序实现求两个正整数的最大公约数。并回答以下问题:
#include <stdio.h>
void main(){
int m,n,r,s;
scanf("%d\t%d", &m, &n); /*从键盘读入整数 m 和 n*/
if(m<n){
r=m; m=n; n=r;
} /*保证 m 大于等于 n*/
/*求 m 和 n 的最大公约数,并赋给变量 s*/
…………
/*最大公约数结束*/
printf("最大公约数是%d\n", s);
return;
}
- 使用 gcc 对 main.c 进行编译,并生成可执行文件 main.out。
gcc main.c -o mian.out - 使用 gdb 对该程序进行调试时,要在第 6 行设置断点,应使用什么命令?
break 6 - 使用 gdb 对改程序进行调试时,要显示变量 m 的值,应使用什么命令?
print m - 要在 gdb 中进行单步调试,应该使用什么命令?
step