难度:2;预计完成时间:7小时
[info] 安装Linux系统
安装Ubuntu 20.04(桌面版)
当你的虚拟机(或者物理机)出现了Ubuntu的桌面时,就成功了。 我们后面的实验都将基于Ubuntu 20.04进行,当然使用别的Linux发行版版本也是可以的,出问题可以自行解决。一般来说出问题是你命令用的不对,这时候需要使用man指令来查询用法。
[info] man
使用man指令,查询
ls
,cd
这两个命令的用法
请继续做下面的题目:
[info] 文件操作
完成下面的文件操作
(1)进入到home文件夹.
(2)在home文件夹中添加一个新的文件夹,叫做learn_linux.
(3)进入到learn_linux文件夹.
(4)新建一个文件,叫做a(注意不要有拓展名).
(5)使用vi修改a这个文件,在文件中写入“Sukuna Best”
(6)查看a里面的内容(提示:cat)
(7)将文件a复制到桌面
(8)将文件a移动到桌面
(9)使用命令查看桌面有什么内容.
(10)删除掉learn_linux文件夹.
(11)删除掉桌面上的a文件.
Linux的文件操作是最基本的Linux命令,是Linux开发的基础,最重要的是通过文件的操作了解,Linux是如何寻找路径的?路径分为绝对路径和相对路径。绝对路径一般从\home
开始,而相对路径从当前文件夹开始。
[info] 软件源更新
Linux不同于Windows的一点是,Linux管理下载的软件是放到
/usr/bin
这个文件夹中,并且提供一个叫做apt的软件方便我们进行下载.所以说为了下载的速度我们有必要使用国内的软件源 比较方便的方法就是更改/etc/apt/source.list
这个文件.更改的方法如下:
- 进入到目录
/etc/apt/
- 备份之前旧的文件.(这一步可以跳过)
- 输入
vi source.list
就可以对此文件进行修改.(tips:输入d+G可以清空文件)
上面的方法如果行不通,那就试试上网搜索。
[info] 安装软件
尝试运行
git init
,看看控制台的报错信息.根据报错使得这个命令顺利运行。
方便地安装软件和依赖以及管理软件和依赖是Linux开发的一大亮点.环境变量的引入更是为Linux开发提供了巨大的便利.
请继续做下面的题目:
[info] 权限管理
在桌面中添加文件
ramdom.sh
,并添加下面的代码.为什么代码运行不了?
是sudo的问题还是什么的问题?.尝试让代码运行
num=$[RANDOM%100+1] while: do read ‐p "计算机生成了一个 1‐100 的随机数,你猜: " cai if [ $cai ‐eq $num ];then echo "恭喜,猜对了" exit elif [ $cai ‐gt $num ];then echo "Oops,猜大了" else echo "Oops,猜小了" fi
Linux的文件权限管理使得我们可以安全有效的使用操作系统.有的时候一个Shell脚本的运行需要系统赋权限才能执行!这样做是为了系统的安全!
[info] Shell脚本的编写
尝试编写一个脚本,让所有文件名为
*.txt
的文件重命名为*_old.txt
运行下面的脚本,体验Shell脚本的方便性。
function ci(){
if [ -z"$1"]; then
echo "Usage: ci <filename>'
return 1
fi
if [ !-f"$1"]; then
echo "Error: File not found"
return 1
fi
cat"$1"| pbcopy
echo "File content copied to clipboard'
}
请继续做下面的题目:
[info] 在Linux中运行代码
(1)在桌面编写一个C语言代码(命名为
hello.c
),这个代码可以输出Hello World.(2)cd进桌面.
(3)输入下面两条命令
gcc -o hello hello.c
./hello
看输出结果.
(4)我想让编译器输出对应的汇编代码,我该怎么做?
请继续做下面的题目:
[info] 别名系统
使用
alias
命令,将一个命令命名成一个特殊的别名。思考一下别名有什么用
还可以使用
~/.bashrc
对别名进行管理,除了管理别名,还可以做什么呢?
请继续做下面的题目:
[info] 变量系统和路径访问
(1)cd进别的文件夹,执行
./hello
看看能不能输出结果?(2)更改全局变量,把桌面设置为全局变量的一部分.
(3)cd进别的文件夹,执行
hello
看看能不能输出结果?尝试新建一个变量,并用
echo
命令打印出来
Linux的文件重定向非常的方便,可以简化我们命令行的操作.
[info] 文件重定向
(1) 尝试在命令行输入
ifconfig
.找到自己电脑的IP地址.(2) 将ifconfig的输出能不能快捷地复制到一个文件里面?(提示:使用>)
(3) 输入下面的C语言代码,命名为hello.c
编译(
gcc -o hello hello.c
)之前已经写好的C语言代码,并且创建一个新的文件,命名为1.txt,在文件里面添加Sukuna
.执行
./hello < 1.txt
看结果是什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char a[100];
int main(){
scanf("%s",a);
printf("%s\n",a);
}
请继续做下面的题目:
[info] 管道
(1) 使用管道以及grep命令,快速寻找自己电脑的IP地址.
(2) 查询上面一题的C语言代码中含有int的行.
管道能把之前命令的输出作为下一个命令的输入,这种处理模式非常像一个连接起来的水管,故名为管道.
管道的写法就是一个|.
[info] Vim
(1) Vim 共有哪三种模式?请用英文作答。
(2) 向后翻页(行号值由小变大)的快捷键是?
(3)快速定位到 037 行的命令是?
(4)在命令模式下保存并强制退出的命令是?
(5)命令 cc 和 dd 的区别是?
(6)向下跳转 100 行的命令是?
(7)在命令模式下表示撤销的是那个按键?
(8)跳到最后一行的快捷键是?
(9)使用vim在桌面创建一个新的文件,命名为C,在文件里写入
Sukuna
.并成功保存
请继续做下面的题目:
[info] 进程管理
我们可以使用类似
ps aux | grep
这样的命令来获取任务的 pid ,然后您可以基于pid 来结束这些进程。但我们其实有更好的方法来做这件事。在终端中执行sleep 10000
这个任务。然后用 Ctrl-Z 将其切换到后台并使用 bg来继续允许它。现在,使用pgrep
来查找 pid 并使用pkill
结束进程而不需要手动输入pid。(提示:可以使用pkill -af
)如果您希望某个进程结束后再开始另外一个进程,应该如何实现呢?(提示:可以使用
wait
指令)
请继续做下面的题目:
[info] tmux
(1) 使用tmux打开两个命令行窗口.
(2) 在两个命令行窗口运行不同的代码.
(3) 关闭其中一个命令行的窗口