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 --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_{1 . . 3} 在/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的学习也会有很大帮助吧。

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

20155303狄惟佳预备作业三Linux学习笔记的更多相关文章

  1. 20165332 预备作业三 Linux安装及命令入门

    Linux安装及命令入门 一.安装Linux操作系统 由于做的比较晚,结合大多数同学的经验和娄老师的<基于VirtualBox虚拟机安装Ubuntu图文教程>,整个安装过程还算顺利,唯一遇 ...

  2. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

  3. 20165226 预备作业3 Linux安装及学习

    20165226 预备作业3 Linux安装及学习 Linux安装 一.下载安装VirtualBox 1.首先在官网下载,点开基于VirtualBox虚拟机安装Ubuntu图文教程 找到版本进行下载安 ...

  4. 20165230 预备作业3 Linux安装及学习

    20165230 预备作业3 Linux安装及学习 安装Linux操作系统 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,开始了虚拟机的安装,根据教程按着步骤一步一步的完成. 遇 ...

  5. 关于5303狄惟佳同学的myod程序设计的补充实现

    关于5303狄惟佳同学的myod程序设计的补充实现 原版代码实现的局限 原版代码主函数 int main(int argc,char *argv[]) { if(strcmp(argv[1], &qu ...

  6. 20165327 预备作业3 Linux安装及学习

    20165327 预备作业3 Linux安装及学习 一.学习基于VirtualBox虚拟机安装Ubuntu图文教程,在自己笔记本上安装Linux操作系统,注意尽量选用最新版本的VirtualBox和U ...

  7. 20165315 预备作业3 Linux安装及学习

    20165315 预备作业3 Linux安装及学习 一.在自己笔记本上安装Linux操作系统 因为对操作电脑的不熟悉,我在第一项任务上就花费了一定的时间,在安装过程有如下问题: 我的电脑是苹果公司的M ...

  8. 20165211 预备作业3 Linux安装与学习

    20165211 预备作业3 Linux安装与学习 1. Linux安装 涉及软件:VirtualBox,Ubuntu 参考教程:基于VirtualBox安装Ubuntu图文教程 安装过程的问题 在安 ...

  9. 20165303 预备作业3 Linux安装及学习

    =20165303 预备作业3 Linux安装及学习 安装虚拟机 按照http://www.cnblogs.com/rocedu/p/6012545.html步骤进行逐步操作,安装虚拟机. 遇到的问题 ...

随机推荐

  1. html template & iframe

    html template & iframe https://bbs.csdn.net/topics/390123946 据说可以利用某些浏览器bug绕过跨域限制,可以也研究下; 由于浏览器对 ...

  2. 用ClientDataSet更新数据表,怎样自动生成行号? [问题点数:40分]

    ClientDataSet.First;while not ClientDataSet.eof dobegin  ClientDataSet.edit;  ClientDataSet.FieldByN ...

  3. Java多线程(一) —— 传统线程技术

    一.传统线程机制 1. 使用类Thread实现 new Thread(){ @Override public void run() { while(true){ try{ Thread.sleep(2 ...

  4. 【Linux】Linux定时任务Crontab命令详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  5. HDU4726——Kia's Calculation——2013 ACM/ICPC Asia Regional Online —— Warmup2

    题目的意思是给你两个数字(多达10^6位) 做加法,但是有一点,没有进位(进位不算,相当于这一位相加后对10取模) 你可以任意排列两个数字中的每一位,但是不能是0开头. 现在题目要求以这种不进位的算法 ...

  6. Bob Waters - Twenty Years

    We were just children and grown up closeHow we made it this far only god knowsWe bend the rulesSmash ...

  7. USACO Section 1.5 Superprime Rib 解题报告

    题目 题目描述 超级素数的定义如下:如果有个素数我们从右往左依次去掉一位数,每次去掉一位数剩下的数仍然是素数,那么我们称这个数是超级素数.例如7331,这是一个素数,从右往左依次去掉一位数733, 7 ...

  8. 【BZOJ2281】【Sdoi2011】黑白棋 解题报告

    [BZOJ2281][Sdoi2011]黑白棋 Description ​ 小A和小B又想到了一个新的游戏. ​ 这个游戏是在一个\(1\)*\(n\)的棋盘上进行的,棋盘上有\(k\)个棋子,一半是 ...

  9. LINUX内核分析第七周——可执行程序的装载

    一.得到一个可执行程序 1. 预处理.编译.链接 gcc hello.c -o hello.exe gcc编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤. 预处理 => ...

  10. MySQL 第六篇:数据备份、pymysql模块

    一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1O8hXkdRK5_EVHZwNPwjCB ...