文章目录
Linux基础
一、Linux概述
什么是操作系统
操作系统(Operating System):管理硬件和应用程序的一套软件系统。
- CPU管理
- 内存管理
- 文件系统管理
- 进程管理
- 外设管理
- 用户管理
- 其他等等
表现出来就是让CPU可以开始 判断与运算数值,让内存可以开始加载/读出数据与程序代码,让硬盘可以开始被访问,让网卡可以开始传输数据,让所有周边的设备可以开始运转……总之硬件的所有操作都必须通过操作系统来完成。
一个操作系统的核心叫内核,操作系统的各项功能都是通过内核实现的。
常见的操作系统
- DOS:个人电脑;
- Windows:个人电脑、Windows7、Windows10、WindowsServer;
- Mac OS X:MacBook系列笔记本;
- Android:安卓手机、平板、机顶盒、智能电视机、手环;
- IOS:iPhone、iPad、iWatch、iPod……
- Unix;
- Linux:免费、可靠、安全、稳定、多平台;
- 其他。
为什么要学习Linux
- 大部分软件都在Linux上运行
- Linux作为服务器的操作系统,大部分软件都运行在Linux操作系统上;
- 互联网Web服务、物联网、车联网、大数据、云计算服务、人工智能、智能运维……各个方面都有广泛应用;
- 工作中要用到Linux
- 搭建环境、操作后台、排查问题……
- 笔试、面试要考Linux知识
- 非常现实的需求
- 常用的Linux操作和命令都是考核的内容
Linux学习范围
- 最最最基本的操作
- 文件、目录操作操作
- 用户管理
- 文件权限操作(读、写、运行)
- 打包压缩
- crontab定时任务
- 软件包的安装
- 网络操作命令和工作
Linux的诞生
GNU(GNU’s Not Unix)项目,目的是创建一个自由、开放的UNIX操作系统。全部是开源软件,包括:Shell、系统工具、开发软件(C语言编辑器GCC)、应用软件、图形桌面。
Linus Torvalds(托瓦兹)于1991年发布了Linux内核,放到网站上供人下载使用,因为托瓦兹放置内核的那个FTP网站的目录为Linux,从此大家便称这个内核为Linux。
1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生,该操作系统被称为“GNU/Linux”或简称为Linux。
Linux系统结构
4部分:
- 内核
- shell
- 文件系统
- 应用程序
各部分层级结构如图
Linux发行版本
各种组织或单位采用Linux内核和GNU工具以及各类软件,编译及包装成自己所谓的Linux发行版(就像安卓)。
分为两类:一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以Redhat企业版为代表,后者以CentOS、Debian为代表。
Redhat系列:RHEL( Redhat Enterprise Linux )、Fedora Core、OpenSUSE(德国著名Linux)
Debian系列:Debian、Ubuntu、 CentOS(RHEL的社区克隆版本,免费)不同系列的内核都是采用Linux内核,大部分命令相同,部分命令不一样。
⭐️Linux系统特点
- 多用户:同时支持多个用户登录使用(用户管理)
- 多任务:多个程序(任务)可以同时运行(与Windows类似)
- 安全:源代码开源、有问题可以即使发现和优化
- 源代码公开:任何人、组织只要遵守官方许可条款,就可以自由使用Linux源代码
- 广泛的硬件/软件支持:常见的应用先由Linux发行,后续才移动到其他平台
- 强大的命令、工具
- 稳定:7*24,甚至365*24
Linux系统在软件测试中的应用
-
Linux作为操作系统在企业中广泛使用
-
大量的公司项目软件安装在Linux操作系统上
-
公司软件运行中出现问题,需要运用Linux知识去排查
例如:
- 网络故障排查
- 程序状态查询
- 定时启动一个程序
- 查看日志
- 软件的安装/卸载
- 程序的配置文件修改
- ……
二、Linux简单操作
先说一下本篇文章的Linux环境:win10系统下,VMware17pro,CentOS7.9.2009,XShell7
Linux启动
-
直接通过光盘安装在硬件上的:按开机键启动(类似Windows)如果装了Windows、Linux双系统,在开机时需要手动选择
-
通过虚拟机安装:
在虚拟机中按下“开启此虚拟机”
Linux登录
-
本地登录
启动后出现登录窗口,输入用户名和密码登录
-
远程登录
通过远程登陆工具登录,如XShell、SecureCRT等
⭐️Linux的七种运行级别(runlevel)
- 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 1:单用户工作状态,root权限用户系统维护,禁止远程登录
- 2:多用户无网络状态(无NFS)
- 3:多用户有网络状态(有NFS),登录后进入控制台命令行模式
- 4:系统未使用,保留
- 5:多用户有网络,登录后进入图形GUI模式
- 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
Shell
- shell是一个使用C语言编写的程序,是用户通过命令和Linux进行交互的桥梁,它接受用户从字符终端输入的命令,并调用对应的程序去执行;
- Linux是通过Shell来解释执行命令(命令解释器);
- Linux默认的shell是bash
- shell的种类:
- 标准shell(sh)
- Bonrne Again Shell(bash)
- Korn shell(ksh)
- C shell(csh)
shell脚本(Hello Shell!)
-
shell脚本(shell script),是一种为shell编写的脚本程序;
-
业界所说的shell通常指shell脚本,但是大家要知道shell和shell script并不等同
-
Hello Shell!
//进入Linux终端,输入如下命令 vim hello.sh //进入文件后,按下i(进入insert模式) #!/bin/bash echo "Hello Shell!" //输入完成后按Esc:wq(保存并退出) chmod a+x hello.sh //刚写完的hello.sh还不能直接运行 cat hello.sh //cat命令查看文件 ./hello.sh bash hello.sh
Linux命令格式
-
格式:命令 参数1 参数2 …… 参数n
-
Linux命令由一个命令和零到多个参数构成,命令和参数之间,以及参数与参数之间用空格隔开
-
命令和参数都是区分大小写的
-
参数可以合并
例:
ps -e -f
也可以写成ps -ef
系统时间查看与设定
-
查看系统时间
date
命令 -
格式化显示时间
date + '%Y-%m-%d %H:%M:%S'
-
设置系统时间
date -s '20231001'
查看Linux版本信息
cat /etc/issue
cat /etc/*release
关机与重启
- 关机:
init 0
poweroff
shutdown -h now
halt -p
- 重启:
init 6
reboot
shutdown -r now
三、Linux文件和文件夹的操作
Linux系统目录结构
没有C、D、E盘符,一切从/
(根目录)开始,单个树状结构。
查看Linux系统磁盘占用
df -Th
文件名和特殊文件
-
Linux文件名称:大小写敏感,无专用扩展名
-
ls
命令查看某个目录下有哪些文件和目录(文件夹) -
Linux特殊文件
命令 表示 /
根目录 .
当前目录 ..
当前目录的父目录 .字符串
隐藏文件
Linux系统常用目录
目录 | 表示 |
---|---|
/etc | 系统管理和配置文件 |
/home | 用户主目录 |
/boot | Linux系统的内核文件 |
/sbin | 系统管理命令,这里存放系统管理员使用的管理程序 |
/root | 系统管理员root的家目录 |
/bin | 常用可执行文件,主要有:cat,chmod,chown,date,mv,mkdiir,cp,bash…… |
/dev | 设备文件 |
/usr | 用户应用程序和文件几乎都在这个目录下 |
/proc | 一个虚拟文件系统,放置的数据都是在内存当中,例如系统核心、进程信息(process)、设备状态及网络状态等。特点:开机就存在,关机就消失 |
/tmp | 公共的临时文件存储点,存放一些临时文件 |
/lib | 一些库文件(库是别人写好的现有的,成熟的,可以复 用的代码) |
绝对路径和相对路径
-
当前目录(工作目录)
就是shell所工作的目录,当用户刚登录系统时,当前目录时用户的home目录
用户的home目录是创建用户的时候产生的,一般是
/home/user_name
当前目录下的所有文件都可以直接访问,假设当前目录下面有个文件
file01
,要用vi
编辑它,就可以直接执行vi file01
查看当前目录命令:
pwd
-
绝对路径和相对路径
- 绝对路径:开始于根目录,紧跟着目录树的一个个分支,一直达到所期望的目录或文件
- 相对路径:开始于当前目录,紧跟着目录树的一个个分支,一直达到所期望的目录或文件
- 改变当前目录命令:
cd
文件夹(目录)常用操作命令
命令 | 表示 |
---|---|
cd /home | 进入/home 目录 |
cd .. | 返回上一级目录 |
cd | 进入个人用户的家目录 |
cd - | 返回上次所在目录 |
pwd | 显示当前工作路径 |
mkdir dir1 | 创建dir1目录 |
rmdir dir1 | 删除空目录dir1 |
文件常用操作命令
命令 | 表示 |
---|---|
ls | 查看目录中的文件和文件夹 |
ls -l | 显示文件和目录的详细资料 |
ls -a | 显示所有文件,包括隐藏文件 |
rm file1 | 删除一个叫做file1的文件,会给出提示 |
rm -f file1 | 强制删除一个叫做file1的文件,不提示 |
rm -f file1 file2 file3 | 强制删除多个文件,不提示 |
rm -rf dir1 | 强制删除dir1目录并删除其内容 |
查看文件、文本的内容
命令 | 表示 |
---|---|
cat | 查看短文件 |
less | 查看长文件 |
tali | 从文件尾部查看文件,常用参数-f ,打印文件的新增内容,tail -n file 查看文件的最后n 行 |
head | 从文件开头查看文件,head -n file 查看文件的前n 行,默认显示前10行 |
查看文件属性、目录内容
ls
命令
- 不带任何参数,列出当前目录的内容
- 参数为目录名,列出指定目录的内容
- 加参数
-R
,递归列出所有子目录的内容 - 加参数
-l
,列表形式显示详细内容
通配符
定义:通配符是一种特殊语句,主要有星号(*
)和问号(?
),用来模糊搜索文件。
模式 | 匹配对象 |
---|---|
* | 所有文件 |
g* | 文件名以g开头 |
b*.txt | 以b 开头,中间有零个或任意个多个字符,并以.txt 结尾的文件 |
Data??? | 以Data 开头,后面紧跟3个字符的文件 |
[abc]* | 以文件名a,b或c开头的文件 |
创建文件
创建文件命令:vi,touch
vi file.txt
touch file1 file2
可以同时创建多个
复制文件、目录
-
复制文件命令:
cp 源文件 目标文件
-
复制目录
cp -r dir01 dir02
:当前目录复制,源和目标目录名称必须不同cp -r file01 dir01 /home/jim/dir02
:源可以是多个文件、或目录
移动、重命名文件和目录
-
重命名文件、目录:源地址和目的地址相同就是重命名
例:
mv file01 file02
重命名文件file01为file02mv dir01 dir02
重命名目录dir01为dir02mv dir01/file01 dir01/file02
重命名文件file01为file02 -
移动文件、目录:源地址和目的地址不同
例:
mv file01 dir01/
移动file01到dir01目录mv file01 dir01/file02
移动file01到dir01目录且重命名为file02mv file01 file02 dir01 dir02
移动file01、file02、dir01到dir02mv dir01 dir02
如果dir02不存在,则重命名,如果dir02存在,则移动目录dir01到dir02目录下
文件链接
-
为什么需要链接
- 实现文件的共享使用(原因:不能移动,那个位置也有用)
- 提供了隐藏文件路径、增加权限安全及节省存储等好处
- 和复制的区别:文件在磁盘中只有一个拷贝,节省磁盘空间
-
链接的种类
硬链接(hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)
创建硬链接:
ln dog dog-hard
创建软链接:
ln -s pig pig-soft
-
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。
-
查看文件inode命令:
stat filename或ls -i
硬链接和软链接
对源文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件的内容。
- 硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
- 软链接(符号链接):若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。类似于Windows的快捷方式。
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
查找、查看文件
-
which命令
-
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;
-
用法:用来查找可执行文件的位置,显示命令的所在路径
-
语法:which系统命令
例:
which grep
查找grep命令的二进制文件路径
-
-
whereis命令
-
whereis命令则是用来快速查找程序的二进制文件、源代码和man手册文件的路径;
-
语法:whereis系统命令
例:
whereis grep
查找那么找到的结果就比which grep
命令找到的结果多,因为which命令只会列出二进制文件路径,而whereis命令会把grep的二进制文件、源代码、帮助手册都返回。
-
-
find命令
-
find命令会在指定目录及其子目录下查找符合条件的特定文件,当我们忘记文档路径时,可以使用该命令
-
语法:
find 目录名 条件
例:
find /home/tom -name test.sh
命令 表示 -name 名称
指定要被查找的文件或目录名称,可以用通配符 -type 类型
以文件类型作为查找条件,文件类型如下:d(目录),f(文件) -atime -5
5天内访问的文件 -atime +5
5天前访问的文件 -amin -5
5分钟内访问的文件 -amin +5
5分钟前访问的文件 -
文本关键字搜索grep
- grep命令一种强大的文本搜索工具,并把匹配的行打印出来
- 什么时候用?
- 查看日志
- 查看命令输出
- 命令格式:
grep 关键字 文件
- 默认大小写敏感
- 支持正则表达式
命令 | 表示 |
---|---|
-c | 只输入匹配行的行数 |
-i | 不区分大小写 |
-n | 只显示匹配行及行号 |
-v | 显示不含匹配文本的所有行 |
-F | 指明pattern非正则表达式 |
文件内容统计wc
命令 | 表示 |
---|---|
wc -l /etc/passwd | 统计/etc/passwd文件有多少行 |
wc -c /etc/passwd | 统计/etc/passwd文件有多少个字节 |
查看目录/文件占用的磁盘空间du
- du命令是查看文件或目录的磁盘使用空间,即磁盘占用大小;
- df命令是查看文件系统的磁盘使用情况,比如总空间多大,使用了多少,可用空间多少,使用率信息等;
- 语法:
du -sh dirname or filename
四、文本编辑vi
vi/vim概述
- vi/vim是所有Linux系统都提供的文本编辑器,它提供了一个窗口,通过它可以编辑文件;
- vim是vi的增强版本,支持vi的全部功能
- 增加命令
- 增强功能包括颜色标记功能
- 命令格式:
vi filename
- 如果vi后面跟具体的文件名,表示打开该文件进行查看和编辑
- 如果文件已存在,则打开并编辑文件(看底部提示信息)
- 如果文件不存在,则新建并编辑文件(看底部提示信息)
- 没有鼠标,纯键盘操作
vi操作模式
vi可分为三种操作模式
- 命令模式(command mode)
- 插入模式(insert mode)
- 底线模式(last line mode)
命令模式
- 刚进入时的默认模式
- 此时不可以直接添加文字
- 不能退格删除文字
- 控制屏幕光标的移动
- 字符的删除、复制、粘贴
- 进入插入模式
- 进入底线模式
插入模式
-
在插入模式下面可以对文本内容进行编辑
-
插入模式下文件底部有个
--INSERT--
标记 -
在命令模式下,可以输入下面的字符进入插入模式
命令 表示 i 插入,从目前光标所在之处插入所输入的字符 a 增加,目标光标所在的下一个字符处开始插入字符 o 插入新的一行,从行首开始输入字符
底线模式
- 在插入模式下先按
Esc
键进入命令模式,再输入冒号:
进入底线模式 - 在底线模式下,可以完成对文件的保存、内容替换、显示格式的设置等
命令模式功能——光标移动
操作 | 表示 |
---|---|
SHIFT+g | 移动到文件的最后一行行首 |
gg | 移动到文件的开头 |
0 or ^ | 移动到所在行的行首 |
$ | 移动到所在行的行尾 |
CTRL+f or PGDN | 往下翻一页 |
CTRL+b or PGUP | 往上翻一页 |
命令模式功能——删除、复制、粘贴
操作 | 表示 |
---|---|
x | 小写x 相当于del ;大写X 相当于backspace ;3x 删除光标所在位置开始3个字符 |
dw | 删除光标所在处直到词尾内容 |
dd | 删除光标所在行,3dd 表示删除从光标所在行开始的三行 |
yw | 复制光标所在处到词尾的内容 |
yy | 复制光标所在行,3yy 表示复制3行 |
p | 粘贴 |
命令模式功能——替换、撤销
操作 | 表示 |
---|---|
r | 替换光标所在处的字符 |
SHIFT+r | 连续替换字符直到按Esc为止 |
u | 假如误操作一个命令,可以马上按u撤销 |
CTRL+r | 反撤销 |
底线模式功能——查找、定位
命令 | 表示 |
---|---|
set nu | 在每一行的行首显示行号 |
set nonu | 关闭显示行号 |
n | n是你要输入的数字,再按回车,将跳转到数字指定的行 |
/关键字 | 先按/,再输入你要查找的字符 |
底线模式功能——字符替换
- 在底线模式下输入
1,$s/oldstring/newstring/g
会将全文的oldstring字符串替换成newstring字符串1,$
表示从第一行到最后一行s
表示替换g
表示每行全部替换- 或者简写成:
%s/oldstring/newstring/g
1,20s/oldstring/newstring/g
将1至20行间的oldstring替换成newstring字符串
底线模式功能——保存、退出
命令 | 表示 |
---|---|
:行号w文件名 | 摘取文件的某一段,存为另一个文件 |
:w newfilename | 将文件另存为新文件 |
:wq | 保存退出 |
:q! | 强制退出,并不保存 |
五、重定向、管道与环境变量
标准输入、标准输出、标准错误
执行一个shell命令行时,通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。
进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
输出重定向
-
有时候不想输出到终端上(命令结果需要处理),这时可以把输出结果重定向到某个文件;
-
语法:
命令 > 文件
例:
ps -ef > file
表示把
ps -ef
的结果重定向到文件file中 -
输出重定向会覆盖文件内容,如果不想文件被覆盖,可以使用
>>
追加到文件末尾
错误重定向
-
一般情况下,每个Linux命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
-
默认情况下,
命令 > 文件
会将输出重定向到 file,命令 < 文件
会将输入重定向到文件;如果希望将错误重定向到文件,可以这样写:
命令 2> 文件
同样可以用
>>
来追加错误到文件末尾
同时重定向输出与错误
-
同时将输出与错误重定向到同一个文件
命令 > 文件 2 > &1
:把标准错误和标准输出都重定向到文件。例:
ps -ef > out 2&1
-
同将输出与错误重定向到不同文件
命令 > 文件A 2> 文件B
:把标准输出重定向到文件A,标准错误重定向到文件B。例:
ps -ef 1> outfile 2>errorfile
输入重定向
-
和输出重定向一样,Linux命令也可以从文件获取输入,也就是输入重定向。
-
语法:
命令 < 文件
例:
rm -i file1 < file2
表示从file2文件中读取内容作为命令的输入
管道
经常要将一个命令的输出内容,给另一个命令作为输入的内容进行处理
例:
ps -ef
查看系统所有进程,再用grep 1182
过滤ID为1182的进程写法一:
ps -ef > tmp.out_file grep 1182 tmp.out_file
写法二:
ps -ef | grep 1182
这里
|
就是管道,表示ps -ef
输出作为grep 1182
的输入
管道示意图:
-
将前面的
ps -ef
命令的stdout
(本来是输出到终端设备的)重定向到一个临时管道设备里 -
同时将后一个命令
grep 1182
的stdin
重定向到这个临时的管道设备
管道的用法
- 让stdout和stderr同时重定向到管道
ps -ef 2>&1 |grep err
- 连续使用管道
ps -ef |grep python |wc -l
环境变量
什么是变量:让某个特定的字符串代表固定的内容就是变量,比如高中学过的数学y=ax+b
。等号左边y
就是变量,右边ax+b
就是变量的内容。注意左边的y
是未知数,右边的ax+b
是已知数
什么是Linux系统的环境变量:
- Linux是一个多用户的操作系统,每个用户登录系统后,都会有一个专业的运行环境。每个运行环境是用一组环境变量来定义的。用户可以对自己运行的环境进行定制,其方法就是修改相应的系统环境变量。
- 打印环境变量的命令:
env、printent
- 常见的环境变量如
HOME,pwd,PATH
等
查看环境变量
- 查看系统的所有环境变量及值:
env,ptintenv
- 常见的环境变量如
HOME,PWD,PATH
等 - 查看系统的某个环境变量的值:
echo $变量名
,如echo $PATH
echo命令的作用是显示字符,$
放在变量名前面表示引用某个变量
环境变量PATH
当输入命令的时候Linux会去查找PATH里面记录的路径。比如在根目录下可以输入命令ls
,在usr目录下也可以输入ls
,但其实ls
这个命令根本不在这个两个目录下,事实上当你输入命令的时候Linux会去/bin,/usr/bin,/sbin
等目录下面去找你此时输入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……
。其中的冒号使目录与目录之间隔开。
配置环境变量
-
临时方案
设置环境变量命令:
export
例:
修改环境变量PATH的值,增加
/home/tom
,命令如下:export PATH=$PATH:/home/tom
执行这个命令只临时有效,重启后会失效。
-
永久方案
把
export PATH=$PATH:/home/tom
的命令添加到配置文件的末尾- 如果要配置对所有用户永久生效,则添加到配置文件
/etc/profile
- 如果要配置对当前用户生效,则添加到配置文件
~/.bashrc
- 最后要执行
source /etc/profile
才能使配置生效
- 如果要配置对所有用户永久生效,则添加到配置文件
六、用户管理
Linux用户、用户组
- Linux是一个多用户的操作系统
- 任何一个要使用系统资源的用户,必须登录进入系统
- Linux用户属于一个或多个特定的组,称为用户组,即
group
为什么要分用户和用户组
- 资源访问控制
- 所有文件都属于一个特定的用户和一个特定的用户组
- 每个文件都有一定的访问权限,用户限制不同用户和用户组的访问行为
用户和用户组的关系
Linux系统以组Group的方式管理用户,用户和组的对应关系为多对多,即某个用户可以属于一个或多个组,某个组可以0,1或多个用户
组的分类:从用户角度,分为主组和附属组
- 主组:也被称为primary group、first group或initial login group,用户的默认组,用户的gid所标识的组
- 附属组:也被称为Secondary group或supplementary group,用户的附加组
- 用户必须有且只能有一个主组,就可以有0个、1个或多个附属组,如我们一定会有一个用来安家的房子(类同主组),还可以有n个用于投资或其他打算的房子(附属组)
Linux的用户类型
- root用户:超级管理员用户,具有操作系统的最大权限
- 普通用户:由超级用户创建及授权,并且可以登录到Linux系统执行某些任务
- 系统用户:系统内创建了若干用户,如mail、ftp、bin等,默认情况下,系统用户都是无法登录的
创建用户
命令:useradd 用户名
参数:-d
:指明用户家目录,若该目录不存在则创建目录;-g
:指明用户所属组,该用户组必须存在
该命令完成的事情:
- 在/etc/passwd文件中增加一行数据,表示该用户的信息
- 为该用户创建用户组,将该用户标识符加在/etc/group文件中,如果有-g选项,则不创建用户组,而是将该用户加入指定组中
- 为该用户创建一个家目录(home directory),将家目录的拥有者改为该用户所有
修改用户密码
命令:passwd 用户名
创建了用户之后,其密码是随机的,用户可以修改自己的密码(需要输入当前密码),只有root用户可以修改其他用户密码
修改用户信息
命令:usermod
例:
groups jim
//查看jim用户所属的组
usermod -g root jim
//修改用户jim的主组为root
usermod -a -G g4 jim
//增加用户jim的附属组g4
usermod -G g2,g3 jim
//修改用户jim的附属组为g2、g3
usermod -L jim
//锁定jim用户,锁定后该用户不能再登录
usermod -U jim
//解锁jim用户,解锁后该用户可以再登录
用户查询
命令 | 表示 |
---|---|
who | 查询当前在线的用户,只能查询在登录页面输入了用户密码登录的用户,通过su切换的用户无法被查到 |
whoami | 用户身份查询,当前所在的用户 |
groups | 查询用户的所属组 |
id | 显示当前用户信息 |
用户切换
命令:su
有-
和没-
的区别:有-
会重新初始化环境,比如全新用户home目录,新的环境变量
删除用户
命令:userdel 用户名
,userdel -r 用户名
:在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除
用户组
Linux系统中,每个用户账号至少属于一个组,每个组可以包括多个用户
管理组的常用命令有如下:
-
groupadd:创建组
-
groupdel:删除组
-
usermod:修改用户所属组
只有root用户可以操作
创建删除用户组
root用户创建用户组sales:groupadd sales
root用户删除用户组sales:groupdel sales
注意:如果有用户属于这个组呢?–primary组不能删除
创建用户的时候指定用户组
root用户创建用户sa01,sa02用户,并把它们添加到sales组里:useradd -g sales sa01
useradd -g sales sa02
七、文件权限管理
文件访问
三种访问权限:可读、可写、可执行
权限 | 文件的存储权限 | 目录的存取权限 |
---|---|---|
r | 具有读文件的权限 | 能查看文件夹里面的内容(比如:用ls命令能查看文件夹里的内容) |
w | 具有写文件的权限 | 能创建和删除文件(比如:在文件夹下面,使用touch命令创建文件) |
x | 具有执行文件的权限 | 能使用该目录下的文件(如cd命令),能进入该目录 |
对目录来说,可执行权限使最基础的
对一个文件来说,把用户分为三种:
用户类型 | 说明 |
---|---|
owner | 文件的所有者(一般来说,谁创建了文件,谁就是所有者) |
group | 文件所属工作组(一般来说,创建文件的用户所在的工作组(主组)) |
other | 其他用户(非owner和非group) |
文件的访问权限
改变文件的访问权限
命令:chmod
只有root用户和owner才能改变文件访问权限
语法:chmod [who][op][permission] filename
选项 | 表示 |
---|---|
u | 拥有者 |
g | 与拥有者同一组的用户 |
o | 其他人 |
a | 所有人 |
op
:表示动作
选项 | 表示 |
---|---|
+ | 表示要加上permission指定的权限 |
- | 表示要取消permission指定的权限 |
permission
:存取权限
选项 | 表示 |
---|---|
r | 可读 |
w | 可写 |
x | 可执行 |
例:
写法一:
chmod ug+w file01
拥有者和同组用户对file01“可写”
chmod a-x file02
所有人对file02不可执行
chmod u+rwx file03
拥有者对file03“可读、可写、可执行写法二:
chmod u=rwx file01
拥有者对file01“可读可写可执行”
chmod u=rwx,g=rx,o=r file02
拥有者对file02“可读可写可执行”, 对同组用户“可读可执行”,对其他 用户“可读”写法三:
chmod 755 file01
等价于chmod u=rwx,g=rx,o=rx file01
改变文件所有者和所属组
命令:chown
只有root用户可以改变文件的所有者和所属组,owner都不行
语法:chown [选项]…[所有者]:[所属组] 文件
例:
chown jack file01
:把文件file01的所有者改成jack
chown jack:jack file02
:把文件file02的所有者改成jack,所属组改成jack
chown -R jack dir01
:把目录dir01以及下面所有的子目录和文件的所有者改成jack
chown -R jack:jack dir02
:把目录dir02以及下面所有的子目录和文件的所有者改成jack,所属组改成jack
改变文件的所属组
命令:chgrp
root,owner(只能改变到owner所在的组)可以改变文件的所属组
语法:chgrp [选项]…[组] 文件
例:
chgrp jack file01
把file01的所属组改成jack
八、打包压缩与软件安装
打包与压缩
打包:把文件和目录的结构和内容拷贝到一个文件里
压缩:把文件经过一些算法变成体积上更小的文件
压缩命令gzip
压缩格式:gzip filename
压缩完成后,原来的文件会被替换成<name>.gz
解压缩格式:gzip -d <name>.gz
不能对整个目录压缩,但是可以通过-r
参数分别压缩目录下面的文件
压缩命令bzip2
bzip2的压缩比gzip更好,用法几乎与gzip相同
压缩格式:bzip2 filename
压缩完成后,原来的文件会被替换成<name>,bz2
解压缩格式:bzip2 -d <name>.bz2
不能对整个目录压缩,但可以分别压缩目录下的文件
打包命令tar
tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将改文件同时进行压缩;
由于tar的使用太广泛,目前Windows的WinRAR也支持.tar.gz文件的解压缩;
tar的常用参数:
参数 | 表示 |
---|---|
-c | 新建打包文件,可搭配-v来查看过程中被打包的文件名 |
-t | 查看打包文件的内容包含哪些文件名重点查看文件名 |
-x | 解打包或压缩的功能,可以搭配-C(大写) 在特定目录解开 |
-j | 通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2 |
-z | 通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz |
-v | 在压缩/解压缩的过程中,将正在处理的文件名显示出来 |
-f filename | -f 后面要接被处理的文件名。建议 -f 单独写一个参数 |
-C dir | 这个参数用在解压缩是,若要在特定目录解压缩,可以使用这个参数 |
特别留意的是,-c
,-t
,-x
不可同时出现在一串命令行中
压缩命令zip
zip是流行与Windows系统上的一种压缩方式,Linux也提供了zip压缩命令
Linux上zip命令可以压缩一个或多个文件到一个压缩文件里
压缩格式:zip zipfile.zip file01 dir01
,表示把file01、dir01压缩到zipfile.zip里
解压格式:unzip zipfilezip
源码包方式安装软件
Linux上的软件几乎都是经过GPL(GNU General Public License)授权,所以每个软件几乎都会提供源代码,并且你可以自行修改程序代码,以符合你个人的需求,这就是开放源码的优势;
Linux系统上真正识别的可执行文件是二进制文件,比如/bin/cat二进制程序代码;
通过源码包安装软件的过程就是把软件的源代码编译成可执行的二进制文件然后进行安装;
通过源码包安装的步骤:安装工具——》配置——》编译——》安装
- 安装需要的编译器,如gcc;
- 执行configure命令找到所需要的函数库、编译器及其他资料,生成Makefile文件;
- 执行make命令,根据Makefile文件进行编译;
- 执行make install命令完成安装。
RPM包方式安装软件
RPM的全称是RedHat Package Manager,是RedHat发明的一种软件包安装工具和安装包格式;
RPM的最大特点是将你要安装的软件先编译好,并且打包成RPM机制的安装包,用户只需要下载相应的RPM包安装即可;
优点:
- 由于以及编译完成并且打包完毕,所有软件传输与安装上很方便(不需要再重新编译)
- 由于软件的信息都已经记录在Linux主机的数据库上,很方便查询、升级和卸载
缺点:
- 不能根据自己的需求灵活配置
- 可能存在打包环境与安装环境不一致导致安装失败
- 更新慢
九、进程和定时任务
进程和程序的概念
程序(软件)用代码决定程序的行为,存在存储介质里,比如硬盘。
程序运行起来,就是操作系统把存储介质上的可执行文件加载到内存里面运行,这个运行的程序叫做进程。
程序是静态文件,进程是程序的一次执行过程,进程是动态的。
查看Linux里的进程
命令:pc(process status)
进程ID(PID)
- 操作系统用数字来标识进程
- ps命令显示进程的ID
ps命令
参数 | 表示 |
---|---|
不带参数 | 同一个用户同一个终端 |
-ef | e表示所有,f表示full-format |
-axu | ax表示所有,u表示user-orinented |
与管道符 | `ps -ef |
前后台进程
shell里正在执行的和用户进行交互的进程叫前台进程
例:
ps
,ls
都是前台进程,时间短
有的命令执行时间长,比如备份
可以在命令后加&
在后台执行
后台运行,意味着不从标准输入读入字符
后台运行的进程我们叫后台进程,或者后台任务
进程前、后台切换
列出后台进程:jobs
命令 | 表示 |
---|---|
fg <num> | 将后台进程调到前台,比如fg 1 |
CTRL+z | 挂起进程,注意jobs显示的状态是stopped |
bg <num> | 可将进程在后台运行,比如在执行CTRL+z 挂起进程后再用bg 1 让进程在后台继续执行 |
终止进程
进程的两种终止方式
- 自行终止
- 任务执行完成
- 用户让其退出
- 异常退出
- 用户手动杀死进程
kill PID
杀死进程kill -9 PID
强制杀死进程CTRL+c
- 只能是owner和root才能杀死进程
定时任务
crontab格式说明:总共6个字段,前5个表示时间,最后一个表示要执行的操作。
crontab格式说明
特殊符号 | 意义 |
---|---|
* | 代表任何时刻都接受的意思,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作 |
, | 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” |
- | 可以用整数之间的减号表示一个整数范围,例如“2-6”表示“2,3,4,5,6” |
/ | 可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。 |
语法:crontab [-u user][-l | -r | -e]
参数 | 表示 |
---|---|
-u | 只有root用户才能进行这个任务,也即帮助其他用户创建/删除crontab工作调度 |
-l | 查看crontab工作内容 |
-r | 删除所有的crontab的工作内容,若仅仅要删除一项,请用-e编辑 |
-e | 编辑crontab的工作内容 |
工作原理:当用户使用crontab这个命令来新建工作调度之后,该项工作会被记录到/var/spool/cron里面,而且以账号来作为判断。
例:
root使用crontab后,他的工作会被记录到/var/spool/cron/root/cron
另外,cron执行的每一项工作都会被记录到/var/log/cron这个日志中,所以如果你的Linux不知道是否被植入木马时,也可以查询一项/var/log/cron这个日志文件。
十、网络操作命令、工具
什么是网络接口
Linux中的一个网络对象,可以对应实际网卡,也可以是虚拟的。命令通过操作网络接口来控制网络。
查看 IP地址
命令 | 表示 |
---|---|
ifconfig | etho 查看指定网卡的IP,-a 查看所有网卡的IP地址 |
ip | addr 查看主机的所有IP地址 |
禁用、启用网络接口
命令 | 表示 |
---|---|
ifdown eth0 | 禁用eth0接口 |
ifup eth0 | 启用eth0接口 |
ifconfig eth0 down | 禁用eth0接口 |
ifconfig eth0 up | 启用eth0接口 |
service network stop | 关闭网卡 |
service network start | 启动网卡 |
service network status | 查看网卡状态 |
service network restart | 重启网卡 |
free、top命令
-
free
命令用于显示系统内存的使用情况,包括物理内存(RAM)和交换分区。free
命令通常以以下格式显示内存信息:各列的含义如下:
total
: 物理内存总量。used
: 已使用的内存量。free
: 空闲内存量。shared
: 共享内存量。buffers
: 缓冲区内存量。cached
: 缓存内存量。Swap
: 交换分区的总量和已使用量。
-
top
命令top
命令是一个实时的系统性能监视工具,它显示了当前运行中的进程的信息,包括 CPU 使用情况、内存使用情况、进程列表等。top
命令以交互方式显示信息,并实时更新。基本的
top
界面包括 CPU 使用情况、内存使用情况、任务列表和关键性能统计。top
提供了丰富的实时系统性能信息,可以帮助用户了解系统的运行状况和性能瓶颈。
ping命令
可以检查连通性以及网速
命令:ping -c <测试数据包数量> <目的主机地址>
网络数据包统计
显示网络数据包统计详细信息:netstat -s
显示网络数据包统计详细:ifconfig -s
配置静态ip
临时方案:
-
命令行配置
ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
eth0一般对应的是第一个网卡, 192.168.1.10是给eth0配置的IP地址,netmask 255.255.255.0配置的是子网掩码,up表示立即生效
-
一块网卡配置多个IP地址
ifconfig eth0:1 192.168.1.11 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.1.12 netmask 255.255.255.0 up
永久方案:
修改网络接口配置文件
修改/etc/sysconfig/network-scripts/ifcfg-ethx文件
重启生效
lsof
命令
命令:lsof -i:<端口号>
查看某个端口占用情况
Linux上网络数据包抓取
命令:tcpdump
常见参数和过滤器
参数 | 表示 |
---|---|
tcp | 表示只抓取tcp报文,可以是ip、icmp、arp、rarp 、tcp、udp、icmp这些选项之一,放到第一个参数的位置,用来过滤数据报的类型 |
port | 端口 |
host | 主机地址,可以是源主机和目的主机 |
-vvv | 抓取最详细内容 |
-s0 | 抓取数据包时默认抓取长度为68字节,加上-s0 后可以抓到完整的数据包。 |
-i | 指定监听的网络接口,比如-i eth0表示只抓经过接口eth0的包 |
-c | 使用-c参数,指定抓包的数量 |
-w | 使用-w参数指定抓包文件保存到文件,以便后续使用Wireshark等工具进行分析 |
Linux上的远程登录
命令:ssh root@1.1.1.1
Linux主机之间拷贝文件-scp
-
从本地复制到远程
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
-
从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可
scp remote_username@remote_ip:remote_file_name remote_file_name
scp remote_username@remote_ip:remote_file_name local_file_name
完结!END