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
神速版本find
grep
对文件全文检索
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 还要新的文件名
- 与这些参数相关的天数命令(以 -mtime 参数举例)
-
列出 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
- 得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
-
help命令
- ubuntu 的环境base内置有help命令,可以直接使用
- help 命令是用于显示 shell 内建命令的简要帮助信息,但是只能用于显示内建命令的帮助信息
ls --help
:外部命令的话基本上都有一个参数--help
-
man命令
- 通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性
- 打开手册之后我们可以通过 pgup 与 pgdn 或者上下键来上下翻看,可以按 q 退出当前页面
- man手册章节
-
info命令
man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。