上机实验二

上机实验二

上机实验2B:进一步认识Linux命令行

1.1 目录、权限管理

  1. 以普通用户的身份登录你的Linux操作系统,打开终端。你现在的命令提示符是什么?
    答:普通用户的命令提示符为$

  2. 输入cd,然后看看你当前所在的绝对路径是什么?
    答:/home/chen

  3. 输入mkdir -p bio2502/lab2创建多级目录bio2502/lab2,这是我们这个课程的目录。

  4. 进入目录bio2502,可以用绝对路径,也可以用相对路径的方式。

  5. ls -ld查看一下lab2这个目录的默认权限。

  6. 在命令行中输入:

cat >lab2/hello.sh <<EOF
#!/bin/bash
echo "What's your name?"
read name
echo "Welcome to Linux, \${name}"
EOF
  1. 这是通过重定向的方式将EOF之间的内容输出到文件lab2/hello.sh中。用cat查看该文件的内容,看看写入是否成功。

  2. 然后我们试图运行lab2/hello.sh,会有什么样的输出/错误产生?

  3. 怎么样去修改权限才能让上面的脚本得以运行,有哪些不同方式的命令?
    输入chmod u-x lab2/hello.sh修改脚本运行权限

  4. 权限修改完成后,重新运行该脚本,得到什么样的输出?

  5. 如果将该输出/错误重定向到一个文件lab2/hello.log,该怎么运行这个脚本?
    lab2/hello.sh > output

  6. 尝试修改lab2目录的权限,比如去除读(r)的权限,你还能进入这个目录么,你还能运行上面这个脚本么?如果去除的是执行(x)的权限呢?读取文件的权限呢?
    去除r的权限。还可以进入这个目录并可以运行这个脚本。去除x的权限后既不可以读也不可以执行脚本。

  7. ln为上面的脚本在当前目录下创建一个硬链接(hard link)和一个符号链接(symbolic link),用ls -i查看这两个文件的i节点编号,与源文件lab2/hello.sh相比,是否相同?这两个文件的文件类型分别是什么(给出文件类型位信息)?
    文件类型

  8. 是否可以执行这两个文件?如果不行,缺少了哪个步骤呢?
    这两个文件均可执行

  9. mvlab2/hello.sh移出lab2目录,看看这个文件的i节点是否会发生改变。
    节点发生了改变

  10. 这时候硬链接和符号链接哪个还能够执行?为什么?
    硬链接还可以执行,符号链接不可以执行了。

  11. 将该脚本文件移动到目录lab2中,这时候符号链接文件的有效性是否发生改变?
    移回去后仍可以执行。

  12. 修改上述脚本文件名为test.sh,这时候符号链接文件是否失效?
    符号链接失效了

  13. 这时候问一个问题,修改文件名、移动一个文件、复制一个文件是否会改变一个文件的i节点信息?
    修改文件名和移动文件均会改变节点信息,复制一个文件不会改变节点信息

  14. cp命令为目录lab2创建一个拷贝lab2.backup,用哪个选项?
    用cp -r

  15. 尝试用rm或者rmdir删除这个目录lab2.backup,如何执行?
    利用rm -r的指令

  16. 能否为目录lab2创建硬链接lab2.default?符号链接呢?
    不可以创建硬链接,可以创建符号链接
    通过上面的练习,尝试总结一下文件、目录的各种权限的作用,以及硬链接和符号链接的区别。

1.2 用户管理

  1. sudo useradd命令为你的系统增加另一个用户,确保该用户与你(非root)在同一个组。
  2. 这样你能在新用户的家目录下写文件或者修改该用户的文件么?为什么?你认为这样用户的隔离性是合理的么?
    不可以在新用户的家目录下写文件或者修改。没有权限。合理,可以防止别人修改
  3. 你能修改这个用户的文件的权限么?有哪些用户是可以修改权限的?
    不可以,普通用户不可以修改权限 ,用户本身是可以修改权限的
  4. useradd命令在执行的时候需要用到系统的设置如/etc/default/useradd文件和/etc/skel目录的信息,这样你在创建文件的时候才能给这个用户设置一些默认的参数。查看这两个文件,并尝试说说其中包含哪些信息。

1.3 文件查找

  1. 在目录/usr/bin下用find命令查找所有用户都具有读、写和执行权限的文件,并输出这些文件的信息。
    使用命令find /usr/bin -type f -perm /ugo=rwx -ls

  2. 从目录/var/log中搜索修改时间超过一个月的文件,并把这些文件备份到lab2/log目录中,然后给这个目录打包成tar.gztar.bz2tar.xz等类型的文件后,删除lab2/log这个目录。
    sudo find /var/log -type f -name "vmware-network.?.log" -exec cp {} log2 \;

  3. 这些可以通过find命令的-exec-ok选项实现,也可以通过管道发送给xargs实现。你可以仔细查看man findman xargs

  4. 搜索文件的时候,有时候可用文件名进行搜索,这时候常常会用到通配符(wildcard characters)。通配符主要包含这些:

  • ?:表示单个字符
  • *:表示任意个字符
    搜索/usr/include目录下的所有头文件并将其输出。
    find /usr/include "*.h"
  1. 某些文件中可能会包含一些特殊字符(比如空格),在输入的时候必须注意用反斜杠符号(backslash)进行转义,例如\ 表示空格等,或者加入引号也是可以的,如"program files"。但是切忌我们自己创建文件或目录的时候用了空格,这是不可取的做法。

1.4 文件操作

  1. catlessmore分别查看文件/etc/passwd,可以看到这个文件包含了系统的所有用户信息,比如用户名、用户ID、用户的组ID、用户的别名、用户的家目录、用户默认的shell等信息。每个用户一行,每个信息一列,相互之间用:分隔。
  2. 对于具有固定分隔符号的文件,我们常常用cut命令进行一些基本处理。例如你能否提取本系统中所有用户的用户名,并将其保存到一个文件lab2/user.list中。

    cut -d: -f1 /etc/passwd > bio2502/lab2/user.list
  3. 如何查看/etc/passwd的前5个用户,最后5个用户,15-20行的用户?可以用headtail通过管道(pipe)进行结合。
    head -n 20 /etc/passwd | tail -n 6
  4. 一个文件同时有几个时间戳:atime, ctime, mtime。这几个时间戳分别代表什么含义,默认ls -l输出的是哪个时间戳?如何改变其输出?而touch命令修改的是哪个时间戳?


1.5 帮助信息和vim的使用

  1. tree命令获取根目录/下的两层文件目录结构,将其重定向到一个文件lab2/directory_tree中。
    tree -L 2 / > bio2502/lab2/directorry_tree
  2. 从搜索引擎获取关于bioinformatics在wikipedia上的页面,将其源码用vim命令编辑为bioinformatics,看看在vim下如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找bioinformatics的字符,把bioinformatics替换为bioinfo science。
  3. man hier获取每个目录的基本信息,将其用vim写入文件directory_tree中。
  4. man builtins获取所有bash内置命令的列表,将其写入文件`lab2/builtins,将其修改为每行一个命令的记录。将每个文件的功能记入该文件。
  5. 用命令ip或者ifconfig查看当前系统的网络配置信息,并将其存入文件lab2/network.info中。
  6. 把你当前的日期信息写入文件lab2/finished.log中。

最后别忘记了把lab2目录打包成lab2_你的学号.tar.gz,并删除目录lab2。

posted @ 2023-03-13 15:55  cyny666  阅读(140)  评论(0)    收藏  举报