Linux安装及学习
安装部分
由于是第一次接触虚拟机知识,之前也没什么了解,我选择完全按照老师教程里的安装vbox虚拟机。
虚拟机安装的过程很顺利,不做详细讲解。
出现的问题
- 在启动我新建的虚拟电脑时出现了问题。问题显示如下
我在百度以后得到了学姐的帮助。进入BIOS,选择Configuration中的Intel Uirtual Technology,将Disabled改为Enabled 后保存。
- 我在安装增强功能时显示安装失败。问题显示如下
在查找资料挣扎了很久之后...好吧,发现是我一开始新建虚拟电脑时粗心,将版本选成了32bit,我的主机系统是64bit,这造成了冲突。重新建立虚拟电脑就顺利解决了。
收获
第一次独立安装虚拟机和系统,在一开始知识照着老师的教程一步一步做,在遇到问题后,我努力自己尝试解决,并没有急于立刻求助别人,在思考过程中,我逐渐理解了虚拟机和系统之间的关系(在此之前真的是一只电脑小白)除此之外,和win不同的系统操作方法也让我感到新颖,Linux不像win好上手易于理解,相对更直观地把每一步操作都显示出代码,清楚地展现在我眼前。假期间我还根据百度自己调出了win里的终端,修改了不知道为啥自己跳脱的无线网设置。
学习部分
一、学习别出心裁的Linux命令学习法
- Linux的构架:硬件、内核、系统调用、壳(shell)、库函数、应用。
- Ubuntu快捷键:
Ctrl+Alt+T
:打开终端;Ctrl+Shift+T
:新建标签页;Alt+数字+N
:跳转标签页;Tab
:补全终端命令,在C语言编程中也常用;上键
:切换历史命令;Ctrl+C
:中断程序; - Linux命令:
命令格式:command [options] [arguments] - man命令:
manual(手册、指南),可以使用man man
命令查看帮助,其中man -k
用于搜索关键字,根据相匹配数字来查找所需内容。接着可以用man -f
查看命令基本功能。 - cheat命令:
看起来就很有趣,但是...好吧,看了老师的讲解一头雾水,还是老实安装动手实操。
安装的时候提示我无法获得锁/var/lib/dpkg/lock-open(11:资源暂时不可用)
,大概是我瞎玩耍的时候什么命令执行了一半?orz..输入指令sudo rm/var/lib/dpkg/lock
强行终止就可以了,希望不要留下什么后遗症。 - 其他核心命令:
find
查找文件路径locate
神速版本findgrep
对文件全文检索whereis
,which
查找命令工具装在什么地方.
二、Linux系统简介
- 构成部分(见上部分)、历史简介、主要人物
- Linux为开源自由软件,部分软件质量和体验欠缺。安全性比Windows更高。操作入门难,但效率极高。
- 关于学习Linux:现阶段还处在一个新鲜的尝试和接触阶段,尚不清楚自己要用它来做什么。不过我非常认同老师说的打好基础的重要性,把概念结合实际操作理解透彻了再想应用,我认为更稳妥。
三、基本概念和操作
- 终端的概念:本质上是对应着 Linux 上的 /dev/tty 设备,默认提供了 6 个纯命令行界面的终端,在物理机系统上你可以通过使用
[Ctrl]+[Alt]+[F1]~[F6]
进行切换,通过按下[Ctrl]+[Alt]+[F7]
来切换回图形界面。 - shell壳:他是我们与系统交流的中间程序,也是控制系统的脚本语言。
- 命令行操作:
touch
创建文件、cd
进入一个目录、pwd
查看当前所在目录,其他命令可参看Linux命令大全 - 重要快捷键:
Ctrl+d
:键盘输入结束或输出终端Ctrl+s
:暂停当前程序,按任意键恢复运行Ctrl+z
:将当前程序放在后台运行fg
:后台运行程序恢复前台Ctrl+a
:光标移至输入行头,相当于Home
Ctrl+e
:光标移至输入行末,相当于End
Ctrl+k
:删除从光标所在位置到行末Alt+Backspace
:向前删除一个单词Shift+PgUp
:将终端显示向上滚动Shift+PgDn
:将终端显示向下滚动 - 通配符:通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。
- shell通配符:
*
:匹配0或多个字符?
:匹配任意一个字符[list]
:匹配list中的任意单一字符[!list]
:匹配除 list中的任意单一字符 以外的字符[c1-c2]
:匹配c1-c2中的任意单一字符{string1,string2...}
:匹配string1或string2(...)其一字符串{c1,c2,...}
:匹配c1-c2中的全部字符
四、用户及文件权限管理
- 查看用户:输入
whoami
回车,输出第一列为当前伪终端用户名,第二列的pts/数字
表示打开的伪终端序号,第三列则表示当前伪终端的启动时间。 - who命令:
-a
:打印能打印的全部-d
:打印死掉的进程-m
:和am i
,mom likes
相同-q
:打印当前登录用户数和用户名-u
:打印当前登录用户登录信息-r
:打印运行等级 - 创建用户:
在 Linux 系统里,
root
账户拥有整个系统至高无上的权利,比如 新建/添加 用户。
- 这时就需要sudo这个命令。
新建一个用户:$ sudo adduser 用户名
添加用户到系统并默认为新用户创建 home 目录:$ ls /home
切换新建用户:$ su -l 用户名
之后输入密码...退出用户和退出终端方法一致。 - 用户组:
使用groups
命令,显示为用户名:用户组
或者使用cat
命令,直接查看/etc/group文件。用户需要加入sudo组才能获得root权限,操作如下:$ su shiyanlou # 此处需要输入shiyanlou用户密码 $ groups lilei $ sudo usermod -G sudo lilei $ groups lilei
- 删除用户:
$ sudo deluser 用户--remove-home
- 查看文件权限:
文件类型:Linux 里面一切皆文件。
文件权限:一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件。 ls
命令的常用用法:ls
:列出并显示当前目录下的文件-A
:显示除了.
(当前目录)和..
(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以.
开头的文件为隐藏文件)。-Al
:查看某一个目录的完整属性-dl<目录名>
:显示所有文件大小-AsSh
:其中小s
为显示文件大小,大S
为按文件大小排序,可用man知道如何按其它方式排序- 变更文件所有者:
$sudo chown <新所有者> <文件名>
- 修改文件权限:
- 方式一:二进制数字表示
-
rwx
对应拥有者,所属用户组,其他用户$ chmod 数字 文件名
- 方式二:加减赋值操作
g
、o
还有u
分别表示 group、others 和 user,+
和-
分别表示增加和去掉相应的权限$ chmod go-rw 文件名
adduser
与useradd
区别:
useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
五、Linux 目录结构及文件基本操作
- FHS标准
- 目录的四种交互作用的形态
- 目标路径
windows里磁盘、文件夹也有路径。在Linux中,使用cd
命令可以切换目录。-
表示上一次所在目录,~
通常表示当前用户的home
目录。
- 绝对路径:
以根" / "目录为起点的完整路径,以你所要到的目录为终点。这与windows我们下载软件时选择路径类似。 - 相对路径:
以当前目录.
为起点,以你所要到的目录为终点.使用pwd
命令可以获取当前所在路径(绝对路径)。
- 新建文件:
新建空白文件,因为在其它目录没有权限,所以需要先cd ~
切换回用户的/home/用户名
目录 - 新建目录:
使用mkdir
(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。使用-p
参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在安装软件、配置安装路径时非常有用)。效果为$ mkdir -p father/son/grandson
- 复制文件:
使用cp
(copy)命令复制一个文件到指定目录。$ cp test(文件名) father/son/grandson(路径)
- 复制目录:
要成功复制目录需要加上-r
或者-R
参数,表示递归复制。$ cp -r father family
- 删除文件:
使用rm
命令删除一个文件,用-f
可以强制删除参数。 - 删除目录:
要成功删除目录需要加上-r
或者-R
参数。 - 移动文件:
使用mv
命令移动文件(剪切)。mv 源目录文件 目的目录
- 重命名文件:
mv 旧的文件名 新的文件名
,rename
批量重命名 - 查看文件:
cat
:正序显示打印文件内容到标准输出(终端),加上-n
参数显示行号tac
:倒序打印文件内容到标准输出(终端)nl
:添加行号并打印,比cat -n
更专业的行号打印命令
- 使用
more
和less
命令分页查看文件
用于阅读文件。打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用Enter
键向下滚动一行,使用Space
键向下滚动一屏,按下h
显示帮助,q
退出。 - 使用
head
和tail
命令查看文件
只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。
- 查看文件类型:使用
file
命令查看文件的类型
六、环境变量与文件查找
- 变量
declare
:创建一个变量=
:赋值运算符echo
&$
:读取变量的值,$ 符号用于表示引用一个变量的值
变量名:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。 - 环境变量
- 判定环境变量:在当前进程的子进程有效则为环境变量,否则不是。
- 三种环境变量相关的命令:
set
:显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。env
:显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。export
:显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 - 环境变量永久生效:
/etc/bashrc
和/etc/profile
,它们分别存放的是 shell 变量和环境变量。如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。
- 添加自定义路径到“ PATH ”环境变量
一定要使用绝对路径添加自定义路径到PATH
环境变量:$PATH=$PATH:/home/shiyanlou/mybin
>>
: 表示将标准输出以追加的方式重定向到一个文件中>
: 是以覆盖的方式重定向到一个文件中 - 变量修改
- 变量删除:使用
unset
命令删除一个环境变量 - 让环境变量立即生效:
$ source .zshrc(配置文件)
-
$ . ./.zshrc
(后面的文件必须指定完整的绝对或相对路径名)
- 搜索文件:
whereis
简单快速: 直接从数据库中查询,只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。locate
快而全: 手动执行一次 updatedb 命令,用于更新它的查找对象——“ /var/lib/mlocate/mlocate.db ”数据库,它可以用来查找指定目录下的不同文件类型。which
小而精: 通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令find
精而细: 它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find 的第一个参数是要搜索的地方:$ sudo find /etc/ -name 文件或目录
注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action] 。
- 与时间相关的命令参数:
-atime
:最后访问时间-ctime
:最后修改文件内容的时间-mtime
:最后修改文件属性的时间
- 与这些参数相关的天数命令(以 -mtime 参数举例)
-mtime n
:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件-mtime +n
:列出在 n 天之前(不包含 n 天本身)被修改过的文件-mtime -n
:列出在 n 天之内(包含 n 天本身)被修改过的文件-newer file
:file 为一个已存在的文件,列出比 file 还要新的文件名
- 列出 home 目录中,当天(24 小时之内)有改动的文件:
$ find ~ -mtime 0
- 列出用户家目录下比 Code 文件夹新的文件:
$ find ~ -newer /home/shiyanlou/Code
七、文件打包与压缩
- 常见常用的压缩包文件格式
*.zip
: zip 程序打包压缩的文件*.rar
: rar 程序压缩的文件*.7z
: 7zip 程序压缩的文件*.tar
: tar 程序打包,未压缩的文件*.gz
: gzip 程序(GNU zip)压缩的文件*.xz
: xz 程序压缩的文件*.bz2
: bzip2 程序压缩的文件*.tar.gz
: tar 打包,gzip 程序压缩的文件*.tar.xz
: tar 打包,xz 程序压缩的文件*tar.bz2
: tar 打包,bzip2 程序压缩的文件*.tar.7z
: tar 打包,7z 程序压缩的文件 - 一些参数:
-r
: 表示递归打包包含子目录的全部内容-q
: 表示为安静模式-o
: 表示输出文件,需在其后紧跟打包输出文件名-O
: 解压时可以指定编码类型unzip -O GBK 中文压缩文件.zip
du
: 分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小$ du -h -d 0 *.zip ~ | sort
(其中-h
意为表达为人们可读的方式-d
意为所查看文件的深度)-x
:排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中。$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip
设置压缩级别为 9 和 1(9 最大,1 最小)只能使用绝对路径-e
: 创建加密压缩包-l
: 将 LF 转换为 CR+LF,排除在 Windows 系统上打开看起来是没有换行的问题 - zip压缩打包程序:
打包 :zip 打包输出文件名.zip 被打包目录 (目录请加 -r 参数) - zip解压缩
解包:unzip something.zip(解压sth.到当前目录) - rar 打包压缩命令
- rar 的命令参数没有 -,如果加上会报错
- 从指定压缩包文件中删除某个文件:
$ rar d shiyanlou.rar .zshrc
- 查看不解压文件:
$ rar l shiyanlou.rar
- 使用
unrar
解压rar
文件:$ unrar x shiyanlou.rar
(全路径解压);$ mkdir tmp $ unrar e shiyanlou.rar tmp/
(去掉路径解压)
- tar 打包工具
- 打包:tar -zcvf something.tar something
- 解包:tar -zxvf something.tar
- 指定路径:-C 参数
压缩文件格式: 参数*.tar.gz
:-z
*.tar.xz
:-J
*tar.bz2
:-j
- 一些参数:
-c
:创建一个 tar 包文件-f
:用于指定创建的文件名,注意文件名必须紧跟在-f
参数之后-p
:保留绝对路径符
解包一个文件(-x
参数)到指定路径的已存在目录(-C
参数):$ tar -xf shiyanlou.tar -C tardir
只查看不解包文件 -t 参数:$ tar -tf shiyanlou.tar
八、文件系统操作与磁盘管理
- 查看磁盘的容量
-
df
: 查看磁盘的容量 - 增强可读性用参数
-h
:$ df -h
- 查看目录的容量
-
du
: 查看目录的容量 - 增强可读性用参数
-h
- 指定查看目录的深度
-d
: - 常用参数:
-a
: 同--all 显示目录中所有文件的大小-s
: 同--summarize 仅显示总计,只列出最后加总的值
- 创建虚拟磁盘
-
dd
命令:用于转换和复制文件,也可以读取文件或写入到这些文件。它的命令行选项格式为选项=值
.可以用选项if
(input file,输入文件)和of
(output file,输出文件)改变标准输入和输出。 - 使用 dd 命令创建虚拟镜像文件:
从/dev/zero设备创建一个容量为 256M 的空文件:
$ dd if=/dev/zero of=virtual.img bs=1M count=256 - 使用 mkfs 命令格式化磁盘
将我们的磁盘镜像格式化为ext4文件系统:
$ sudo mkfs.ext4 virtual.img(磁盘)
Linux支持的文件系统: - 使用 mount 命令挂载磁盘到目录树
mount
: mount 指令是告诉操作系统,对应的文件系统已经准备好,可以使用了,而该文件系统会对应到一个特定的点(称为挂载点)。挂载好的文件、目录、设备以及特殊文件即可提供用户使用。
mount命令的一般格式如下:mount [options] [source] [directory]
一些常用操作:mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
- 使用 umount 命令卸载已挂载磁盘
$ sudo umount /mnt - 使用 fdisk 为磁盘分区
进入磁盘分区模式:
$ sudo fdisk virtual.img
九、Linux下的帮助命令
- 内建命令与外部命令
- 得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
- 得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/sbin/xxx
- 若是得到alias的结果,说明该指令为命令别名所设定的名称
xxx is an alias for xx --xxx
- help命令
- ubuntu 的环境base内置有help命令,可以直接使用
- help 命令是用于显示 shell 内建命令的简要帮助信息,但是只能用于显示内建命令的帮助信息
-
ls --help
:外部命令的话基本上都有一个参数--help
- man命令
- 通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性
- 打开手册之后我们可以通过 pgup 与 pgdn 或者上下键来上下翻看,可以按 q 退出当前页面
- man手册章节
- info命令
man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。