20155303狄惟佳预备作业三Linux学习笔记
20155303狄惟佳预备作业三Linux学习笔记
初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对“人人为我,我为人人”软件世界的追求。Ubuntu产生于一个软件逐渐脱离硬件成为独立产业的时代,很多软件逐渐只提供二进制代码而不提供源代码。出于工作需要,Stallman决心创建一套完全自由的操作系统,从而创造自由的软件世界。经过全世界有志之士的共同努力,Linux应运而生,并不断被修改完善。开源,便是Ubuntu备受青睐的原因。
初识Ubuntu
Ubuntu系统通常会在每年4月和10月各发布一个新的版本。进入下载页面,选择16.04版本下载安装即可。安装好的界面如图:
- 答疑解惑:Linux中的最高权限
之前听说过Linux的root用户,权力非常大,让我想起了Windows系统里的administrator,出于对两者区别的好奇,我上网学习了相关的知识。
- administrator
administrator看似是Windows系统下权力最高者,实则不然。Windows系统本身会进行自我保护,即使是管理者administrator的权利也不会大过系统本身的权力。尝试将Windows系统C:\WINDOWS下的regedit.exe删除(我抱着半信半疑的态度尝试时真的心惊胆战!),但刷新几次之后又复原了。所以,Windows系统下的权力最高者是SYSTEM本身。
- root
在Ubuntu下(或者其他Linux系统)权力最高者,毋庸置疑是root!root在系统中拥有真正至高无上的权力,甚至可以运行rm -rf删除系统中所有文件(危险动作,自觉放弃了尝试...)。而Windows下是不可能在系统运行时格式化系统盘的。
- 两者为什么不同
administrator与root有这些不同,我认为归根到底是两个操作系统的理念不同。Linux作为一个面向广大程序设计者的操作系统,其优势在于每个人都可以获得这个系统全部的源代码,并根据自己的需求进行修改。这种开放的原则使得系统本身为人类所创造,并可以为人类所任意修改。我想这也是开源精神一种体现吧。
命令行的使用
使用Ctrl+Alt+t打开终端,看到如图所示的窗口
这种图形界面下的命令行窗口,叫做伪终端。操作系统和用户在这个窗口里使用命令进行交流。通过查阅资料了解到,之所以称为伪终端,是因为它只是负责提供一个输入命令的交互界面,真正处理命令的是Shell。
在Ubuntu系统中,默认的Shell是bash,比如第一行出现的“shiyanlou:~/ $”就是bash的语言。其中,“:”后面,“$"前面是当前所在目录,“~”代表用户的家目录,也就是“/home/<用户名>”这个位置。“$”则是命令提示符,在“$"后面输入命令即可。如果使用root登录终端,提示符为"#",但Ubuntu系统默认禁用root用户,所以一般看不到#提示符。
Shell使用初探
一、目录结构
①当前目录与家目录
运行ls命令可查看当前目录下的所有文件。用户每次打开终端时,默认进入家目录里。命令行下可以使用~代表当前用户的家目录。
②进入指定目录
使用$ cd <路径>命令进入任意一个目录中,只要有权限即可。
③绝对路径与相对路径
绝对路径从“/”这个最根本的位置开始叙述,直接但有时比较费时。cd同时相对路径,即从所在位置开始进行描述。使用时还要参考具体情况。如果不清楚所在目录,可以输入pwd命令查询。
二、重要的Tab命令补全功能
遇到字母多的命令时,Tab键就显得方便很多。比如要运行ifconfig命令,只要输入ifc后按下Tab键就能自动补全。
通过查询资料了解到,在按下Tab键的时候,bash遍历PATH变量所设置的所有目录,检查了其中所有的有执行权限的文件(“Linux中一切皆文件”,命令也是个可执行的文件),最终找到ifconfig文件。
当然,如果只写了if,按下Tab键,由于有四个命令均以if开头,所以需要按两次Tab键,列出所有以if开头的命令,根据需要输入即可。
三、通配符
DOS系统的通配符是“ * ”和“?”两个符号。而Linux下的Shell有所不同。以bash为例,星号(*,Asterisk)——代表任何长度的任何字符。
问号(?,Question mark)——代表任何单个字符。
方括号([],Square brackets)——定义一定范围的字符。
使用以上三种通配符可以在命令行的使用中提高效率。
以上大致了解了命令行的使用,而学习才刚刚开始。对于一名Linux新手来说,熟练掌握更多的命令才是最重要的。
通过近期在实验楼的学习,初步掌握了一些常用命令的使用,总结如下:
- 常用快捷键
常用快捷键 | 功能说明 |
---|---|
CTRL+ALT+T | 打开终端 |
CTRL+SHIFT+T | 新建标签页 |
ALT+数字N | 终端中切换到第N个标签页 |
Tab | 终端中命令补全 |
上下键盘 | 切换命令历史 |
CTRL+C | 中断程序运行 |
- 用户及文件权限管理
命 令 | 用 途 |
---|---|
who am i | 查看当前用户 |
su |
切换到用户user(需要输入目标用户的密码) |
su - |
切换到用户user |
sudo adduser |
新建sudo组用户user |
su -l |
切换登录用户 |
exit 或快捷键 Ctrl+d | 退出当前用户 |
groups |
查看该用户所属用户组 |
cat | 读取指定文件的内容并打印到终端输出 |
cat /etc/group l grep -E | 过滤用户组信息 |
sudo usermod -G sudo |
将其他用户添加到sudo组 |
sudo deluser |
删除用户 |
ls -l | 列出并显示当前目录下的文件及详细信息 |
cat |
读取某个文件的内容 |
ls -A | 显示除了 '.'(当前目录),'..' 上一级目录之外的所有包含隐藏文件 |
ls -dl <目录名> | 查看某一个目录的完整属性 |
ls -AsSh | 显示所有文件大小 |
touch | 新建文件 |
ll | 查看文件所有者信息 |
cp | 复制文件 |
echo "内容" > 文件名 | 在文件中添加内容 |
chmod 三位数字 文件名 | 修改权限(三位数字为拥有者,所属用户组,其他用户的rwx顺序,有该权限为1) |
注意:Linux 下密码输入是不显示任何内容的。
- Linux 目录结构及文件基本操作
命令 | 用途 |
---|---|
tree / | 查看文件间关系 |
sudo apt-get update;sudo apt-get install 软件名 | 下载安装软件 |
ls -a | 查看隐藏文件 |
cd | 切换目录 |
cd .. | 进入上一级目录 |
cd ~ | 进入用户“home”目录 |
pwd | 获取当前路径 |
.. | 相对路径中当前目录的上一级目录 |
mkdir | 创建一个空目录 |
mkdir -p father/son/grandson | 同时创建一个多级目录 |
cp | 复制一个文件或目录到指定目录 |
cp -r或cp -R | 复制目录(递归复制) |
rm | 删除文件 |
rm -f | 忽略提示强制删除 |
rm -r或rm -R | 删除目录 |
mv 源目录文件 目的目录 | 移动文件(剪切) |
cat,tac和nl | 查看文件(cat正序,tac倒序,nl添加行号并打印) |
cat -n | 查看文件并显示行号 |
more | 分页查看文件(使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出) |
tail 文件路径 | 只查看的头几行(默认为10行,不足10行则显示全部)和尾几行 |
tail -n 页数 文件路径 | 只查看该行 |
file | 查看文件的类型 |
- 环境变量与文件查找
命令 | 用途 |
---|---|
declare | 创建指定类型的变量 |
= | 给左边的变量赋值 |
echo $ | 读取变量的值($符号用于表示引用一个变量的值,不要忘记) |
set | 显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 |
sort | 排序 |
echo $PATH | 查看PATH环境变量的内容 |
vim hello_shell.sh | 创建一个 Shell 脚本文件 |
./hello_shell.sh | 执行脚本 |
vim hello_world.c | 创建一个 C 语言"hello world"程序 |
gcc -o hello_world hello_world.c | 使用 gcc 生成可执行文件 |
PATH=$PATH:/home/shiyanlou/或echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc | 添加自定义路径到“PATH”环境变量(注意这里一定要使用绝对路径) |
unset | 删除一个环境变量 |
source | 让环境变量立即生效 |
. | 同上,注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。 |
whereis,which,find,locate | 均与搜索相关。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s) ,which确定是否安装了某个指定的软件,只从PATH环境变量指定的路径中去搜索命令,find,locate指定目录下的不同文件类型 |
注意:关于变量名,并不是任何形式的变量名都是可用的,变量名只能是英文字母,数字或者下划线,且不能以数字作为开头。
- 文件打包与压缩
header 1 | header 2 |
---|---|
zip | 压缩打包文件夹 |
zip -r | 递归打包包含子目录的全部内容 |
zip -q | 安静模式打包,即不向屏幕输出信息 |
zip -o | 输出文件,需在其后紧跟打包输出文件名 |
du | 查看打包后文件的大小 |
zip -r -9 -q -o shiyanlou_ 9.zip /home/shiyanlou -x ~/.zip zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/.zip | 设置压缩级别为9和1(9最大,1最小),重新打包(注意:这里只能使用绝对路径,否则不起作用。) |
du -h -d 0 *.zip | 查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小 |
zip -r -e -o | 创建加密压缩包 |
unzip | 解压到当前目录 |
unzip -q | 使用安静模式,将文件解压到指定目录 |
unzip -l | 不解压只查看压缩包的内容 |
unzip -O GBK 中文压缩文件.zip(英文字母,大写o) | 指定编码类型 |
rar | 创建rar 压缩包 |
unrar | 解压 rar 压缩包 |
rar d | 从指定压缩包文件中删除某个文件 |
rar l | 查看不解压文件 |
unrar x | 全路径解压 |
unrar e | 去掉路径解压 |
tar -cf | 创建一个 tar 包 |
tar -xf shiyanlou.tar -C tardir | 解包一个文件(-x参数)到指定路径的已存在目录(-C参数) |
tar -tf | 只查看不解包文件(-t参数) |
tar -cphf | 保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数) |
tar -czf | 使用gzip来压缩文件 |
tar -xzf | 压缩*.tar.gz文件 |
tar -xJf | 压缩*.tar.xz文件 |
tar -xjf | 压缩*tar.bz2文件 |
注意:rar 的命令参数没有-,如果加上会报错。
- 文件系统操作与磁盘管理
命令 | 用途 |
---|---|
df | 以blocks的大小显示磁盘的容量 |
df -h | 以人类语言显示磁盘容量 |
du | 以 blocks 的大小展示目录的容量 |
du -h | 以人类语言展示目录的容量 |
du -h -d | 指定查看目录的深度 |
dd of=test bs=10 count=1或dd if=/dev/stdin of=test bs=10 count=1 | 从标准输入读入用户输入到一个文件 |
dd if=/dev/stdin of=/dev/stdout bs=10 count=1 | 从标准输入读入用户输入到标准输出 |
bs | 指定虚拟磁盘块大小 |
dd if=/dev/stdin of=test bs=10 count=1 conv=ucase | 将输出的英文字符转换为大写再写入文件 |
dd if=/dev/zero of=virtual.img bs=1M count=256 | 设备创建一个容量为 256M 的空文件 |
sudo mkfs.ext4 virtual.img | 将虚拟磁盘镜像格式化为ext4文件系统 |
sudo mount | 查看主机已经挂载的文件系统 |
mount [options] [source] [directory] | 挂载真正的磁盘到目录树 |
mount -o loop -t ext4 virtual.img /mnt | 挂载我们创建的虚拟磁盘镜像到/mnt目录 |
sudo umount /mnt | 卸载已挂载磁盘 |
sudo fdisk -l | 查看硬盘分区表信息 |
sudo fdisk virtual.img | 进入磁盘分区模式 |
sudo losetup /dev/loop0 virtual.img | 建立镜像与回环设备的关联 |
sudo losetup -d /dev/loop0 | 解除设备关联 |
sudo kpart kpartx -av /dev/loop0 | 用kpartx工具建立虚拟设备的映射 |
sudo kpart kpartx -dv /dev/loop0 | 取消映射 |
sudo mkfs.ext4 -q /dev/mapper/loop0p1 | 建立映射后,将其全部格式化为ext4 |
mkdir -p /media/virtualdisk_ | 在/media目录下新建四个空白目录用于挂载虚拟磁盘 |
sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1(以此类推) | 挂载磁盘分区 |
sudo umount /dev/mapper/loop0p1(以此类推) | 卸载磁盘分区 |
- Linux下的帮助命令
命令 | 用途 |
---|---|
bash | 进入 bash 中,在 bash 中内置有help命令 |
help ls | 显示内建命令的帮助信息 |
ls --help | 显示外部命令的帮助信息 |
man ls | 显示系统手册页中的内容 |
info ls | 更完整的显示出 GNU 信息 |
实验楼第3~8节的命令总结如上,但这些还远远不够。在之后的学习中我会继续补充完善,并多加练习。
学习过程中的一些疑惑以及解决
- Linux的分区与挂载
在学习过程中频繁遇到分区与挂载这两个专业术语。鉴于Windows与Linux的区别,我想Linux的分区一定有特殊之处,于是查阅了相关资料进行学习。
与Windows的C盘D盘等等不同的是,Linux系统中有独特的目录结构。最基本的是一个根目录“/”,根目录下还有很多目录,比如“/etc”用来存放配置文件,“/bin”用来存放二进制程序,“/boot”用来存放启动文件,“/lib”用来存放库文件,“/home”用来存放用户的各种文件等等。这些便是Linux的分区。
用户可以任意一个目录里的东西存在某个分区里,如果不指定,则这个目录里的东西存在上一级目录所在分区里,以此类推,所以一定要指定“/”目录存放在哪个分区。给某一个制定分区的过程,即“挂载”。
- Vim编辑器的使用
实验楼课程第四节提到Vim编辑器的使用。在学习Linux的同时,我进行了Vim文本编辑器的学习。
在几种常用文本编辑器中,功能最强大的要数Vim和Emacs了。学习Vim的使用,可以为今后写程序以及写脚本做充足准备。
Vim有3种工作模式,即:指令模式、输入模式、行末模式。
- 指令模式:Vim运行默认进入指令模式。在这种模式下,可以通过各种快捷键、组合键进行操作,对文本进行编辑,比如复制、粘贴、删除、查找等操作。
- 输入模式:即向文件里输入字符的模式。按i键或者Insert键进入输入模式。进入后,页面左下角有“插入”字样,即跟使用gedit之类的编辑器一样了。按Esc键可以回到指令模式。
- 行末模式:在该模式下可以在界面最下面一行输入命令并执行,从而实现各种操作,例如打开文件、保存文件、查找替换、退出等操作。行末模式执行完最后一条指令后自动回到指令模式。
三种模式下均有常用快捷键或常用命令,目前正在进行学习。之后会对于快捷键以及命令的使用做系统的总结。
写在最后:对于寒假的一点点感触
转眼寒假过半,放假前我觉得难以完成的种种任务,正在被我一项一项finished,比如学习Linux,比如每天扇贝打卡,比如健身锻炼,比如读书。
刚开始学习Linux感觉很吃力,虽然大部分时候打开终端输入命令都能得到想要的结果,但搞不清楚Linux的本质,总是觉得学习只是浮在水面。于是我在学习实验楼课程的同时,在网上查阅各种资料,跟视频图书等等学习,终于摸清了Linux的一点点门道。熟练掌握各种命令的使用,成为了接下来学习Linux的重中之重。
在我看来,学习Linux的过程反过来促进了我英语的学习(真是奇妙),虽然安装Ubuntu选择的语言是中文,但动不动就出现一篇英文提示让我实在很头大,而且所有的命令都是英文单词或是英文单词的缩写,所以我想,具有一定的词汇量对于Linux的学习也会有很大帮助吧。
养成一个良好的习惯,或是掌握一门新技术,都不是轻而易举的事。最后我想说给自己,克服懒惰吧。万里长征才刚刚开始。