[TOC]
1 虚拟机
1.1 简介
虚拟机指通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统。
由于window我们用的比较熟悉,而linux我们又不熟,如果擅自把window操作系统卸载装上linux,一旦用不懂失败的成本太高了,所以我们需要虚拟机。
- 虚拟系统通过生成现有操作系统的全新虚拟镜像,具有真实操作系统完全一样的功能。
- 进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立界面,不会对真正的系统产生任何影响
- 而且能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。
1.2 Linux版本
1.2.1 内核
内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环。
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或假如一些新的驱动程序。
- 开发版:由于要实验各种解决方案,所以变化很快
1.2.2 发行版
linux发行版通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
常见的发行版本如下:
- Ubuntu
- Redhat
- Fedora
- openSUSE
- ...
但是内核还是只有一个。
1.3 文件和目录
1.3.1 单用户操作系统和多用户操作系统
在早期的window系统上面,一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源。而到了后来window7,一个计算机是可以建立多个用户的,其中administrator为初始用户;这样的话,多个用户共同享用系统的全部硬件和软件资源。Unix和Linux的设计初衷就是多用户操作系统。
1.3.2 window文件系统
在window操作系统上面,我们管理文件是通过window文件系统的,相当于多个树形结构。
每个驱动器都有自己的根目录结构,这样形成了多个数并列的情形,如图所示:
1.3.3 Linux下的文件系统
在linux下,我们是看不到这些驱动器盘符的,我们看到的是文件夹(目录)
- Ubuntu没有盘符这个概念,只有一个根目录 “./”,所有文件都在它下面。
注释对于初学者来说,最重要的是先掌握/home这个目录,其中/home目录下有三个文件夹,也就是说有三个用户名,比如python这个一个用户名下三个文件夹对应这桌面、文档和下载。
一些关于Linux文件夹的补充
/bin 二进制可执行命令
/dev dev是Device(设备)的缩写;/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。
/etc 系统管理和配置文件;/etc目录存放着各种系统配置文件,其中包括了用户信息文件/etc/passwd,系统初始化文件/etc/rc等。linux正是*这些文件才得以正常地运行。
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公共的临时文件存储点
/root 系统管理员的主目录
/media linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
2 概述
2.1 为什么要学习命令
- Linux刚面世时并没有图形界面,所有的操作全靠命令行完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限 设定等。
- 在职场中,作为后端程序员,必须要或多或少的掌握一些linux常用的终端命令。
- linux发行版本的命令大概有200多个,但是常用的命令只有10多个而已。
提醒
学习终端命令的技巧:
- 不需要死记硬背,对于常用命令,用的多了,自然就记住了。
- 不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以了。
2.2 一些基本操作和说明
【注1:crtl+shift+ =:放大终端窗口的字体显示】
【注2:crtl+ -:可以缩小终端窗口的字体显示】
- 字符终端为用户提供了一个标准的命令行接口,在字符终端窗口中,会显示一个命令提示符,通常为$。
- 字符终端窗口中出现的命令提示符因用户不同而有所差异,普通用户的命令提示符为“$”,超级管理员用户的命令提示符为“#”。
- 用户名@系统名
3 指令和选项
linux的指令
指在linux终端(命令行)中输入的内容就称之为指令。
Linux通用的格式
指令主体 [选项] [操作对象]
- 一个指令可以包含多个选项。
- 操作对象也可以是多个。
例如:需要让张三同学去楼下买一瓶农夫山泉和清风餐巾纸,在这个指令中,“买东西”是指令的主体,买的水和餐巾纸是操作的对象,农夫山泉、清风是操作的选项。
查阅命令帮助信息(知道)
现阶段只需要知道通过以下两种方式可以查询命令的帮助信息
先学习常用命令及常用选项的使用即可,工作中如果遇到问题可以借助网络搜索
help
command ——help
【说明:显示command命令的帮助信息】
man
man command
【说明:查阅command命令的使用手册】
【注:man是manual的缩写,是Linux提供的一个手册,包含了绝大部分的命令,函数的详细说明。】
4 基础指令
需要提前说明,指令带有多个选项。
4.1 ls指令
4.1.1 讲解
- 对应英文:list
- 基本语法:ls [选项] [路径]
- 含义:列出对应路径目录下的所有文件/文件夹的名称,如果不填路径,则显示当前工作目录下的。
关于路径
路径可以分为两种:绝对路径、相对路径。
- 相对路径:相对首先得有一个参照物(一般就是当前的工作路径)。
相对路径的写法:在相对路径中通常会用到两个符号“./”【表示当前目录下】和“../”【上一级的目录下】- 绝对路径:绝对路径不需要参照物,直接从根“/”开始寻找对应路径。
4.1.2 选项
选项 | 含义 |
---|---|
-l | 表示list,表示以列表的形式进行展示 |
-a | 表示all,即显示所有的文件/文件夹(包含了隐藏文件/文件夹) |
-F | 加此选项可以在显示的目录后面加/,在可执行文件后加*,在链接文件后加@ |
-h | 表示 human-readable 人性化阅读:以K,M,G为单位查看文件大小 |
4.1.3 演示
#以列表的形式进行展示
ls -l
注意在我们利用列表形式展示了某个路径下的所有文件/文件夹之后,我们发现前面有一些类如drwxrwxr的东西。
我们可以注意到,drwxrwxr的开头的d,在某些地方他是“-”,观察后面的可知“d”是代表文件夹,“-”是代表文件。这里的这一串实际上对应的是某文件具有的权限,后面会详细讲述。
我们还可以注意到上面有两排ubuntu18,这两排的含义不一样。一排是用户名一排是用户组,后面会详细讲述。
再后面的4096的这类数字是文件对应的大小。再后面的时间是该文档的创建时间。再后面的字符串是文件/文件夹的名称。
#列出指定路径下的所有文件/文件夹的名称,以列表的形式并且在显示文档的大小的时候并且以可读性较高的形式显示。
ls -lh
【说明:其中4.0k不是说这个文件只有4k大小。】
4.1.4 ls通配符
如果你学过python或者java,那你肯定对正则表达式非常熟悉,这个就有点类似正则表达式。
通配符 | 含义 |
---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符,至少1个 |
[] | 表示可以匹配字符组中的任一一个 |
[abc] | 匹配a,b,c中的任意一个 |
[a-f] | 匹配从a到f范围内的任意一个字符 |
4.2 pwd命令
4.2.1 讲解
- 对应英文:print working directory,打印当前工作目录。
- 作用:实际上是为了防止有人懒,不想打路径
4.3 cd命令
4.3.1 讲解
- 对应英文: change directory
- 功能:更改当前的工作目录,也是用户最常用的命令之一
- 基本语法:cd 路径
- Linux所有的目录和文件名都是大小写敏感的
4.3.2 演示
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 保持在当前目录不变 |
cd .. | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
4.4 mkdir指令
4.4.1 讲解
- 对应英文:make directory
- 功能:创建目录(文件夹)
- 基本语法:mkdir [-p] 路径1 路径2... 路径n(这里的路径,可以是文件夹名称也可以使包含名称的一个完整路径)
4.4.2 演示
在当前路径下创建目录“xuehaoniucha”
注意
- ls列出的结果颜色说明,其中蓝色的名称表示文件夹,白色的表示文件,绿色的表示其权限为最高权限(即可以干任何事)
- 当一次性创建多层不存在的目录的时候,添加-p参数,否则会报错。
- 新建目录的名称 不能与当前目录中 已有的目录或文件 同名
同时在当前路径下创建多个目录。
4.5 touch指令
4.5.1 讲解
- 功能:创建文件
注意如果文件 不存在 ,则可以创建一个空白文件;如果文件 已经存在 ,可以修改文件的末次修改日期。
4.5.2 演示
touch 文件路径(这里可以是直接文件名,也可以使文件路径)
touch 文件路径1 文件路径2
当然,我们也可以在某个路径下面创建一个文件(文件夹也是同理)
4.6 cp指令
4.6.1 讲解
- 对应英文:copy,复制
- 功能:复制文件/文件夹到指定的位置
4.6.2 选项
选项 | 含义 |
---|---|
-f | 已经存在的目标文件直接覆盖,不会提示 |
-i | 覆盖文件前提示 |
-r | 若给出的源文件是目录文件,则递归。 |
4.6.3 演示
cp 被复制的文档路径 文档被复制的路径
【说明:当然,如果你只写了复制后所在的路径而没写文件名,那么默认是复制前文字的名字;如果有写,那么就能在复制后顺路改名。】
【注意:linux在复制过程中是可以重名的,但是一般不建议这么做。】
那我们想要复制文件夹呢?
如果直接复制,我们会发现报错,这是因为你只把文件夹复制过去了,而没有把文件夹的东西复制过去;如若想把文件夹和包括文件夹的东西全部复制过去的话,那你必须要加“-r”。
说明-r中的r表示Recursive,递归的意思。
4.7 mv指令
4.7.1 讲解
- 对应英文:move,移动或者剪切
- 功能:移动文档到新的位置或者重命名文件
4.7.2 演示
语法:mv 需要移动的文档路径
注意
- mv和cp一样,在移动后也能对移动的文件进行重命名。
- 剪切的时候是不需要递归的
4.8 rm命令
4.8.1 讲解
- 对应英文:remove,移除、删除
- 功能:移除/删除文档
语法:rm 选项 需要移除的文档路径
4.8.2 选项
序号 | 选项 | 含义 |
---|---|---|
01 | -f | force,强制 |
02 | -r | Recursive,递归 |
4.8.3 讲解
案例一:删除一个文件
说明删除文件的时候如果不带选项会提示是否删除,如果确认输入“y/yes”,否则输入“n/no”,然后按下回车。如果在删除的时候不想频繁的确认,则可以在指令中添加选项“-f”,其中f表示force,即强制。
案例二:删除一个目录
如果要删除一个目录,那么需要删除该目录下的所有东西,所以需要用到递归。
【注意:其中-r和-f连用就变成了-rf。】
案例三:删除多个文件
案例四:删除拥有同类字段的文件
4.9 vim命令
- 类似于window的notepad(记事本),是一款Linux上最受欢迎的文本编辑器
#打开一个文件(可以存在,也可以不存在)
语法:vim 文件的路径
如果需要退出打开的文件,在没有按下其他命令的时候,按下shift+英文冒号,输入q,按下回车即可。
4.10 echo文字内容
- echo会在终端中显示参数指定的文字,通常会和重定向联合使用。
语法:echo 文字内容
4.11 输出重定向
4.11.1 讲解
一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果保存到想要的文件中进行后续的分析/统计,那么这时候就需要使用到输出重定向技术
- ">":覆盖输出,会覆盖掉原先的文件内容。
- ">>":追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加。
语法:正常执行的命令 >/>> 文件的路径
【注意:文件可以不存在,如果不存在系统自动帮你新建一个。】
4.11.2 演示
案例:使用覆盖重定向,保存ls -la的执行结果,保存到当前目录下的ls.txt。
【说明:如果使用在这个文件追加,则继续在这个文件继续写下去,不会覆盖原来的内容。】
4.12 cat指令
4.12.1 讲解
- cat实际上不是取英文猫的意思。而是concatenate,意为联系的。
4.12.2 选项
选项 | 含义 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
4.12.3 演示
作用1:cat有直接打开一个文件的功能。
语法:cat 文件的路径
【说明:cat和vim的差距就是,vim是打开一个类似于notepad的软件,可以打开文件;而cat是不打开任何软件,直接输出文件里面所有的东西到控制台。】
作用2:cat还可以对文件进行合并
语法2:cat 待合并的文件路径1 待合并的文件路径2 ... 待合并的文件路径n > 合并之后的文件路径
4.13 more命令
- 作用:分屏显示文件内容
我们学cat的时候是可以查看文本编辑器里面写的内容的,如:
而用more会造成这种效果
【总结:more命令可以用于分屏显示文件内容,每次只显示一页内容,他比较适合查看内容较多的文件。】
其中more是有一些操作用于翻页的:
空格键:显示手册页的下一屏
Enter:一次滚动手册页的一行
b:回滚一屏
f:前滚一屏
q:退出
/word:搜索word字符串
还有一些选项
-n:用于显示行号(包括空白行)
-b:用于显示行号(不包括空白行)
5 进阶指令(重点)
5.1 head指令
- 作用:查看一个文件的前n行,如果不指定n,那默认显示前10行。
语法:head -n 文件路径
5.2 tail指令
作用1:查看一个文件的末n行,如果n不指定,那么默认后十行。
语法1:tail -n 文件路径【n表示数字】
作用2:可以通过tail指令来查看一个文件的动态变化
语法2:tail -f 文件路径
【注意:需要注意的是-f是静态变化,而-F是动态变化】
也就是说,tail -F之后,如果文件在这时候被打开并且改写,那么我们是可以检测到的。
5.3 less指令
5.3.1 讲解
- 作用:查看文件,以较少的内容进行输出,按下辅助功能键查看更多。
语法格式:less 需要查看的文件路径
5.3.2 辅助功能键
- 数字+回车(可以跳到指定行)
- 空格键+上下方向(可以实现翻页)
- 需要退出的时候输入Q就行了
5.4 wc指令
5.4.1 讲解
- 作用:统计文件内容信息,这个作用类似于word里面的统计行数,文字数,字节数。
语法:wc -lwc 需要统计的文件路径
其中-l表示lines,行数;-w表示words,单词数;-c表示bytes,字节数。
5.4.2 演示
【注:其中单词数的判断依据是空格。】
4.5 clear指令
- 说明:这个指令和快捷键ctrl+L等价。
- 功能:清除终端中已经存在的命令和结果(信息)。
语法:clear 或者快捷键:ctrl+L
需要注意的是,该命令并不是真的清楚了之前的信息,而是把之前的信息隐藏到了最上面,通过滚动条继续查看以前的信息。
4.6 管道(重要)
4.6.1 讲解
- 管道符:|(一条竖线)
- 作用:管道一般用于“过滤”,“特殊”,“扩展处理”
- 语法:管道不能单独使用,必须需要配合前面所讲的指令来一起使用,其作用主要是为了辅助作用,并不是主要作用。
4.6.2 演示
过滤案例:需要通过管道查询出根目录下包含的“y”字母的文档名称。
#ls |grep y
针对上面这个命令说明:
1、以管道作为分界线,前面的命令有个输出,后面需要先输入,然后过滤完再输出。
通俗地讲就是管道后面的输出就是后面指令的输入。
2、grep指令,主要用于过滤
特殊用法案例:通过管道的操作方法来实现less的等价效果(了解)
比如之前我们用less可以查看一个文件,可以用#less路径。现在用管道还可以这么写:
cat 路径 |less
扩展处理:请使用学过的命令,来统计某个目录下的文档的总个数。
ls 文档 |wc -lw
5.7 grep指令
作用1:linux系统中grep命令是一种强大的文本搜索工具
【注1:在gedit文档中,用crtl+f可以打开搜索栏搜索对应的单词,如果搜索到了对应的单词的话,对应的单词会高亮显示。】
选项:
-n:显示匹配及行号
-v:显示不包含匹配文本的所有行(相当于求反)
-i:忽略大小写
语法1:grep 查找词 文件路径
语法2:grep 选项 查找词 文件路径
例如-n
作用2:grep允许文本文件进行模式查找,所谓模式查找,又被称为正则表达式。
常用的两种模式查找:
^a:行首,搜寻以a开头的行
ke$:行尾,搜索以ke结束的行
语法1:#grep 选项 模式 文件路径
5.8 脚本命令bash
- 大多数sh脚本都可以在bash下运行
演示
目标:
1、创建一个test.sh文件,在里面输入
mkdir dd
mkdir ee
ls > ff
cat ff
然后保存关闭文件
2、用bash执行该文件
gedit test.sh
bash test.sh
拓展
shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种
- Bourne SHell(sh)
- Bourne Again SHell(bash)
- C SHell(csh)
- KornSHell(ksh)
- zsh
各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。这里主要介绍bash。也就是说上面演示的命令不用bash用上面其他的命令解析器也是可以的。
6 远程管理常用命令
6.1 关机和重启
- 如果想要安全关机,只需要使用shutdown命令。
注意
- 其中shutdown -r中的r表示重新启动的意思。
- 如果不指定选项和参数,默认表示1分钟后关闭电脑;远程维护服务器时,最好不要关闭系统,而应该重新启动系统。
6.1.2 常用命令示例:
重新启动操作系统,其中now表示现在
shutdown -r now
立刻关机,其中now表示现在
shutdown now
系统在今天的20:25会关机
shutdown 20:25
取消之前指定的关机计划
shutdown -c
6.2 网卡和IP地址
网卡
网卡是一个专门负责网络通讯的硬件设备
IP地址是设置在网卡上的地址信息
【说明:我们可以把电脑比作电话,网卡相当于SIM卡,IP地址相当于电话号码】
IP地址
每台联网的电脑上都有IP地址,是保证电脑之间正常通讯的重要设置。
【注:每台电脑的IP地址不能相同,否则会出现IP地址冲突,并且没有办法正常通讯。】
6.3 ifconfig指令
- 作用:查看/配置计算机当前的网卡配置信息。
- 对应英文:configure a network interface
语法1:ifconfig
【注:127.0.0.1被称为本地回环,一般用来测试本机网卡是否正常。】
- 作用:查询网卡对应的ip地址
语法2:ifconfig |grep inet
【注:一台计算机中有可能会有一个物理网卡和多个虚拟网卡,在Linux中物理网卡的名字通常以ene××表示】
6.4 ping指令
- 作用:检测到目标ip地址的连接是否正常
- 对应英文:ping
语法:ping ip地址
【注:ping一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢。】
7 用户权限相关命令
7.1 用户和权限的基本概念
7.1.1 基本概念
- 用户是linux系统工作中重要的一环,用户管理包括用户和组管理。
- 在linux系统中,不论是由本机或是远程登录系统,每个系统都必须有一个账号,并且对于不同的系统资源拥有不同的使用权限。
- 在linux中,可以指定每一个用户针对不同的文件或者目录的不同权限。
7.1.2文件/目录的权限
权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|
读 | read | r | 4 |
写 | write | w | 2 |
执行 | excute | x | 1 |
7.1.3 组
为了方便用户管理,提出了组的概念,如下图所示:
在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。
7.2 ls -h输出信息介绍
ls -l可以查看文件夹下文件的详细信息,从左到右依次是:
- 权限:第一个字符如果是d表示目录
- 硬链接数:通俗地讲就是有多少种方式可以访问到当前目录/文件
- 拥有者:家目录下 文件/目录 的拥有者通常都是当前用户
- 组:在linux中,很多时候,会出现组名和用户名相同的情况。
- 大小
- 时间
- 名称
7.3 chmod简单使用(重要)
- 作用:chmod可以修改用户/组 对 文件/目录 的权限
语法:chmod +/-rwx 文件名|目录名
【说明:ls查看linux1.txt的权限,可读可写】
【说明:gedit打开该文件,可以读也可以写,cat也可以读】
【说明:当我们用chmod把linux1.txt的文件权限设置为不可读不可写的时候,cat无法读取了;同理,gedit也无法打开文件了。】
7.4、修改目录权限
【说明:创建一个文件夹时,默认都有可执行权限】
【说明:如果去掉可执行权限,那么文件夹无法通过终端进入、查看目录和创建文件。因为其不能执行终端命令。】
【注:目录的-r权限决定其能否被ls,目录的-w权限决定其是否能被touch】
7.5 超级用户介绍
7.5.1 基本概念
- Linux系统中的root账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限。
- 在大多数版本的linux中,都不推荐直接使用root账号登录系统,因为可能会删除到系统重要文件。
- 在linux安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就被称为“标准用户”。比如我们上面一直在用的ubuntu18这个账号(用户)。
7.5.2 sudo
- su是substitute user的缩写,表示使用另一个用户的身份。
- sudo命令用来以其他身份来执行命令,预设的身份为root。
- 用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
- 若其未经授权的用户企图使用sudo,则会发出警告邮件给管理员。
7.6 组管理
7.6.1 讲解
【提示:创建组/删除组的终端命令都需要通过sudo执行】
命令 | 作用 |
---|---|
groupadd组名 | 添加组 |
groupdel组名 | 删除组 |
cat /etc/group | 确认组信息 |
chgrp 组名 文件/目录名 | 修改文件/目录的所属组 |
【提示:组信息保存在 /etc/group 文件中;/etc 目录是专门用来保存系统配置信息的目录】
【注:在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。】
7.6.2 演示
sudo groupadd aex
【说明:普通权限不能创建用户组】
cat /etc/group
sudo groupdel aex
8 用户管理命令
8.1 新建用户和设置密码
8.1.1 讲解
【提示:创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行】
序号 | 命令 | 作用 | 说明 | |
---|---|---|---|---|
01 | useradd -m -g 组 新建用户名 | 添加新用户 | -m 自动建立用户家目录;-g指定用户所在的组,否则会建立一个和用户名同名的组 | |
02 | passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用passwd可以修改自己的账户密码 | |
03 | userdel -r 用户名 | 删除用户 | -r选项会自动删除用户家目录 | |
04 | cat /etc/passwd \ | grep 用户名 | 确认用户信息 | 新建用户后,用户信息会保存在/etc/passwd文件中 |
提示
- 创建用户时,如果忘记添加 -m 选项指定新用户的家目录——最简单的方法就是删除用户,重新创建
- 创建用户时,默认会创建一个和用户名同名的组名
- 用户信息保存在 /etc/passwd文件中
8.1.2 演示
案例:创建一个名为ChengYu的用户,设置其密码,查看其用户信息后将其删除。
8.2 查看UID、GID以及passwd文件介绍
8.2.1 引入
前面我们用过 cat /etc/passwd | grep 用户名
去查看过用户信息,但是我们没注意用户信息里面具体的内容是什么。
x | 1001 | 1001 | /home/ChengYu | |
---|---|---|---|---|
代表加锁 | 代表uid | 第二个1001代表Gid | 代表用户全名或本地账号 | 代表家目录 |
8.2.2 讲解
序号 | 命令 | 作用 |
---|---|---|
01 | id 用户名 | 查看用户UID和GID信息 |
02 | who | 查看当前所有登录的用户列表 |
03 | whoami | 查看当前登录用户的账户名 |
【注:如果id后面不跟用户名,那么默认查看现在登录用户的用户UID和GID信息】
前面我们查看的是创建的名为 ChengYu 的这个账户信息,现在我们查看自己的账户信息。
adm | cdrom | sudo |
---|---|---|
用户管理员权限 | 可以访问系统光驱 | 可以使用root权限 |
【注意:我们发现利用cat和利用id查出来的信息是一样的。】
8.3 who和whoami
who
whoami
8.4 usermod设立主组和附加组
- 功能:usermod 可以用来设置用户的 主组/附加组 和登录shell
- 主组:通常在新建用户时指定,在etc/passwd的第四列GID对应的组。
- 附加组:在etc/group 中最后一列表示该组的用户列表,用于指定 用户的附加权限
【提示:设置了用户的附加组之后,需要重新登录才能生效】
8.5 usermod指定用户登录shell
8.6 which(重要)
- 作用:which命令可以查看命令所在位置。
在上面的演示中,我们发现有些命令在bin下,有一些在sbin之下,仔细观察,我们还能知道只有用户管理命令才在sbin中。
<br/>
8.6.2 bin和sbin
在Linux中,绝大多数可执行文件都是保存在/bin、/sbin、/usr/bin、/usr/sbin
/bin(binary)是二进制执行文件目录,主要用于具体应用/sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin(user commands for applications)后期安装的一些软件
/usr/sbin(super user commands for applications)超级用户的一些管理程序
【注:cd这个终端命令是内置在系统内核中的,没有独立的文件,因此用which无法找到cd命令的位置。】
8.7 su切换用户
什么时候需要切换用户呢?当命令执行权限不够时,我们就需要切换用户。
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su -用户名 | 切换用户,并且切换目录 | -可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前登录账户 |
【注:su不接用户名,可以切换到root,但是不推荐使用,因为不安全。】
exit示意图如下:
8.8 修改文件权限
8.8.1 讲解
序号 | 命令 | 作用 |
---|---|---|
01 | chown | 修改拥有者 |
02 | chgrp | 修改组 |
03 | chmod | 修改权限 |
命令格式如下:
#修改文件|目录的拥有者
chown 用户名 文件名|目录名
#递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
#递归修改文件权限
chmod -R 755 文件名|目录名
8.8.2 演示
通过上面的演示我们可以看到,在对CHE这个目录经过改拥有者和改用户组之后,这个文件在图形化界面加锁了。我们观察这个文件的权限,发现我们只有 r-x 权限了,说明可读可执行但是不可写。
当我们把组改回ubuntu18这个用户时,这个文件夹的权限又回来了
8.9 chmod数字表示法
#递归修改文件权限
chmod -R 755 文件名|目录名
【说明:在这里的7表示当前用户权限,5表示当前用户组权限,最后一个5表示其他用户权限。】
在前面的学习中,我们使用的是下面的格式
#直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他
chmod +/- rwx 文件名|目录名
权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|
读 | read | r | 4 |
写 | write | w | 2 |
执行 | excute | x | 1 |
我们在前面提到过可以用数字来代替权限。如果我们想要一个文件具有用户可读,用户组可读,其他人可读,那我们可以如下
chmod 444 文件名
如果我们想要一个文件具有 用户可读可写,用户组可读可写,其他人可读,那我们只需要对权限简单的做加法即可,如下
chmod 664 文件名
知道这个原理就可以了,下面是这个原理的总结表
8.10 chmod的复杂表示法
8.10.1 讲解
前面我们chmod简单用法时学过用+/-来增加或减少文件的权限,然而,在不添加任何指定用户的情况下,系统默认所有人都执行此操作。
chmod [u/g/o/a][+/-/=] [r/w/x] file
【注意:[u/g/o/a]和[+/-/=]之间没有空格】
8.10.2 参数说明
[ u / g / o / a ] 为权限范围,其中
- u:User,即文件或目录的拥有者
- g:Group,即文件或目录的所属群组
- o:Other,除了文件或目录拥有者和所属群组外,其他用户都属于这个范围
- a:All,即全部用户
8.10.3 演示
目标:
1、创建一个01.py于桌面上
2、查看该文件拥有权限
3、不赋予参数给所有用户添加读写执行权限
4、给目前用户设置仅读权限
5、查看该文件拥有权限
touch 01.py
ls -lh
chmod +rwx 01.py
ls -lh
【注:这里之所以其他用户设置了写权限仍然不可写是因为防止读写冲突(具体见数据库原理)】
chmod u-wx 01.py
ls -lh
9 系统信息相关命令
本节内容主要是为了方便通过远程终端维护服务时,查看服务器上当前系统日期和时间 / 磁盘空间占用情况/ 程序执行情况。
9.1 date指令(重点)
- 作用:表示操作时间日期(读取、设置)
语法1:date
语法2:date +%F(等价与#date "%Y-%m-%d")
其中我们可以把-换成其他的形式,如下图:
【注意:这里的Y和m和d都应该输入对应的大小写,linux对大小写是敏感的。】
由于选项是一个整体,不能用空格隔开,所以我们写年月日的时候要用双引号或者单引号括起来。
其中+是读取、显示的意思,如果想要显示时间就得用+。
语法3:date +"%F+%T"
#获取之前或者之后的某个时间(备份)
语法4:date -d "-1day" "+%Y-%m-%d %H:%M:%S"
补充说明
- %F:表示完整的年月日
- %T:表示完整的时分秒
- %Y:表示四位年份
- %m:表示两位月份(带前导0)
- %d:表示日期(带前导0)
- %H:表示小时(带前导0)
- %M:表示分钟(带前导0)
- %S:表示秒数(带前导0)
9.2 cal指令
- 作用:用来操作日历的
#表示直接输出当前月份的日历
语法1:cal (等价与cal -1)
#表示上现下个月的日历
语法2:cal -3
#表示输出某一个年份的日历
语法3:cal -y 年份
9.3 df指令
- 作用:查看磁盘的空间
#disk free显示磁盘剩余空间
语法:df-h(其中-h表示以可读性高的方式表示)
9.4 du指令
9.4.1 讲解
#disk usage 显示目录下的文件大小
du -h [目录名]
9.4.2 演示
du -h ~/Python学习
9.5 ps指令和进程概念
所谓 进程 ,通俗地说就是 当前正在执行的一个程序。实际上,ps指令就相当于window操作系统中的任务管理器,对应英文process
。
9.5.1 相关指令
序号 | 命令 | 作用 |
---|---|---|
01 | ps aux | process status 查看进程的详细状况 |
02 | top | 动态显示运行中的进程并且排序 |
03 | kill [-9] 进程代号 | 终止指定代号的进程,-9表示强行终止 |
【注:ps默认只会显示当前用户通过终端启动的应用程序】
9.5.2 ps选项说明
选项 | 含义 |
---|---|
-a | 显示终端上的所有进程,包括其他用户的进程 |
-u | 显示进程的详细状态 |
-x | 显示没有控制终端的进程(即显示那些不需要终端启动的应用程序的进程) |
-l | 按长格形式显示输出 |
-w | 宽行输出 |
-e | 显示所有进程 |
9.5.3 演示
ps au
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME |
---|---|---|---|---|---|---|---|---|---|
进程创建者用户名 | 进程ID号 | 占用CPU百分比 | 占用内存百分比 | 占用虚拟内存大小 | 内存中页的数量 | 进程所在终端的ID号 | 进程运行状态 | 进程启动时间 | 进程已经占用CPU时间 |
9.6 top命令的基本使用
top
top
- 如果要退出top可以直接输入q
- top自动每5秒刷新一次,用top -d 10可以10秒刷新一次
- zombie代表僵尸进程。在Linux中有父进程和子进程的说法,若父进程死亡,子进程不死,则子进程变为僵尸进程
9.7 kill命令的基本使用
9.7.1 讲解
kill命令用于杀死一个进程。如果要强制杀死,可以使用kill -9 进程号
。
9.7.2 演示
打开一个终端
再打开一个终端
ps au
kill 6858
kill 6609
bash即为dos命令窗口,由于我开了两个,不知道哪个才是,所以两个都关一下试试看。使用kill命令时,最好只终止由当前用户开启的进程,而不要去终止root身份开启的进程,否则可能导致系统崩溃。
9.8 tree命令的基本使用
- 作用:tree命令可以以树状图列出文件目录结构。我们一般会加-d选项来让tree只显示目录
9.9 free指令
- 作用:查看内存使用情况
语法格式:
free -m(其中-m中的m表示以mb为单位查看)
剩余的真实可以用的内存为(1156+112+11+691+665)mb
交换:用于临时内存,当系统真实内存不够用的时候,可以临时使用磁盘空间来充当内存。这实际上涉及到操作系统的原理,感兴趣的可以去学习操作系统这门课。
9.10 pstree指令
进程树以树状图展现进程之间的派生关系
9.11 vmstat指令
9.11.1 讲解
- vmstat是
Virtual Memory Statistics(虚拟内存统计)
的缩写,如果vmstat命令没有带任何命令行参数,将得到一次性的报告。 - vmstat命令报告主要的活动类型有进程(procs)、内存(以千字节为单位)、交换分区(以千字节为单位)、来自块设备(硬盘驱动器)的输入输出量、系统中断(每秒钟发生的次数),以及中央处理单元(CPU)分配给用户、系统和空闲时分别占用的比例。
9.11.2 演示
vmstat
10 其他命令
10.1 find命令
10.1.1 讲解
- find命令通常用来在 特定的目录下搜索符合条件的文件
序号 | 命令 | 作用 |
---|---|---|
01 | find [路径] -name 文件 | 在某路径下搜索名为某某某的文件 |
02 | find [路径] -perm 777 | 在某路径下搜索权限为777的文件 |
03 | find [路径] -size +1000000c | 在某路径下搜索大于1M的文件,c表示字节 |
04 | find [路径] -size -1c | 在某路径下搜索小于1个字节的文件 |
- 如果省略路径,表示在当前文件夹下查找
- 之前学习的通配符,在使用find命令时同时可用
10.1.2 演示
#在etc目录查找名字包含ipv6的文件
sudo find /etc -name *ipv6*
#在anaconda3目录查找包含权限777的文件
find ~/anaconda3 -perm 777
find Desktop/ -size +1000000c
find Desktop/ -size -100000000c
10.2 软连接
10.2.1 讲解
- 语法:ln -s 被链接的源文件 链接文件
- 功能:建立文件的软链接,用通俗的方式讲类似于windows下的快捷方式
注意-s一定要加,否则会变成硬链接
源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
10.2.2 演示
目标
1、创建一个文件01.py
2、将它移动到主目录下的Python学习文件夹中
3、建立软链接,其中快捷方式放在桌面上
4、查看其快捷方式的软链接源文件
touch 01.py
mv ~01.py ~/Python学习
ln -s ~/Python学习/01.py ~/Desktop/python01.py
#处于桌面目录下
ls -l
【注:如果不用绝对路径你的快捷方式一换位置就找不到源文件了】
10.3 硬链接
10.3.1 讲解
- 在使用ln创建链接时,如果没有-s选项,会创建一个硬链接,而不是软链接
10.3.2 演示
目标
1、将前一节的01.py在桌面建立一个硬链接
2、用ls -l查看桌面上硬链接文件的详细信息
3、删除源文件
4、查看源文件
5、用ls -l查看桌面上两个文件(软链接和硬链接)的详细信息
6、查看硬链接文件内容和软链接文件内容
ln ~/Python学习/01.py ~/Desktop/python02.py
ls -l
rm rm ~/Python学习/01.py
ls -l
这里发现软链接文件变红,说明软链接的源文件找不到了。
ls ~/Python学习/
此时发现源文件01.py消失。
cat python01.py
cat python02.py
硬链接文件还在。
10.3.3 文件软硬链接的示意图
软链接相当于快捷方式;由于文件名是分开存储的,通过软链接创建的文件名可以找到对应原文件的对应路径找到源文件,然后通过源文件的文件名访问源文件的内容;这样的话就导致,删除了一个快捷方式,还有源文件名提供查找该文件名对应的数据,但是如果删除了源文件名,那么快捷方式通过路径找不到源文件名了,也就自然找不到源文件对应的文件内容了。
而硬链接可以理解为建立别名,,这两个文件名都可以访问文件数据;如果你删除其中一个文件名,另外一个照样能找到原文件名对应的文件数据。
注意
- 在linux中,文件名和文件的数据是分开存储的
- 在linux中,只有文件的硬链接数==0才会被删除
- 使用ls -l 可以查看一个文件的硬链接的数量
- 在日常工作中,几乎不会建立文件的硬链接,知道即可
11 压缩解压相关命令
- 打包压缩是日常工作中备份文件的一种方式
- 在不同的操作系统中,常用的打包压缩方式是不同的
window常用rar
Mac常用zip
Linux常用tar.gz
11.1 打包/解包
11.1.1 讲解
tar是Linux中最常用的备份工具,此命令可以把 一系列文件打包到一个大文件中 , 也可以把一个打包的大文件恢复成一系列文件。
11.1.2 选项
选项 | 含义 |
---|---|
-c | create,生成档案文件,创建压缩文件 |
-x | 解压,解开档案文件 |
-t | 查看内容 |
-r | 像压缩归档文件末尾追加文件 |
-f | -f使用文件名字,这个选项必须放在所有选项最后,后面只能接文件名 |
-z | 有gzip属性的 |
-j | 有bz2属性的 |
-Z | 有compress属性的 |
-v | 显示所有过程 |
-O | 从文件解开到标准输出 |
-C | 代表change目录,将当前工作目录改变为指定目录 |
11.1.3 演示
目标
- 删除桌面下的所有内容
- 在桌面下新建三个空白文档01.py、02.py、03.py
- 将这三个文件打一个py.tar的包
- 新建tar目录,并且将py.tar移动到tar目录下
- 解包py.tar
#必须处于桌面目录!否则虚拟机报废
re -r *
touch 01.py 02.py 03.py
tar -cvf py.tar 01.py 02.py 03.py
mkdir tar
mv py.tar tar
tar -xvf tar/py.tar
ls -l
11.2 gzip压缩/解压缩
11.2.1 原理
tar与gzip命令结合可以实现文件的打包和压缩
- tar只负责打包文件,但不压缩
- gzip压缩tar打包后的文件,其扩展名一般用xxx.gz
【注:在Linux中,最常见的压缩文件格式就是xxx.gz】
11.2.2 命令格式
#压缩文件
tar -czvf 打包文件名.tar.gz 被压缩的文件/路径..
#解压缩文件
tar -xzvf 打包文件名.tar.gz
#解压缩到指定路径
tar -zxvf 打包文件名.tar.gz -C 目标路径
11.2.3 演示
目标
- 把我们前一小节的三个文件打包压缩为gzip的格式
- 把我们打包压缩好的压缩文件解压缩
tar -czvf py.tar.gz 01.py 02.py 03.py
tar -xzvf py.tar.gz
10.3 bzip压缩/解压缩
10.3.1 原理
tar与bzip2命令结合可以实现文件 打包和压缩 (用法和 gzip一样)
- tar只负责打包文件,但不压缩
- 用bzip2压缩tar打包后的文件,其扩展名一般用xxx.tar.bz2
10.3.2 命令格式
#压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径
#解压缩文件
tar -jxvf 打包文件.tar.bz2