实验一:linux系统简介
Linux 本身只是操作系统的内核。内核是使其它程序能够运行的基础。它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本。 Linux 没有自己去开发这些应用程序,而是使用已有的自由软件。这减少了搭建开发环境所需花费的工作量。实际上,他经常改写内核,使得那些程序能够更容易地在 Linux 上运行。许多重要的软件,包括 C 编译器,都来自于自由软件基金 GNU 项目。GNU 项目开始于 1984 年,目的是为了开发一个完全类似于 UNIX 的免费操作系统。为了表扬 GNU 对 Linux 的贡献,许多人把 Linux 称为 GNU/Linux(GNU 有自己的内核)。
Linux学习历程
实验二:基本概念及操作
终端的概念:终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录。
Shell:Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 cmd.exe 。普通意义上的 Shell 就是可以接受用户输入命令的程序。
重要的快捷键:Tab:使用Tab
键来进行命令补全。Ctrl+c:
键来强行终止当前程序
课后作业
第三章: 用户及权限设置
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,这里有两种方式:
- 方式一:二进制数字表示
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ” 。
- 方式二:加减赋值操作
g
、o
还有 u
分别表示 group、others 和 user,+
和 -
分别表示增加和去掉相应的权限。
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将文件 file1.txt 设为所有人皆可读取 :
chmod o+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该文件拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod -r a+r *
此外chmod也可以用数字来表示权限如 :
chmod 777 file
r=4,w=2,x=1
- 若要rwx属性则4+2+1=7;
- 若要rw-属性则4+2=6;
- 若要r-x属性则4+1=5。
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
chown 用户名:群名 文件名 文件归属
第四章:Linux目录结构
linux目录结构和windows的区别:windows盘符区分 linux目录为主
Linux目录结构
- ls: 列出目录
- cd:切换目录
- pwd:显示目前的目录
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
- cp: 复制文件或目录
- rm: 移除文件或目录
- mv: 移动文件与目录,或修改文件与目录的名称
第五章:环境变量及文件查找
创建C程序并输出
首先要使用gcc将其进行编译 gcc -o
GCG -o
选项用来指定输出文件,它的用法为:
[infile] -o [outfile]
[infile] 表示输入文件(也即要处理的文件),它可以是源文件,也可以是汇编文件或者是目标文件;[outfile] 表示输出文件(也即处理的结果),它可以是预处理文件、目标文件、可执行文件等。
将文件目录写入PATH(环境变量)中
$ PATH=$PATH:/home/shiyanlou/mybin
注意这里一定要使用绝对路径。
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是 .zshrc
,相应 Bash 的配置文件为 .bashrc
。它们在 etc
下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件
cmatrix
实验六 文件打包与解压
zip命令-r
表示递归打包,将目录下所有文件打包。-9
表示打包速度与大小等级设定,1表示最快压缩但体积大,9表示体积最小但耗时最久。-q
表示静默打包,不向终端输出信息。-o
表示输出文件。
tar命令-c
表示创建一个 tar 包文件-x
表示解压缩文件,只能解压缩到一个已存在的目录,所以下图中第一次实现错误提示。-f
用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后
Linux命令分为内建命令和外部命令。内建命令是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,并由 shell 程序识别并在 shell 程序内部完成运行,而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。外部命令是 Linux 系统中的实用程序部分,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
可以使用type
进行区分。
实验八:Linux下的帮助命令
help
命令是用于显示 shell 内建命令的简要帮助信息。man
没有内建与外部命令的区分,显示系统手册页中的内容,大多数都是对命令的解释信息,还有一些相关的描述。info
是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息
实验九:Linux任务计划crontab
crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。
启动crontab sudo cron -f */1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)
可以实现每分钟在/home/shiyanlou
目录下创建一个以当前的年月日时分秒为名字的空白文件。
虽然刚刚添加了任务,但是如果cron
的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会执行.可以通过以下2种方式来确定cron
是否成功的在后台启动。
我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈
sudo tail -f /var/log/syslog
从图中我们可以看到分别在13点28、29、30分的01秒为我们在 shiyanlou 用户的家目录下创建了文件
sudo cron -f &
crontab -e 添加
0 3 * * * sudo rm /home/shiyanlou/tmp/*
0 3 * * * sudo cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)虚拟机卡顿无法实现
实验十:命令执行顺序控制
有选择的执行命令
&& 表示前一条命令执行成功时才执行后一条命令,|| 表示上一条命令执行失败后才执行下一条命令
wc 命令用于统计并输出一个文件中行、单词和字节的数目。-l
:行数-w
:单词数-c
:字节数-m
:字符数-L
:最长行字节数
sort排序命令:按照一定方式排序后输出
uniq命令用于去重或者输出重复行
实验十一:简单的文本处理
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
使用方式:
tr [option]...SET1 [SET2]
常用的选项有:
选项 | 说明 |
---|---|
-d |
删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配 |
-s |
去除set1指定的在输入文本中连续并重复的字符 |
操作举例:
# 删除 "hello shiyanlou" 中所有的'o','l','h' $ echo 'hello shiyanlou' | tr -d 'olh' # 将"hello" 中的ll,去重为一个l $ echo 'hello' | tr -s 'l' # 将输入文本,全部转换为大写或小写输出 $ echo 'input some text here' | tr '[:lower:]' '[:upper:]' # 上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的
更多 tr 的使用,你可以使用--help
或者man tr
获得。
col 命令可以将Tab
换成对等数量的空格键,或反转这个操作。
使用方式:
col [option]
常用的选项有:
选项 | 说明 |
---|---|
-x |
将Tab 转换为空格 |
-h |
将空格转换为Tab (默认选项) |
操作举例:
# 查看 /etc/protocols 中的不可见字符,可以看到很多 ^I ,这其实就是 Tab 转义成可见字符的符号
$ cat -A /etc/protocols
# 使用 col -x 将 /etc/protocols 中的 Tab 转换为空格,然后再使用 cat 查看,你发现 ^I 不见了
$ cat /etc/protocols | col -x | cat -A
学过数据库的用户对这个应该不会陌生,这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。
使用方式:
join [option]... file1 file2
常用的选项有:
选项 | 说明 |
---|---|
-t |
指定分隔符,默认为空格 |
-i |
忽略大小写的差异 |
-1 |
指明第一个文件要用哪个字段来对比,默认对比第一个字段 |
-2 |
指明第二个文件要用哪个字段来对比,默认对比第一个字段 |
操作举例:
$ cd /home/shiyanlou
# 创建两个文件
$ echo '1 hello' > file1
$ echo '1 shiyanlou' > file2
$ join file1 file2
# 将/etc/passwd与/etc/shadow两个文件合并,指定以':'作为分隔符 $ sudo join -t':' /etc/passwd /etc/shadow # 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段 $ sudo join -t':' -1 4 /etc/passwd -2 3 /etc/grou
paste
这个命令与join
命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab
隔开。
使用方式:
paste [option] file...
常用的选项有:
选项 | 说明 |
---|---|
-d |
指定合并的分隔符,默认为Tab |
-s |
不合并到一行,每个文件为一行 |
操作举例:
$ echo hello > file1
$ echo shiyanlou > file2 $ echo www.shiyanlou.com > file3 $ paste -d ':' file1 file2 file3 $ paste -s file1 file2 file3
实验12 数据流重定向
数据流可以分为3种:
输入数据流:以写文件为例,从键盘输入的字符就输入数据流
输出数据流:以读文件为例,将文件内容显示到屏幕上,显示的内容就是输出字符流
标准错误输出(stderr)
对于命令行来说输入数据流主要来自键盘,输出数据流只要介质是屏幕。
语法:
输入数据流:使用<(覆盖)或<<(累加)
实验感悟
由于是第一次接触Linux操作系统,学习起来十分吃力,记不住操作命令,习惯于windows系统。
但是通过这次学习,让我对Linux有了一些了解,对Linux产生了一些兴趣,学习到了Linux的基本操作以及其文件结构与Windows的区别,希望在之后的课程中不断深化对Linux的学习。