实验一 Linux 系统简介
这一节主要学习了Linux的历史,重要人物以及学习Linux的方法。Linux和Windows在是否收费、软件与支持、安全性、可定制性和应用范畴等方面都存在着区别。目前感受最深的是Linux的命令行操作,我还不能习惯不用或少用图形界面。在安装Ubuntu时遇到电脑不支持虚拟化的问题,通过VMware虚拟安装Ubuntu的详细过程及错误解决方案进入bios设置虚拟化启用得以解决。
实验二 基本概念及操作
- 实践
1.批量建立文件
通配符[c1-c2]含义为匹配 c1-c2 中的任意单一字符,我做了尝试想查看效果,但出现错误:
反思:如果使用touch命令,匹配 c1-c2 中的任意单一字符,会把所有的字符都创建出来,这就和touch {c1..c2}.txt没什么区别,后面的结果不能传递给touch做解释。于是我尝试其他命令看到了想要的结果:
2.一些命令在使用前需要更新安装:
- 作业
实验三 用户文件权限管理
- 实践
1.su与su -l
su
实践后我观察到了区别,但仍不明白环境变量的改变会带来什么影响,之后在本节作业中找到了答案。
2.将其它用户加入 sudo 用户组
新加入的用户yxt不具有 root 权限的,也不在 sudo 用户组。必须将yxt加入 sudo 用户组,才可以让它使用 sudo 命令获得 root 权限:
3.变更文件所有者
4.修改权限
二进制数字表示:每个文件的三组权限(拥有者,所属用户组,其他用户)对应一个 " rwx ":
加减赋值操作:g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限:
- 作业
1.添加用户loutest
2.切换用户并创建opt文件夹
这时问题来了,首先用su,mkdir opt报错没有权限。根据所学的“su与su-”,我猜测现在的位置不能支持loutest创建文件。参考Linux下su与su -命令的本质区别,知道了不带-的su不会读取目标用户的环境配置文件,所以没有权限为目标用户创立文件。(有时配置文件多了或者少了一个空格,服务就运行不了。一定要注意细节问题。)
3.将loutest加入sudo组
4.设置成用户 loutest 可以读写
实验四 Linux 目录结构及文件基本操作
- 实践
1.使用 -p 参数,同时创建父目录(如果不存在该父目录)
2.使用-r 或者 -R 参数递归复制文件夹
3.批量重命名
4.cat正序打印文件内容到标准输出,tac 为倒序
5.file查看文件类型
- 作业
1.创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt :
2.Linux 的日志文件在哪个目录?
日志文件是动态的,所以在/var/log中。
实验五 环境变量与文件查找
- 实践
1.当在 Shell 中执行一个命令时,系统会按照 PATH 中设定的路径按照顺序依次到目录中去查找。创建可执行 Shell 脚本放入mybin文件夹中,即可在mybin目录中运行此程序。回到上一级目录,当再想运行此程序时,会发现找不到此文件:
如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到 PATH 环境变量。但是实践结果又出现找不到文件:
反思:还有一个问题,在未将命令所在路径添加到 PATH 环境变量的条件下,在mybin目录中运行时输入的是./shell.sh,为什么必须加./才能执行?我将此问题与现在的出错点进行了对比,问题得以解决。“./”代表的是当前目录,所以执行的是当前目录下的脚本或程序,若不加“./”,shell就会去PATH环境变量保存的路径按照顺序查找,显然是查找不到的。在将命令所在路径添加到 PATH 中后,回到shiyanlou目录,在PATH中可以找到/mybin,故可直接执行shell.sh:
确保每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令:
2.搜索文件
locate通过“ /var/lib/mlocate/mlocate.db ”数据库查找,快而全:
!
注:locate不只是在 /etc 目录下查找,还会自动递归子目录进行查找。
find不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索,精而细。
列出当天内容有改动的文件:
$ find ~ -ctime 0
列出比 Code 文件夹新的文件:
$ find ~ -newer /home/shiyanlou/Code
实验六 文件打包与压缩
- 实践
1.zip和unzip
-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。路径必须为绝对路径:
2.tar
-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后。解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):
实验七 文件系统操作与磁盘管理
dd的命令行选项格式为选项=值!bs(block size)用于指定块大小(缺省单位为 Byte),count用于指定块数量。从/dev/zero设备创建一个容量为 256M 的空文件,使用 mkfs 命令格式化磁盘:
实验八 Linux下的帮助命令
内建命令是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,并由 shell 程序识别并在 shell 程序内部完成运行,而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。
外部命令是 Linux 系统中的实用程序部分,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
type 命令来区分是内建命令还是外部命令:
help 命令只能用于显示内建命令,外部命令的话基本上都有一个参数--help:
实验九 Linux任务计划crontab
通过 crontab 命令,可在固定的间隔时间执行指定的系统指令或 shell script 脚本:
实验十 命令执行顺序控制与管道
1.有选择的执行命令
&& 表示前一条命令执行成功时才执行后一条命令,|| 表示上一条命令执行失败后才执行下一条命令
将 && 和 || 结合起来使用时是否以任意顺序都行?实践如下:
修改后即可:
2.计数工具wc
wc 命令用于统计并输出一个文件中行、单词和字节的数目:
结合管道:
3.sort,uniq
实验十一 简单的文本处理
tr:-d 删除和set1匹配的字符(不是全词匹配也不是按字符顺序匹配),-s 去除set1指定的在输入文本中连续并重复的字符:
col 命令可以将Tab换成对等数量的空格键,或反转这个操作。
paste命令在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
实验十二 数据流重定向
1.重定向和管道
管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接:
2.tee
使用tee命令,既可以将输出重定向到文件,也可以将信息打印在终端:
实验十三 正则表达式基础
1.正则表达式操作举例
2.sed
sed工具用于过滤和转换文本的流编辑器。
打印奇数行,将"shiyanlou" 全局替换为"hehe"(p通常与-n参数配合使用,不能省略最后的"p"命令):
实验十四、十五 进程管理和日志系统
通过这两节大致了解进程的概念、进程之间存在的相互关系、进程的查看命令 ps,pstree,top、进程的管理命令 kill,nice,renice、系统日志结构以及日志工具的配置。
小结
1.Linux的常用命令基本掌握,命令的选项、mount挂载磁盘到目录树、 fdisk 为磁盘分区、正则表达式等还需要练习,进程和日志由于时间的关系看得比较粗需要继续琢磨,vim还不能熟练操作;
2.做实验时同学间交流,root和普通用户有什么区别?为什么要把新建的用户拉到sudo组里才可以用sudo?我把普通用户比作实验室里的学生,把root比做老师,把sudo组比做可以让非本实验室学生进入实验室的权限,只有导师才有。新进入实验室里的学生(新用户)是不可以擅自将非本实验室的学生带到实验室的(不可sudo),除非导师赋予此权限(把新用户拉入sudo组)。故必须先使新用户属于sudo组,才可执行sudo(可能有部分地方不贴切);
3.Linux内核非常有用但难度也大,下周继续努力!