20155303狄惟佳预备作业三Linux学习笔记

20155303狄惟佳预备作业三Linux学习笔记

初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对“人人为我,我为人人”软件世界的追求。Ubuntu产生于一个软件逐渐脱离硬件成为独立产业的时代,很多软件逐渐只提供二进制代码而不提供源代码。出于工作需要,Stallman决心创建一套完全自由的操作系统,从而创造自由的软件世界。经过全世界有志之士的共同努力,Linux应运而生,并不断被修改完善。开源,便是Ubuntu备受青睐的原因。

初识Ubuntu

Ubuntu系统通常会在每年4月和10月各发布一个新的版本。进入下载页面,选择16.04版本下载安装即可。安装好的界面如图:image

  • 答疑解惑: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打开终端,看到如图所示的窗口image

这种图形界面下的命令行窗口,叫做伪终端。操作系统和用户在这个窗口里使用命令进行交流。通过查阅资料了解到,之所以称为伪终端,是因为它只是负责提供一个输入命令的交互界面,真正处理命令的是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开头的命令,根据需要输入即可。image

三、通配符

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 --remove-home 删除用户
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的分区。image

用户可以任意一个目录里的东西存在某个分区里,如果不指定,则这个目录里的东西存在上一级目录所在分区里,以此类推,所以一定要指定“/”目录存放在哪个分区。给某一个制定分区的过程,即“挂载”。

  • Vim编辑器的使用

实验楼课程第四节提到Vim编辑器的使用。在学习Linux的同时,我进行了Vim文本编辑器的学习。

在几种常用文本编辑器中,功能最强大的要数Vim和Emacs了。学习Vim的使用,可以为今后写程序以及写脚本做充足准备。

Vim有3种工作模式,即:指令模式、输入模式、行末模式。

  • 指令模式:Vim运行默认进入指令模式。在这种模式下,可以通过各种快捷键、组合键进行操作,对文本进行编辑,比如复制、粘贴、删除、查找等操作。
  • 输入模式:即向文件里输入字符的模式。按i键或者Insert键进入输入模式。进入后,页面左下角有“插入”字样,即跟使用gedit之类的编辑器一样了。按Esc键可以回到指令模式。
  • 行末模式:在该模式下可以在界面最下面一行输入命令并执行,从而实现各种操作,例如打开文件、保存文件、查找替换、退出等操作。行末模式执行完最后一条指令后自动回到指令模式。

三种模式下均有常用快捷键或常用命令,目前正在进行学习。之后会对于快捷键以及命令的使用做系统的总结。

写在最后:对于寒假的一点点感触

转眼寒假过半,放假前我觉得难以完成的种种任务,正在被我一项一项finished,比如学习Linux,比如每天扇贝打卡,比如健身锻炼,比如读书。

刚开始学习Linux感觉很吃力,虽然大部分时候打开终端输入命令都能得到想要的结果,但搞不清楚Linux的本质,总是觉得学习只是浮在水面。于是我在学习实验楼课程的同时,在网上查阅各种资料,跟视频图书等等学习,终于摸清了Linux的一点点门道。熟练掌握各种命令的使用,成为了接下来学习Linux的重中之重。

在我看来,学习Linux的过程反过来促进了我英语的学习(真是奇妙),虽然安装Ubuntu选择的语言是中文,但动不动就出现一篇英文提示让我实在很头大,而且所有的命令都是英文单词或是英文单词的缩写,所以我想,具有一定的词汇量对于Linux的学习也会有很大帮助吧。

养成一个良好的习惯,或是掌握一门新技术,都不是轻而易举的事。最后我想说给自己,克服懒惰吧。万里长征才刚刚开始。

posted @ 2017-01-26 22:01  0x14b7狄  阅读(316)  评论(0编辑  收藏  举报