上机实验二
上机实验二
上机实验2B:进一步认识Linux命令行
1.1 目录、权限管理
-
以普通用户的身份登录你的Linux操作系统,打开终端。你现在的命令提示符是什么?
答:普通用户的命令提示符为$ -
输入
cd,然后看看你当前所在的绝对路径是什么?
答:/home/chen -
输入
mkdir -p bio2502/lab2创建多级目录bio2502/lab2,这是我们这个课程的目录。 -
进入目录
bio2502,可以用绝对路径,也可以用相对路径的方式。 -
用
ls -ld查看一下lab2这个目录的默认权限。![]()
-
在命令行中输入:
cat >lab2/hello.sh <<EOF
#!/bin/bash
echo "What's your name?"
read name
echo "Welcome to Linux, \${name}"
EOF
-
这是通过重定向的方式将EOF之间的内容输出到文件
lab2/hello.sh中。用cat查看该文件的内容,看看写入是否成功。![]()
-
然后我们试图运行
lab2/hello.sh,会有什么样的输出/错误产生?![]()
-
怎么样去修改权限才能让上面的脚本得以运行,有哪些不同方式的命令?
输入chmod u-x lab2/hello.sh修改脚本运行权限 -
权限修改完成后,重新运行该脚本,得到什么样的输出?
![]()
-
如果将该输出/错误重定向到一个文件
lab2/hello.log,该怎么运行这个脚本?
lab2/hello.sh > output -
尝试修改lab2目录的权限,比如去除读(
r)的权限,你还能进入这个目录么,你还能运行上面这个脚本么?如果去除的是执行(x)的权限呢?读取文件的权限呢?
去除r的权限。还可以进入这个目录并可以运行这个脚本。去除x的权限后既不可以读也不可以执行脚本。 -
用
ln为上面的脚本在当前目录下创建一个硬链接(hard link)和一个符号链接(symbolic link),用ls -i查看这两个文件的i节点编号,与源文件lab2/hello.sh相比,是否相同?这两个文件的文件类型分别是什么(给出文件类型位信息)?![]()
文件类型![]()
-
是否可以执行这两个文件?如果不行,缺少了哪个步骤呢?
这两个文件均可执行 -
用
mv将lab2/hello.sh移出lab2目录,看看这个文件的i节点是否会发生改变。
节点发生了改变 -
这时候硬链接和符号链接哪个还能够执行?为什么?
硬链接还可以执行,符号链接不可以执行了。 -
将该脚本文件移动到目录
lab2中,这时候符号链接文件的有效性是否发生改变?
移回去后仍可以执行。 -
修改上述脚本文件名为
test.sh,这时候符号链接文件是否失效?
符号链接失效了 -
这时候问一个问题,修改文件名、移动一个文件、复制一个文件是否会改变一个文件的i节点信息?
修改文件名和移动文件均会改变节点信息,复制一个文件不会改变节点信息 -
用
cp命令为目录lab2创建一个拷贝lab2.backup,用哪个选项?
用cp -r -
尝试用
rm或者rmdir删除这个目录lab2.backup,如何执行?
利用rm -r的指令 -
能否为目录
lab2创建硬链接lab2.default?符号链接呢?
不可以创建硬链接,可以创建符号链接
通过上面的练习,尝试总结一下文件、目录的各种权限的作用,以及硬链接和符号链接的区别。
1.2 用户管理
- 用
sudo useradd命令为你的系统增加另一个用户,确保该用户与你(非root)在同一个组。 - 这样你能在新用户的家目录下写文件或者修改该用户的文件么?为什么?你认为这样用户的隔离性是合理的么?
不可以在新用户的家目录下写文件或者修改。没有权限。合理,可以防止别人修改 - 你能修改这个用户的文件的权限么?有哪些用户是可以修改权限的?
不可以,普通用户不可以修改权限 ,用户本身是可以修改权限的 useradd命令在执行的时候需要用到系统的设置如/etc/default/useradd文件和/etc/skel目录的信息,这样你在创建文件的时候才能给这个用户设置一些默认的参数。查看这两个文件,并尝试说说其中包含哪些信息。
![]()
![]()
1.3 文件查找
-
在目录
/usr/bin下用find命令查找所有用户都具有读、写和执行权限的文件,并输出这些文件的信息。
使用命令find /usr/bin -type f -perm /ugo=rwx -ls -
从目录
/var/log中搜索修改时间超过一个月的文件,并把这些文件备份到lab2/log目录中,然后给这个目录打包成tar.gz、tar.bz2和tar.xz等类型的文件后,删除lab2/log这个目录。
sudo find /var/log -type f -name "vmware-network.?.log" -exec cp {} log2 \;
![]()
-
这些可以通过
find命令的-exec或-ok选项实现,也可以通过管道发送给xargs实现。你可以仔细查看man find和man xargs。 -
搜索文件的时候,有时候可用文件名进行搜索,这时候常常会用到通配符(wildcard characters)。通配符主要包含这些:
?:表示单个字符*:表示任意个字符
搜索/usr/include目录下的所有头文件并将其输出。
find /usr/include "*.h"
- 某些文件中可能会包含一些特殊字符(比如空格),在输入的时候必须注意用反斜杠符号(backslash)进行转义,例如
\表示空格等,或者加入引号也是可以的,如"program files"。但是切忌我们自己创建文件或目录的时候用了空格,这是不可取的做法。
1.4 文件操作
- 用
cat、less和more分别查看文件/etc/passwd,可以看到这个文件包含了系统的所有用户信息,比如用户名、用户ID、用户的组ID、用户的别名、用户的家目录、用户默认的shell等信息。每个用户一行,每个信息一列,相互之间用:分隔。 - 对于具有固定分隔符号的文件,我们常常用
cut命令进行一些基本处理。例如你能否提取本系统中所有用户的用户名,并将其保存到一个文件lab2/user.list中。
![]()
cut -d: -f1 /etc/passwd > bio2502/lab2/user.list - 如何查看
/etc/passwd的前5个用户,最后5个用户,15-20行的用户?可以用head与tail通过管道(pipe)进行结合。
head -n 20 /etc/passwd | tail -n 6 - 一个文件同时有几个时间戳:
atime,ctime,mtime。这几个时间戳分别代表什么含义,默认ls -l输出的是哪个时间戳?如何改变其输出?而touch命令修改的是哪个时间戳?
![]()
![]()
![]()
1.5 帮助信息和vim的使用
- 用
tree命令获取根目录/下的两层文件目录结构,将其重定向到一个文件lab2/directory_tree中。
tree -L 2 / > bio2502/lab2/directorry_tree - 从搜索引擎获取关于bioinformatics在wikipedia上的页面,将其源码用vim命令编辑为bioinformatics,看看在vim下如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找bioinformatics的字符,把bioinformatics替换为bioinfo science。
- 用
man hier获取每个目录的基本信息,将其用vim写入文件directory_tree中。 - 用
man builtins获取所有bash内置命令的列表,将其写入文件`lab2/builtins,将其修改为每行一个命令的记录。将每个文件的功能记入该文件。 - 用命令
ip或者ifconfig查看当前系统的网络配置信息,并将其存入文件lab2/network.info中。 - 把你当前的日期信息写入文件
lab2/finished.log中。
最后别忘记了把lab2目录打包成lab2_你的学号.tar.gz,并删除目录lab2。














浙公网安备 33010602011771号