一:HCSA-VM-Linux安装虚拟机后的基础命令
1.代码命令
1.查看本机IP地址:
ip addr 或者 ip a
[fox@bogon ~]$ ip addre
[fox@bogon ~]$ ip a1:<Loopback,U,LOWER-UP> 为环回2网卡
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>为虚拟机自身网卡
2.测试网络联通性:
[fox@bogon ~]$ ping www.baidu.com
强制终止进程 Ctrl + C
3.关闭安全软件-关闭防火墙
[fox@bogon ~]$ systemctl stop firewalld # 临时关闭防火墙(重启设备后将再次自行启动) [fox@bogon ~]$ systemctl disable firewalld # 取消开机启动(重启设备后将不会自行启动) Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service". Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
在此如果登陆的是用户账号需要输入管理员账号密码
4.关闭SELinux
[fox@bogon ~]$ setenforce 0 (临时关闭)
5.修改主机名
[root@bogon ~]# hostnamectl set-hostname server 设置新名字为server
[root@bogon ~]# hostname 查看主机名
只有重启以后名字才会正式显示
6.重启设备
[root@bogon ~]# reboot
7.修改源yum为国内阿里源
1.使用XShell远程登陆
方法一:
使用XShell来远程来链接Linux系统
第一步:双击打开XShell然后修改名称,输入需要链接的设备IP,然后选择连接。
第二步:第一次登陆需要选择接受并保存
第三步:选择用户并输入密码
此时就已经完成远程登录
方法二:
SSH root@IP地址
例:下图所输入的命令为:SSH root@192.168.17.128
最后若想要注销则需要输入 Ctrl + D
2.启动Xftp实现上传下载
第一步:点击绿色选项打开Xftp
第二步: Xftp左边是Windows窗口,右边是Linux窗口,三点为返回上一级。
3.yum定义及下载
yum是REDHAT系统默认下载软件工具,默认下载仓库网址服务器在境外,传输速度较慢,需要将系统自带的vum仓库服务器地址更改为国内阿里yum仓库服务器地址,以保证下载软件速度稳放
原理:
oyum的配置文件必须放在/etc/yum.repos.d目录中打开该文件查看是否存在 [root@node2 ~]# cd /etc/yum.repos.d
cd: 进入(进入)文件夹(许多设备一开始没有该文件)若有则经行一下操作
进入上一级直接删除文件 [root@node2 ~]# cd /etc
删除yum.repos.d目录 [root@server etc]# rm -rf yum.repos.drm -rf 删除文件夹,rm -f 删除文件
在重新建立该目录 [root@server etc]# mkdir yum.repos.d
将之前准备好的阿里的yum配置文件通过xftp上传到/etc/yum.repos.d目录中
第一步:使用xftp将配置文件上传到/etc/yum.repos.d目录中
在Xftp中的Windos窗口找到对应文件,在Linux窗口将文件打开到 /etc/yum.repos.d
然后将文件直接从Windos窗口拖拽到Linux窗口,即下载完成
第二步:查看文件是否完成上传
4.制作yum缓存 ,使 yum文件生效
第一步:制作yum缓存,使yum文件生效
[root@server ~]# yum makecache
此时阿里云已经更新完成。
5.下载软件进行测试
下载软件进行测试 gcc为 C++的编译器
[root@server ~]# yum install gcc 即如图中途需要输入Y才能使安装继续进行
[root@server ~]# yum install gcc -y 中途不用输入Y就能使安装继续进行
8.快照制作
快照是VMware的功能,因此该命令因在VMware上进行操作
名称修改为 初始
在左下角进度没有到达100%之前不要经行任何操作
9.正确的关机和重启
[root@bogon ~]# reboot 重启
[root@server ~]# shutdown now 关机
2.快捷键
1.放大中端字体字体 Ctrl + Shift + =
缩小中端字体字体 Ctrl + Shift + -
2.将鼠标在虚拟机与电脑之间相互切换 Ctrl + Alt
3.可以使用上下箭头来返回上一句配置命令
4.清空屏幕 Ctrl + L
5.强制终止进程 Ctrl + C
6.单词补全 tab
7.复制 Ctrl + insert
8.粘贴Shift + insert
9.在Xshell上进行注销当前链接 Ctrl + D
二.: VM-Linux基础操作命令
基础知识:
Linux的组成
Linux内核:内核是系统的核心,是运行程序和管理像磁 盘和打印机等硬件设备的核心程序。 文件系统: 文件存放在磁盘等存储设备上的组织方法。 Linux能支持多种目前浒的文件系统,如ext4、FAT、 VFAT、ISO9660、NFS、SMB等。
Shell:Shell是系统的用户界面,提供了用户与内核进行 交互操作的一种接口。
应用程序:包括文本编辑器、编程语言、X Window、办 公套件、Internet工具、数据库等。
Linux的操作界面常称为Shell,Shell是操作系统提供给用 户使用的界面(图形、字符),它提供了用户与内核进行 交互操作的一种接口。当用户发出指令(命令或鼠标操 作),先将这些指令发送给Shell,由Shell将用户的指令翻 译后传送给内核,再由内核来控制硬件的工作。然后内核 将硬件的工作情况发送给Shell,并由Shell返回硬件的工 作信息和情况。
Shell的分类: 图形界面的Shell :KDE、GNOME 字符界面的Shell:bash等
命令执行的本质:
当输入命令(单词)后敲击回车的那一刻。它就会立刻到以下图片,变量中的文件中去找对应的可执行文件
此路径又叫环境变量
通配符:
通配符:模糊查找的代表字符
*:住意内容任意个数
?:任意内容1个
终端
终端:也称为终端设备,是处于计算机网络中最外围的设 备,主要用于用户信息的输入输出等
图形化终端:活动->终端
命令行终端:系统默认共有6个终端界面,相互不影响, 这些终端都是虚拟的终端,使用ctrl+alt+F(1、2、3、 4、5、6)快捷键进入
1.命令提示符
默认:[root@localhost ~]#
root:现已登录的账户名,可以通过su 普通账户 命令进 行切换查看
@:分隔符
localhost:当前主机名
~:该位置表示当前工作目录,
~ 表示/root
# : 该位置有2种符号
# 表示以root身份登录,
$表示以 普通账户身份登录
1.2.命令格式
主命令 参数 操作对象 主命令:为命令的词组
参数:
短格式:
以减号(-)开头,参数字母
长格式:
以2个减号(--)后跟上完整的参数单词
例一:查看内核
[root@server ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)
企业发行版本 当前版本 (当前版本代号)
例二: 查看内核版本
[root@server ~]# uname -r
5:主版本号
14:主修订版本号
0-162:次要版本号
6.1:补丁版本
el9:红帽9
x86——64:使用平台
例三:查看shell类型
例四:查看IP地址
命令: ip a ip addr ifconfig 三条命令都可以使用
2.cd命令
命令含义:更改当前工作目录,即切换目录
2.1格式:
cd -参数 路劲 路径:
绝对路径:从/(根)目录开始描述,推荐
相对路径:从当前工作目录开始描述
命令摘要:
[root@server ~]# cd / 切换到根目录
[root@server /]# cd /root 切换到管理员家目录,可以简化为 [root@server ~]# cd ~
注意: cd ~在不同的账户中代表的含义不同,当在fox账户时代表
[root@server ~]# cd /etc 切换到根目录下的etc
[ root@server etc]# cd .. 返回上一级 ”..“本质就是目录
2.2pwd
查看当前工作目录的绝对路径
[root@server system-connections]# pwd
图片中的实例为Linux当前网卡的配置文件
3.查看帮助命令
3.1man命令:
[root@server ~]# man cd
[root@server ~]# q 浏览完之后用q命令退出
3.2 info:解锁命令相关手册
[root@server ~]# info cd
[root@server ~]#
[root@server ~]# q 浏览完之后用q命令退出
4.pwd 查看当前文件所在的绝对路径
[root@server ~]# cd /etc/yum.repos.d 首先随便进入一个文件
[root@server yum.repos.d]# pwd 使用 命令查看
/etc/yum.repos.d
[root@server yum.repos.d]#
5.ls--浏览当前目录下的内容
ls :即list列表的意思。浏览当前目录下的内容,以列表的形式展开。一般与命令cd相互配合。
5.1 参数:
5.2 例:
例:[root@server ~]# ls -l
-rw-r--r--.drwxr-xr-x 1 root root 0 9月13 2023 b1 第一个位置“-”表示该文件的类型
"rw"表示该文件的归属者,所属工作组以及其他人对该文件拥有的读写执行权限
硬链接数 归属的账户 归属的工作组 文件在磁盘上占用的流量 新建时间 文件名
查看当前工作目录信息:[root@server ~]# ls -dl /root
查看隐藏文件:[root@server ~]# ls -a
例如:“ .bash_logout”就是隐藏文件 ”.“代表当前位置 ”..“代表上一级
排序查看 [root@server ~]# ls -s
5.3 ls浏览时文件颜色的含义
6.su passwd---切换用户即修改密码
6.1 切换账户到fox然后切回root
[root@server ~]# su fox
[fox@server root]$ su root
低级账户切入高级账户时需要输入密码认证
6.2 更改用户 root 的密码
[root@server ~]# passwd root
更改用户 root 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
注:修改用户账号时方法一样,且管理员账户可以修改任何账户的密码。
7.与时间相关的命令
7.1date
date意义:用于显示和设置系统的时间或日期
[root@server ~]# date
格式:
date -参数 +显示的日期或者时间格式 例如:
在此处强调一下:双引号使用问题,只有所描述的语句中含有空格时。才需要双引号引起,以表示该语句为一个整体。
常见的日期时间格式:
在实际工作中备份的文件必须在后边加入备份时间例如:
[root@server q1]# cp b2 b3`date +%Y-%m-%d-%H:%M:%S` 注意:此处使用的不是单引号,而是反引号哦。
修改时间
[root@server q1]# date -s 2023-09-14
注意:只要单独修改日期那么,时间将会变为全零。
显示俩天后的日期 [root@server q1]# date -d "+2 day" +%d
7.2 timedatectl
意义:设置系统的时间和时区
格式:
timedatectl -参数 命令 [root@server q1]# timedatectl
将时区设置为上海 [root@server q1]# timedatectl set-timezone Asia/Shanghai
修改时间
[root@server q1]# timedatectl set-time 2023-9-11
注意:执行此操作前必须先关闭时间同步功能,否则会报错如下:
原因:如何Linux系统安装时都会默认装有(NTP)一个时间同步服务。
关闭命令: [root@server q1]# timedatectl set-ntp no
7.3 显示日历的命令 cal
[root@server q1]# cal
[root@server q1]# cal 2023
cal 后直接加具体年会调出这一年的日历
[root@server q1]# cal 05 2023 此时会调出该年的该月日历
三.:根目录下文件名对应的含义
文件名 | 描述 |
/ | Linux文件系统的最上层根目录,其他所有目录均是该目录的子目录 |
/boot | 存放系统启动时所需的文件,这些文件若损坏常会导致系统无法启动,一般不要改动 |
/root | 超级用户的个人目录,普通用户没有权限访问 |
/home | 存放一般用户的个人目录 |
/bin | Binary的缩写存放普通用户可执行的程序或命令 |
/sbin | 和/bin类似,这些文件往往用来进行系统管理,只有root可使用 |
/lib | 是库(library)英文缩写,存放系统的各种库文件 |
/lib64 | 存放系统本身需要用到64位程序的共享函数库(library) |
/usr | 一般用户程序安装所在的目录,用于安装各种应用程序 |
/opt | 该目录通常提供给较大型的第三方应用程序使用,例如Sun Staroffice、CorelWordPerfect,这可避免将文件分散至整个文件系统 |
/etc | 存放了系统管理时要用到的各种配置文件和子目录 |
/var | 通常各种系统日志文件放在这里 |
/run | 保存自系统启动以来描述系统信息的文件 |
/dev | dev 是设备 (device)的英文缩写。包含所有的设备文件 |
/mnt 和/media | 可以临时将别的文件系统挂在这个目录下,即为其他的文件系统提供安装点 |
/tmp | 用来存放不同程序执行时产生的临时文件 |
/srv | srv 是服务(server)的简写,服务启动之后需要访问的数据目录 |
/sys | 本目录是将内核的一些信息映射文件,以供应用程序所用 |
/proc | 可以在这个目录下获取系统信息。这些信息是在内存中由系统自己产生的 |
四:从命令行管理文件(一)
1.linux系统中软连接硬链接
ln--硬连接
1.1.原理
linux系统中允许多个文件指向同一个inode,即允许一个文件拥有多个有效的路径名和文件名。理解:硬连接就是指向原始文件的inode指针
格式 ln 源文件名 硬连接名
证明一:
创建一个文件t1 查看他的硬链接数
创建一个硬链接 [root@server q1]# ln t1 t2
在将hello word 转储进t1 同时 查看t2
结论:硬连接就是指向原始文件的inode指针
证明二:
创捷m1.txt 并与m2.txt建立硬链接
[root@server q1]# touch m1.txt
[root@server q1]# ln m1.txt m2.txt观察他们的的(Inode)索引号
[root@server q1]# stat m1.txt
[root@server q1]# stat m2.txt
结论:他们的inode号都一样,因此硬连接就是指向原始文件的inode指针
注:硬链接不可以给目录建
新建一个目录n1查看硬链接数
会发现其有来个硬链接。也就是说目录从创建起,就会自动生成一个硬链接,也就是隐藏目录“.”目录
他们的Inode号相同。
注意:
不可以在不同的文件系统中建立硬连接,由于inode是当前文件所在本文件系统的索引值即只能在本分区使用,则硬连接不能跨越文件系统
用途:硬连接一般用于数据的备份
ln -s 软连接
1.2.1 原理
软连接本质是一种符号连接,类似于Windows的快捷方式,存储对应文件的路劲
1.2.2 软连接的建立
格式 1 n -s 源文件(绝对路径) 软连接名称
[root@server q1]# ln -s /etc/NetworkManager/system-connections/ens160.nmconnection nic
软连接只能写绝对路径,且无法查看链接个数
修改软连接名字:
[root@server q1]# ln -snf /etc/NetworkManager/system-connections/ens160.nmconnection NIC
查看他们的Inode号
发现他们的Inode号 不同,因此软连接和硬链接具有本质区别
软硬链接的区别:
1.软连接的指向关系可以通过命令查看(I 或者 ),硬连接不可以查看执行关系,只能查看连接
硬连接数(或者 stat)2.软连接数不会增加,硬连接数会增加
3.文件大小不一样,硬连接文件容量相同是同一个文件,软连接只是一个快捷方式,容量较小
4.软连接可以跨越文件系统 (分区),任何用户都可以建立指向目录的软连接
2.mkdir--创建目录
格式
mkdir -参数 路径/目录名
参数
-p:快速创建多级目录 (递归目录)
-v:显示创建目录的详细过程
例一:
快速创建多级目录 (递归目录) [root@server q1]# mkdir -p k1/k2/k3
3.touch--创捷文件
新建文件的方法一:
touch用法一:
touch 加文件名
如果文件已存在,则更新文件的三个时间,可以通过stat命令创建时间。
实例如下:
touch用法二:
若要一次性创建多个不一样的文件则:
若要一次性创建多个一样的文件则:
若要创建n多个一样的文件
[root@server q1]# touch p{起始..终止}.txt
新建文件的方法二(echo):
利用另存为 搭配重复定向符 [root@server q1]# echo "hello word" > b2
新建文件的方法三(vim):
利用vim去打开,若不存在就会新建
[root@server q1]# vim b3该方法会直接进入文本编辑器
此时我们在英文输入法下,按 按键“I”然后进行输入,最后按“Esc"键将光标定位到最后一行
然后回车就会返回终端。
4.创建一个大容量文件(dd)
作用
制作指定容量的空文件格式
dd if=来源 of=新文件名 count=数据块个数 bs=块容量
dd if=来源 of=新文件名 count=数据块个数 bs=块容量 分析
if=/dev/zero,zero 文件是一种特殊文件,可以向其它文件填充无穷个数字0。of=新文件名,创建的新大文件的存储路径及名称
count=,新文件由及格数据块构成
bs= 一个数据块的容量
例一:创建一个大小为1G的空文件
创建一个大小为1G的空文件
[root@server q1]# dd if=/dev/zero of=/temp1 count=2 bs=512MB
查看文件,会发现该文件没有内容。
5.tree命令
作用:显示树林拓扑结构图,利于查看文件夹的宏观架构、
格式 tree -参数 路径
参数:
-a: 显示所有文件结构及信息 -f: 列出文件的完整路径 -d: 只显示目录 -L: 设置显示的最大深度: 如: tree -f -L 2
例一:
[root@server q1]# tree
扩展:
只有RHEL9安装了tree其余版本都要自行安装。
步骤如下:
5.1在Linux中做光盘镜像(dd命令)
[root@server q1]# dd if=/dev/sr0 of=/RHEL9.iso
如上图则成功。
若在执行命令时自行中断,则需要切换到虚拟机点击图中按键查看镜像是否挂载
若没有挂载则需要手动切换到VM终端进行手动挂载
6.删除文件 rm
格式:
rm -参数 文件名 用法:
删除文件: rm 文件名
删除文件不确认: rm -f文件名
删除目录 :rm-r 目录名
[root@server ~]# rm -rf /* 删除电脑根目录下所有文件 (慎用)
注意
1.删除前必须确认
2.删除时文件的名称及扩展名必须写全
五: 从命令行管理文件(二)
1.数据流和重定向(>,<,>>,<<)
1.2数据流
标准输入 (standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
标准输出(standard output,简称stdout): 默认情况下,命令执行所回传正确的信息会输出到屏幕上
标准错误输出(standard error output,简称stderr): 默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
标准输入 (stdin):代码为0 0代表输入(键盘)
标准输出 (stdout):代码为1 1代表输出(屏幕)
标准错误输出(stderr) : 代码为2 2代表错误(输出错误提示)[root@server q1]# ll /dev 显示系统中该命令的存放位置
1.2重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。、
重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号.
1.2.2符号
输出重定向操作符: > >>
“>”默认是覆盖,覆盖原有内容 “>>”默认是追加,在原有内之后添加内容
输入重定向操作符:< <<“<” 输入重定向
"<<"表示输入的终止符用哪一种,一般在<<后直接加输入终止符
[root@server q1]# cat > t1.txt << aaa
自我理解:以看的形式给t1.txt输入内容,当遇到aaa时输入终止三种文件存储方式:echo "hello word" > t1.txt
cat > file3 << end
cat > t5.txt
1.2.3用法
命令 >文件 或 命令 1>文件 : 将命令执行后的结果不在默认的屏幕上显示,而是以覆盖的方式写入到指定立件中,若指定的文件不存在,则自动创建该文件
命令 2>文件 :将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 2>/dev/nu11 : 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备命令文件(黑洞)中(相当于Vin的回收站),即将输出的错误信息丢弃掉
命令&>文件 命令>&文件 : 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,而是以罗盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 >>文件 : 将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容,若指定的文件不存在,则自动创建该文件
命令 <文件 : 使命令从指定的文件中读取数据作为输入命令 <<结束标识字符串 : 在命令行读取数据作为输入,直到遇到指定的结束标识字符串
输出重定向具体命令用法:
>符号的用法,覆盖
>> 符号的用法,追加
注意:若命令echo输入错误,则会导致文件内容的丢失。例:
因此>覆盖也可以删除文件
将错误提示,输入到文件夹中:在>之前加数字2
[root@server q1]# ehco "xixihaha" 2> ni.txt
将正确和错误的信息都转储到文件中
[root@server q1]# echo "xixihaha" &> ni.txt
隐藏脚本执行的过度信息:
[root@server q1]# yum makecache > n1.txt缺点:n1.txt文件会越执行越大
因此优化 [root@server q1]# yum makecache > /dev/null 该命令为不显示也不储存
使脚本后台静默安装,安装过程不保存
合并文件:[root@server q1]# cat t1.txt t2.txt >t3.txt
输入重定向具体命令用法:
符号:< <<
将字符串test输入重定向到文件file中 [root@server q1]# echo test > file
"<<"表示输入的终止符用哪一种,一般在<<后直接加输入终止符
以看的形式给file3输入内容,当遇到end时输入终止
[root@server q1]# cat > file3 << end
以看的形式给t1.txt输入内容,当遇到aaa时输入终止
第二种输入法:[root@server q1]# cat > t5.txt
该输入发较难使用,最后结束要组合按键Ctrl + D 删除输入错的同行字母时要用组合按键
Ctrl + Backspace
以上命令都只能更改/删除同一行,不能更改/删除上一行
1.3 echo
1.3.1.作用
向终端设备上输出字符串或变量的存储数据(像屏幕终端输出)
1.3.2.格式
echo "字符串"
注意:单引号' $PATH'是原样输出"$PATH"含义是保留部分字符含义
echo $变量名($提取变量的值)
2.tee
2.1 作用
读取标准输入数据,将结果输出到文件中同时输出到屏幕上
2.2 格式
tee -参数 文件名
2.3 参数
-a:加数据,即--apped。
-i:忽略终端信号·
--help:帮助信息
用法:
[root@server ~]# tee test.txt用法与[root@server q1]# cat > t.testxt相似
3.管道符
3.1.作用
用于两个命令或多个命令相连接,将左侧命令的结果作为右侧命令的数据输入
3.2.格式
命令1 | 命令2 | 命令3 .....
使用:
查看passwd这个文件有多少行,
[root@server q1]# cat /etc/passwd | wc -l 将左侧查看的数据交给右侧来处理
过滤出 ip a 命令中的ip地址,即图中红框中的内容
grep 关键字 意义:按照右边的关键字对文本进行过滤
tr -s 替换
[root@server q1]# ip a | grep ens160 | grep inet | tr -s " " | cut -d " " -f3
4.vi/vim文本编辑器的使用
有于vi是vim的加强版因此在此处着重讲解Vim
4.1 vim三种编辑器模式
概念:
命令模式:也成为了阅读模式,可以控制光标移动,对文 本进行查看、删除、复制粘贴等操作(默认)
编辑模式:也称为插入模式,可以对文本进行编辑
末行模式:保存、退出、设置编辑环境
进入的顺序 刚打开文件后进入的为命令模式(默认)
命令模式点击'i'键进入输入模式,点击Esc返回命令模式
命令模式中点击冒号进入末行模式,点击Esc返回
输入模式与末行模式不可以相互进入
结构图:
4.2 命令模式的快捷键
4.2.1. 光标跳转按键
4.2.2. 复制、粘贴、删除
4.3 编辑模式的快捷键
可通过如下任意一种功能键从命令模式切换到编辑模式
按esc键可从编辑模式切换到 命令模式
4.4 末行模式的快捷键
按:或者 / 可从命令模式切换到末行模式
按Esc键可从末行模式切换到命令模式。
4.4.1. 查找关键字并替换
4.4.2 保存退出
4.4.3. 其他操作
4.5. vim的配置文件
[root@server ~]# vim /etc/vimrc # 输入以下 内容
set nu # 永久设置行号
4.6. vim的异常处理
当我们在Vim模式编辑代码时,vim异常终止,当我们重新打开时,会发现文本变成一下内容:
此时我们一直按”↓“ 直到出现一下文字,根据文字做出回应
然后会到下图所示界面:按提示点击Enter键 ,此时我们就会回到原来的界面。
但当我们按wq保存并退出后,我们再次进入时,还会有如上提示,
若我们想在看到如上提示,我们一个直接删除交换文件
也就是第一幅图显示的 .ps.swp 方法如下:
此时,当我们再次用Vim打开ps文件编辑时,就不会在弹出一开始的界面了
4.7.使用vim示例
使用vim编写c程序,实现编译运行
第一步:安装编译器:gcc
[root@server ~]# yum install gcc -y
第二步:编写c程序
[root@server ~]# vim test.c # 输入以下程序
#include <stdio.h>
int main(void)
{
int i,j;
for(i=1;i<10;i++)
printf("%d\t",i);
printf("\n");
for(i=1;i<66;i++)
printf("-");
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
if(i>=j)
printf("%d\t",i*j);
printf("\n");
}
}
第三步:编译c源文件
[root@server ~]# gcc test.c
第四步:查看结果
[root@server ~]# ./a.out
六: 文件内容显示
1.浏览普通文件
1.1. 文件内容查看
1.1.1. cat 命令
作用:查看文件内容,适合数据量较少
格式:cat -参数 文件名
参数:
-n:显示行号,加上
-b:文件中所有非空行增加行号,编号从1开始
例:
查看主机域名映射文件: [root@server ~]# cat /etc/hosts
127.0.0.1 为回环地址
::1 为IPV6格式
扩展:win10系统的本地的域名映射文件
查看硬盘分区表以及挂载信息: [root@server ~]# cat /etc/hosts
使用参数 -n:显示行号(所有行都加),(命令作用显示全局性,局部性警告信息)
[root@server ~]# cat -n /etc/sos/sos.conf
使用参数 -b:文件中所有非空行增加行号,编号从1开始
[root@server ~]# cat -b /etc/sos/sos.conf
通过cat来实现文件的拷贝:
[root@server ~]# cat /etc/fstab > /root/q1/f1.txt
[root@server ~]# cat /root/q1/f1.txt
通过cat来实现文件的追加:
[root@server ~]# cat /etc/passwd >> /root/q1/f1.txt
[root@server ~]# cat /root/q1/f1.txt
通过cat来合并文件
[root@server q1]# cat t1 t2 > t3
1.1.2 扩展tac命令:
[root@server q1]# tac r3 将文本内容倒置输出:
1.1.3. more 命令
作用:翻页查看文件内容,适合内容较多的文件查看
格式:more 文件名
注意:使用回车则一行一行查看,使用空格则整页查看,点击q键退出查看
[root@server q1]# more -sp /etc/passwd # -sp 减少空白行,先清屏后输出
[root@server q1]# more /var/log/messages 查看日志
1.1.4. less命令
作用:同more命令
格式:less 文件名
注意:可以使用上下键进行浏览,点击q退出浏览
1.1.5. head命令
作用: 查看文档前n行的内容
格式:head -数字 文件名
例:[root@server q1]# head /etc/passwd # 默认查看文档前10行内容
[root@server q1]# head -5 /etc/passwd
1.1.6. tail命令
作用:查看文档后n行内容
格式:tail -参数 文件名
参数
-数字:查看倒数行数
-f:动态刷新, 实时显示日志文件并且能动态更新
例: [root@server q1]# tail /etc/passwd # 默认查看文档后10行内容
查看一行内容 :
[root@server ~]# tail -f /var/log/messages # 监视日志
[root@server ~]# head -6 /etc/passwd | tail -1 # 查看/etc/passwd第6行
1.2. (stat file文)件属性信息查看
1.2.1. file 命令
作用:查看文件类型
格式:file -参数 文件名
文件类型: ASCII
file :ASCII 文本字符文件
empty:空文件
block special :块设备文件
character special :字符设备文件
diretory:目录
1.2.2. stat 命令
作用:显示文件属性信息
格式:stat 文件名
注意:一般通过该命令查看大小、Inode、硬链接、软连接
2.grep— 文件内容过滤显示
作用: 在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用
格式: grep -参数 查找条件 文件名
参数
例:
在passwd中检索包含root的行信息,并且带有行号
[root@server ~]# grep -n root /etc/passwd
在passwd检索不能登录的信息
[root@server ~]# grep -n /sbin/nologin /etc/passwd
# 在passwd中检索可以登录的账户信息
[root@server ~]# grep -nv "/sbin/nologin" /etc/passwd (反向)
# 检索包含“halt”的行及下3行信息
[root@server ~]# grep -nA3 "halt" /etc/passwd
# 检索包含“sshd”的行及上5行信息
[root@server ~]# grep -nB5 “sshd” /etc/passwd
# 检索包含“ftp”的行及上下2行
[root@server ~]# grep -nC2 “ftp” /etc/passwd
# 检索不能登录的账户个数
[root@server ~]# grep -c “/sbin/nologin” /etc/passwd
# 相当于 grep -n “/sbin/nologin” /etc/passwd | wc -l
# 检索包含大小写字母d的行信息
[root@server ~]# grep -ni "d" /etc/passwd
2.2. /etc/passwd文件含义
作用:
记录用户账户信息:共分为7段,使用冒号分割
含义:
文件内容意义:账户名:密码代号x:UID:GID:注释:家目录:SHELL
第7列/sbin/nologin:不允许登录
[root@server ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bashroot : x : 0 : 0 : root : /root : /bin/bash
账户名:密码代号x:UID:GID:注释:家目录:SHELL
密码代号x:密码加密后的代号
UID:账户ID
GID:工作组编号
SHELL:命令解释器。只要配有命令解释器/bin/bash就是可以登陆的账户
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 该解释器就是不可登陆的
[root@server ~]# tail -2 /etc/passwd
fox:x:1000:1000::/home/fox:/bin/bash::俩冒号中间没有任何内容代表,该普通账户没有任何注释。
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
使用特殊符号匹配
例:
定位行首以a开头的(^后还可以加完整单词)
[root@server ~]# grep -n "^a" /etc/passwd
检索以“.”结尾的行
[root@server ~]# grep -n "\.$" /etc/fstab "\.$" $必须加在右侧
"\" (转义符 ) :将右侧的字符,赋予新功能或者回复到原有功能
由于“.”具有特殊含义,因此需要转义字符进行转义
过滤所有空白行:
[root@server ~]# grep -n "^$" /etc/sos/sos.conf
检索含有数字的行
[root@server ~]# grep -n [0-9] /etc/passwd
(精确匹配)就此处含义为数字范围1-9
[root@server ~]# grep -nw [1-9] /etc/passwd
检索含有字母的行
[root@server ~]# grep -n [A-Z] /etc/passwd
[root@server ~]# grep -ni [A-Z] /etc/passwd
[root@server ~]# grep -n [a-zA-Z] /etc/passwd (此处含义为忽略大小写)
3. cut-切割显示(提取文本内容)
3.1. 作用:
cut命令用于按列提取文本内容
3.2. 格式 :
cut -d "分隔符" -f列数字 文件名
分隔符:分割的具体依据
3.3.
例:提取文件下的所有账户名
[root@server ~]# cut -d ":" -f1 /etc/passwd
例:提取IP地址
确定IP位置
[root@server ~]# ip a | grep ens160 | grep inet | cut -d "/" -f1 | cut -d " " -f6
# 注意空格
例:提取内核版本号:
[root@server ~]# uname -a | cut -d " " -f3
4. sort-排序显示
4.1. 作用
sort命令用于对文本内容进行排序显示
4.2. 格式:
sort -参数 文件名
4.3. 参数
5. uniq-去重显示
5.1. 作用
uniq命令用于去除文本中连续的重复行
5.2. 格式
uniq -参数 文件名
6. tr-文件中字符替换显示
6.1. 作用
tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出
6.2. 格式
tr -参数 替换内容 新内容
6.3. 参数
-c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换
-d :删除指令字符
-s :缩减连续重复的字符成指定的单个字符
6.4. 示例
小写字母全部转换成大写字母
[root@server ~]# cat /etc/passwd | tr a-z A-Z
七: 文件的其他操作命令
1. wc-文本内容统计
1.1. 作用
wc命令用于统计指定文本文件的行数、字数或字节数
1.2. 格式
wc -参数 文件名
1.3. 参数
1.4. 示例
统计所有
38 89 2136 /etc/passwd
行数· 单词数 字节数
配合管道符计算
显示文件数
2. (cp mv)复制、移动文件
2.1. cp 复制文件或目录
2.1.1. 格式
cp -参数 源文件 目标文件
2.1.2. 参数
2.2. mv 移动文件或目录
2.2.1. 作用
mv命令用于剪切或重命名文件
2.2.2. 格式
mv [选项] 源文件名称 目标文件名称
2.2.3. 注意
1.剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。
2.如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。
证明注意一:
[root@server q1]# ls f1.txt m1 r2 r3 t1 [root@server q1]# mv t1 /root/q1/m1/ [root@server q1]# ls f1.txt m1 r2 r3 [root@server q1]#
证明注意二:
[root@server q1]# cd m1 [root@server m1]# ls t1 [root@server m1]# mv t1 t5 [root@server m1]# ls t5 [root@server m1]#
3. 查找文件
3.1. 查找文件路径
3.1.1. whereis命令
作用:可以搜索系统命令的可执行文件路径和说明文档
格式:whereis 命令名
例:
3.1.2. which命令
作用:搜索系统命令的可执行文件
格式: which 命令名
例:
3.2. 查找文件-find
3.2.1. 作用
按照文件名、大小、时间、权限、类型、所属者、所属组 来搜索文件
3.2.2. 格式
find 查找路径 查找条件 具体条件 操作
3.2.3. 注意
1.find命令默认的操作是print输出
2.find是检索文件的,grep是过滤文件中字符串
3.2.4. 参数
示例:
1. 按照文件名搜索
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照 inode 号搜索
没有那个文件或目录:find命令在执行时,在内存中自己产生的临时文件,执行完既消失
注意:搜索位置越大,消耗系统资源越多,在生产服务器上搜索的时候,尽量不在根目录下搜索,把 搜索的范围尽量控制在最小
# /目录下检索名为passwd的文件
[root@server q1]# find / -name "passwd" -print
# /etc下检索host开头的文件
[root@server ~]# find /etc -name "host*" -print
#在/目录查找以a开头文件
[root@server ~]# find / -name "a*"
# 在/目录中查找以b开头的不区分大小写的文件
[root@server ~]# find / -iname "b*"
# 在/etc目录下检索以b开头共4个字符的文件
[root@server ~]# find /etc -name "b???"
# 在/etc目录下检索第二个字母为c的文件
[root@server ~]# find /etc -name "?c*"
# /目录下检索扩展名为.cfg的文件
[root@server ~]# find / -name "*.cfg"
# /目录下检索扩展名为.txt的文件并统计个数
[root@server ~]# find / -name "*.txt" | wc -l
2. 按照文件大小搜索
-size [+|-]大小: 按照指定大小搜索文件,“+”的意思是搜索比指定大小还要大的文件, “-”的意思是 搜索比指定大小还要小的文件
单位:可以通过man find 查看size参数的单位
# 默认单位,如果单位为b或不写单位,则按照512 Byte搜索。
' b':for 512-byte blocks(this is the default if no suffix is used)
#搜索单位是c,按照字节搜索。
'c':for bytes
#搜索单位是w,按照双字节(中文)搜索。'w':for two-byte words
#按照KB单位搜索,必须是小写的k。
'k':for Kilobytes(units of 1024 bytes)
#按照MB单位搜索,必须是大写的M
'M':for Megabytes(units of 1048576 bytes)
#按照GB单位搜索,必须是大写的G
' G':for Gigabytes(units of 1073741824 bytes)
[root@server ~]# find / -size -1k |wc -l
[root@server ~]# find / -size +100M |wc -l
[root@server ~]# find . -empty | wc -l # 空文件 | 个数
3. 按照修改时间搜索
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改 时间搜索
-newer file: 把比file修改时间更新的文件列出来
注意:时间范围问题
-5:代表 5 天内修改的文件。
5:代表前 5~6 天那一天修改的文件。
+5:代表 6 天前修改的文件。
[root@master ~]# find / -mtime -10 -empty 10天以内的空文件
4. 按照权限搜索
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件 ,常用
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
如果要在整个系统中搜索权限中包括SUID权限的所有文件,只需使用-4000即可:
[root@server ~]# find . perm 755
[root@server ~]# find / -perm -4000
5. 按照所有者和所属组搜索
-uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件
-gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找没有所有者的文件 ,常用,主要用于查找垃圾文件,还有一种情况就是外来文件,比如 光盘和U盘中的文件如果是由Windows复制来的(也就是文件是由windows建立的),在Linux中查 看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者(由其他系统打的源 码包)
[root@server ~]# find . -user root
[root@server ~]# find / -nouser # 查看无所有者的文件
6. 按照文件类型搜索
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
例:
[root@server ~]# find /dev -type b
[root@server ~]# find ~ -type d
[root@server ~]# find /dev -type c -size -10k
7.逻辑运算符
-a: and 逻辑与
-o: or 逻辑或
-not: not 逻辑非
优先级:与>或>非
[root@server ~]# find / -size +10k -a -size -50k | wc -l
[root@server ~]# find /etc -name "e*" -o -name "f*" | wc -l
[root@server ~]# find /etc -name "d*" -user root | wc -l # 默认为and
8. -exec参数
作用:
用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,类似于管道符,该参数必须 为带减号的长参数。
使用-exec命令结尾必须为\;
# 将/root 目录下的属于root账户的文件检索出来后拷贝到/目录下的find1目录中
[root@server ~]# find ~ -user root -exec cp -a {} /find1/ \;
4. 压缩和解压缩
4.1. zip和unzip命令
4.1.1. 格式:
zip FILE # 压缩 zip 压缩后名字.zip 压缩文件名
unzip FILE # 解压缩
例:
例1: 使用zip压缩文件test1.txt
[root@server test]# zip test1.zip test1.txt
# 压缩率为最高压缩test2.txt,
压缩率(-1~-9): -1 : 最快压缩,压缩率最差,-9 : 最大压缩,压缩率最佳
[root@server test]# zip -9 test2.zip test2.txt #
例2: 将当前目录dir1连同目录下文件一起压缩
[root@server test]# zip -r dir1.zip dir1
# 例3: 向压缩文件中test1.zip中添加test2. txt文件(添加文件test2.txt将不存在)
[root@server test]# zip -m test1.zip test2.txt
# 例4: 删除压缩文件中的文件
[root@server test]# zip -d test1.zip test2.txt
# 例5: 压缩文件时排除某个文件
[root@server test]# zip test.zip *.txt -x test1.txt(排除的文件名)
解压:
# 例6: 解压文件test2.zip
[root@server test]# unzip test2.zip
# 例7:将压缩文件text.zip在指定目录dir1下解压缩
[root@server test]# unzip test.zip -d dir1
# 例8: 查看压缩文件目录,但不解压
[root@server test]# unzip -v test.zip
4.2. gzip命令
# 例1: 使用gzip压缩文件
[root@server test]# gzip test1.txt
# 例2: 使用gzip压缩目录下文件
[root@server test]# gzip -r dir1
[root@server test]# ls dir1
#注意: 以上压缩之后原始文件就没有了。
# 例3: 压缩但保留原始文件
[root@server test]# gzip -c test2.txt > test2.txt.gz
4.3. bzip2命令
# bzip2是更新的Linux压缩工具,比gzip有着更高的压缩率。
[root@server test]# bzip2 test3.txt
# 源文档不保留
[root@server test]# bzip2 -9 -c test3.txt > test3.txt.bz2
# 用最佳的压缩比压缩,并保留 原本的档案
4.4. xz、unxz命令
# 例1:压缩文件
[root@server test]# xz test5.txt
# 例2:压缩dir1目录下文件
[root@server test]# xz dir1/*
[root@server test]# ls dir1
# 例3:查看压缩文件内容
[root@server test]# xzcat test5.txt.xz test1
# 例4:解压缩(xz -d等价于unxz)
[root@server test]# unxz test5.txt.xz
5. tar— 归档 命令
5.1. 格式
tar -参数 [args]……
5.2. 参数
5.2.1. 常用参数
5.2.2. 必选参数
5.2.3. 辅助参数
5.2.4. 额外参数
# 打包时排除某个文件 tar cf 文件名.
tar --exclude=路径/文件 路径
注:此处的路径前后需要保持保持一致,统一使用绝对路径或者相对路径
5.3.压缩 格式
作用:
创建(非压缩的)打包文件,将指定的一个或多个文件或目录备份生成为一个指定的包文件
命令格式: tar cvf/cfv/-cvf 文件名.tar 要打包的目录或文件名
命令含义: -c压缩 -v可视化 -f指定压缩的文件名
解压方式 : tar -xvf 文件名.tar.压缩方式
列出包文件中的文件列表
tar t[v]f 包文件名 `
5.3.2. 压缩
作用:
为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式
不同的压缩方式对应的命令格式:
tar czf/-czf 文件名.tar.gz 要打包压缩的目录或文件名……
tar cjf/-cjf 文件名.tar.bz2 要打包压缩的目录或文件名……
tar cJf/-cJf 文件名.tar.xz 要打包压缩的目录或文件名……
俩个扩展名.tar代表左边的文件为压缩文件
.gz/bz2/xz 都代表压缩的具体方式
-cvf 后可以使用多种压缩方式
解压缩
(提取包文件到指定目录)
tar xf/-xf/-xzf 文件名.tar.gz [-C 目标路径]
tar xf/-xf/-xjf 文件名.tar.bz2 [-C 目标路径]
tar xf/-xf/-xJf 文件名.tar.xz [-C 目标路径]
不同的压缩方式要用对应的解发
5.4. 示例
将/etc下所有内容打包压缩到/root目录中
[root@server ~]# tar -cvf taretc.tar.gz /etc
taretc.tar.bz2 /etc
taretc.tar.xz /etc
解压缩
[root@server ~]# mkdir temp 创建一个文件夹
[root@server ~]# mv taretc.tar.gz temp 将压缩包移动到temp
[root@server ~]# cd temp
[root@server temp]# tar -xvf taretc.tar.gz 使用对应方式解压
注意:参数中-c 与 -x 不能同时使用
八.命令解释器shell
1. 概述
1.1. 概念
shell:壳,命令解释器,负责解析用户输入的命令
硬件与内核直接还因有:驱动程序
驱动程序: 是内核操控硬件的桥梁
内核主要做五件事:cup进程管理,内存存储空间管理,网络管理,硬盘的存储空间管理,外设管理
1.2. 分类:
内置命令 (shell内置):shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都 差不多
外置命令:在文件系统的某个目录下,有个与命令名称相同的文件
1.3. type 命令
作用:
查看命令类型:是内置命令、外置命名、alias命令
格式:
type -参数 命令名
参数:
type -a 列出当前命令可以如何执行
type -t 仅列出命令按照哪种方式执行
例:
1.4.命令执行原理
系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中,使得shell知 道命令的可执行文件位置 PATH环境变量:当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文 件,如果有则执行该二进制文件,如果没有则提示命令找不到。
[root@server ~]# echo $PATH /root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
2. Linux 中的特殊符号
3. 命令别名
作用
别名:是命令的快捷方式,对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。
格式
alias 别名='原命令 - 参数'
3.1. 查看设置的别名
[root@server /]# alias
3.2. 常用的别名
untar='tar -zxvf '
由于 tar 命令的参数太多不好记忆,所以将解压缩设为如下:
alias untar='tar -zxvf '
wget='wget -c '(wget是下载文件的命令)
下载大文件时的断点续连,防止网络异常中断:
alias wget='wget -c '
getpass="openssl rand -base64 20"
生成 20 个字符的随机数密码,使用 openssl 命令,但命令又很长不方便,可以设置别名:
alias getpass="openssl rand -base64 20"
ping='ping -c 5'
ping url时会无限次输出,但其实没多大意义,可以使用 -c 命令将其限制为 5 次输出:
alias ping='ping -c 5'
speed(测试网速命令)
测试网速命令speedtest-cli ,为了方便使用可以设置别名:
下载pip: 安装: speedtest-cli是基于python编写的需要使用pip工具下载
[root@server ~]# pip install speedtest-cli (cli是客户端版)
此时代表pip安装成功:
查看手册:
利用help查看speedtest-cli命令所能使用的参数。
过滤中国地区的ISP列表:
[root@server ~]# speedtest-cli --list
--share分享,可以在网站查看生成的图片
[root@server ~]# speedtest-cli --server 5530 --share
复制http://www.speedtest.net/result/15341342242.png在浏览器中打开,就会获得你此时的网速情况。
简要查看网速情况:
[root@server ~]# speedtest-cli --server 5530 --simple
设置别名:需要更换id
[root@server ~]# alias speed="speedtest-cli --server 5530 --simple"
测试:
ipe:公网 IP别名设置
查看电脑主机的公网IP:[root@server ~]# curl ipinfo.io/ip
[root@server ~]# alias ipe="curl ipinfo.io/ip"
c 清屏
一般使用 ctrl + l 快捷键,也可以将 clear 命令定义得更短,这样使用起来更直接,更粗暴。
[root@server ~]# alias c="clear"
3.3. 删除别名
格式:unalias 别名
例:
[root@server ~]# unalias ping
3.6. 注意(alias永久化):
在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则 这些alias将无法使用。
在linux中提供alias永久化的方法:
将别名命令写入到~/.bashrc和/etc/bashrc文件中
执行 source ~/.bashrc 和 source ~/etc/bashrc 生效
将别名命令写入到~/.bashrc
[root@server ~]# vim /root/.bashrc
进如后输入在文本模式下输入: alias hello="'hello,evertone' > /file2"保存并退出
此时该别名还未生效,因此执行以下命令将其生效:
[root@server ~]# source /root/.bashrc
此时在root用户下该别名完成永久化!
若想要在全局使该别名完成永久化,则需要执行一下操作
将别名命令写入到/etc/bashrc
root@server ~]# vim /etc/bashrc
此时该别名还未生效,因此执行以下命令将其生效:
[root@server ~]# source /etc/bashrc
此时该别名完成全局永久化!
4. history 命令历史
4.1. 作用
history命令可以查阅命令历史记录
4.2. 格式
history -参数
4.3. 参数
number:显示最近number条命令历史
-c:清空当前历史命令
4.4. 设置history记录命令条数
[root@server ~]# vim /etc/profile
# 定位:HISTSIZE=1000
#退出后重启:reboot
例:
[root@server ~]# history 5 # 查看最近使用的5条命令。
13 vim ~/.bashrc
14 ping www.baidu.com
15 source ~/.bashrc
16 ping www.baidu.com
17 history 5
[root@server ~]# !16 # 将第16命令在执行一遍
九.账户和组管理
1. 账户和工作组的分类
1.1. 用户分为三类:
超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才 用超级用户登录,以避免系统出现安全问题。
系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立 的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录,用于进程访问。
普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。
1.2. 工作组分析两类:
基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。
1.3. 账户和工作组的配置文件
账户名、密码、工作组信息和工作组密码存储在以下配置文件中
1.3.1. 用户账号文件
/etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中 只定义用户账号,而不保存口令。
/etc/passwd 中的文件内容及含义:
root:x:0:0:root:/root:/bin/bash
账户名:密码(加密后的代号):账户编号(uid):工作组的编号 组id(jid):注释:家目录:账户在登陆时所用到的解释器名称(shell解释器)
/etc/passwd文件中字段说明:
由7个字段组成,字段之间用“:”分隔,意义:账号名:密码:UID:GID:个人资料:主目录:Shell
账号名:用户登录Linux系统时使用的名称。
密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位 符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
UID:账户的ID值,是一个数字标识,相当于账户的“身份证编号”,具有唯一性
root账户UID——0
系统账户的UID——1~999
普通账户的UID——≥1000
注意:普通账户从1000开始编号,连续编号,即使系统管理员某些账户号码未使用,普通账户 也不可使用
GID:基本组的ID值,用来区分不同的工作组,相同的组具有相同的GID。
个人资料:注释信息,可以记录账户的完整姓名、地址、办公室电话、家庭电话等个人信息。
家目录:类似Windows 的个人目录,通常是/home/账户名
Shell:定义用户登录后激活的Shell,默认是Bash Shell
id 命令
作用:查看账户的UID、GID等信息
格式: id 账户名
1.3.2. 用户密码文件
/etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
[root@server ~]# ll /etc/shadow
----------. 1 root root 1130 4月 26 14:39 /etc/shadow
[root@server ~]# head -1 /etc/shadow
root:$6$u6dOBCaz335byzFq$WcZK5t3EAHzCxy0AP8rscP/CrM/SZLzZZDCzkE2T6yiVpnSz92iWt/wd4j L9oBfFglbVrdhsUmRCVfWKTqNdv/::0:99999:7:::
/etc/shadow文件中的每行9个字段的含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1.3.3. 工作组账号文件
/etc/group文件存储每个组工作组信息
[root@server ~]# ll /etc/group
-rw-r--r--. 1 root root 810 4月 26 14:39 /etc/group
[root@server ~]# head -1 /etc/group
root:x:0:
字段说明:
2. 用户管理
2.1. 添加新用户
格式:
useradd -参数 账户名
参数:
-c 注释信息:设置相关的说明信息,如,:真实姓名、邮箱地址等。
-d:目录:设定账户的家目录(默认为/home/用户名)。
-e YYYY-MM-DD:设置用户的失效日期,此日期后将不能使用该账号。
-f 天数:指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即
禁用;若指定 为-1,则表示 账号过期后不被禁用(即密码永不过期)。
-g 组名或GID号:为账户指定所属的基本组,该组在指定时必须已存在。
-G:组名或GID号列表:为账户指定所属的扩展组,各组在指定时已存在,附加组可
以有多个,组之间用“,”分隔。
-M:不创建账户家目录。
-N:不创建与账户名同名的基本组。
-p:密码:指定账户的登录密码。
-s shell名:指定账户登录后使用的Shell,默认是bash。
-u 用户号:设置账号的UID,默认是已有账户的最大UID加1。如果同时有-o选项,则‘
可以重复使用其他用户的标 识号。
2.1.1例:
例1:新建账户test1,查看对应配置文件和家目录
给test设置一个密码,
例2:新建账户test2,指定UID为2001、登录Shell为/bin/bash,账号永不过期
[root@server ~]# useradd test2 -u 2001 -s /bin/bash -e -1
观察test1与test2 的密码文件区别。
例3:新建用于访问FTP的test3账户,禁止其登录且不创建家目录
[root@server ~]# useradd test3 -M -s /sbin/nologin
例4:新建账户test4,UID=3001, 工作组=test1 , 家目录=/test
[root@server ~]# useradd test4 -u 3001 -g test1 -d /test
2.2. 修改账户信息
格式:
usermod -参数 账户名
参数:
常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同
-l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用
-L:锁定(暂停)用户账户,使其不能登录使用
-U:解锁用户账户
例
例1:将用户test1的名称修改为TEST1,并暂停使用该账号
[root@server ~]# usermod test1 -l TEST1 -L
例2:将上例账户test4的家目录移至/home/test4目录下
[root@server ~]# mkdir /home/test4
[root@server ~]# usermod test4 -d /home/test4
2.3. 账号设置密码
原则:
Linux的账户必须设置密码后,才能登录系统
格式: passwd - 参数 账户名
参数:
-d:清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。
-e:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
-i:口令过期后多少天停用账户。
-l:锁定(停用)用户账户。
-n:指定口令的最短存活期。
-x:指定密码的最长使用期限。
-u:解锁用户账户。
例:
例1:设置root账户密码
[root@server ~]# passwd root
更改用户 root 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
例2:锁定账户test4,尝试登录
[root@server ~]# passwd -l test4
注意:
非交互式的为用户设置密码:
密码不能为空
密码不要写成回文
可以使用以下命令设置密码
echo 密码 | passwd --stdin 用户名
echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示(黑洞)
--stdin:从标准输入来接收
修改test4 的密码:
只有 root 用户才能指定用户名:
[root@server ~]# useradd test5
交互式的为test5 设置密码:
[root@server ~]# passwd test5
更改用户 test5 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# su test5
[test5@server root]$ passwd test5
passwd:只有 root 户才能指定用户名
非交互式的为test5 设置密码:
[root@server ~]# echo "123456" | passwd --stdin test5
2.4. 删除账号
格式
userdel 账户名
参数
-r:在删除该账户的同时,一并删除该账户对应的家目录
例:
例:删除上例的TEST1、test2、test3、test4
[root@server ~]# userdel -r TEST1
[root@server ~]# userdel -r test2
[root@server ~]# userdel -r test3
[root@server ~]# userdel -r test4
2.5 账户切换
格式: su 账户名
su - 账户名
2.5.1. su和su - 命令区别:
区别:加载的配置文件不一样
su 切换方式加载的文件: ~/.bashrc,/etc/bashrc(当前解释器shell配置文件)
su - 切换方式加载的文件: /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
注意:su - 相当于重新建立环境,若全局变量需要继续使用则不能使用su - 命令
2.5.2. 注意
从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的 密码且验证成功后才可切换。
2.6. 控制用户对系统命令的使用权限(sudo )
2.6.1. 作用
使用 sudo 命令可以提高普通用户的操作权限,使用前需要root进行配置(临时提权)
只有在管理员同意的情况下才可以进行临时提权
例:
2.6.2. sudo的执行流程如下:
当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限
若用户具有执行sudo的权限,便开始sudo后续接的命令;
2.6.3. 配置/etc/sudoers文件方式
执行visudo 或 vim /etc/sudoers
[root@server ~]# visudo
root ALL=(ALL) ALL
# 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表
(可以限定用户所执行的具体命令)
#说明:ALL是关键字,代表任何身份、主机或命令。
2.6.4. 管理员提权
进入文件:
[root@server ~]# vim /etc/sudoers
# 在命令模式输入“:100” 定位100行输入:
修改方法:在原有的命令下面经行补充,并强制保存退出。
图中fox已成为准管理员
# 需要wq!强制保存退出
[root@server ~]# su fox
[fox@server root]$ cd /root
bash: cd: /root: 权限不够
[fox@server root]$ sudo cd /root
[sudo] fox 的密码:
[fox@server root]$ pwd
/root
3. 工作组管理
3.1. 创建工作组
格式:
groupadd -参数 工作组名
参数:
-g GID:指定新工作组的GID,默认值是已有的最大的GID加1
-r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
3.1.3. 示例
例1:新建工作group1,group2
root@server ~]# groupadd group1
[root@server ~]# groupadd group2 -g 2001
[root@server ~]# tail -3 /etc/group
3.2. 修改工作组
格式:
groupmod -参数 工作组名
参数:
-g GID——为用户组指定新的组标识号
-n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
3.2.3. 示例
例:将组group1的GID修改为3000,组名修改为prod1
3.3. 添加/删除组成员
格式
gpasswd -参数 账户 工作组
参数 (注:该命令只有管理员可以使用)
-r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除。
-M : 可同时添加多个用户
-A : 给组指派管理员。
3.3.3. 示例
例:新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员
[root@server ~]# useradd temp1
[root@server ~]# useradd temp2
[root@server ~]# gpasswd -a temp1 group2
正在将用户“temp1”加入到“group2”组中
[root@server ~]# gpasswd -a temp2 group2
正在将用户“temp2”加入到“group2”组中
[root@server ~]# gpasswd -A temp1 group2
3.4. 删除工作组
注意:被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
格式
groupdel 工作组名
示例
例1:删除组prod1 [root@server ~]# groupdel prod1
4. 查看用户登录系统的情况
4.1. users命令
作用 :查看当前登录系统的用户
例:
4.2. last命令
作用: 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的 登入系统的用户名单全部显示出来
例:
4.3. lastlog命令
作用: 查看每个账号的最近登录时间,该命令会读取/var/log/lastlog文件
例:
4.4. w命令
作用 :显示登录到系统的用户信息
例:
结果分析:
第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、 5分钟、15分钟内系统负载情况)
第二行只是各个项目的说明
USER:表示登录系统的用户
TTY:表示用户使用的TTY名称
FROM:表示用户从哪里登录进来
LOGIN@:用户登录的日期和时间
idle:表示空闲时间
JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
PCPU:当前活动进程使用的系统时间
WHAT:表示当前用户执行的进程名称和选项
第三行以后,每行代表一个用户登录的信息。
4.5. who命令
作用: 显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息
例:
结果分析:
命令扩展:
[root@server ~]# who -b 列出系统最近启动的日期
system boot 2022-05-09 15:38
[root@server ~]# who -m 列出关于当前终端的信息
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am i
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am I
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -q 列出在本地系统上的用户和用户数的清单
root # users=1
[root@server ~]# who -r 显示当前系统的运行级别
run-level 3 2022-05-09 15:38
[root@server ~]# who -u 显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名
root pts/0 2022-05-09 15:38 . 1510 (192.168.168.1)
[root@nserver ~]# who -T 显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有 者可写,“?”表示遇到终端故障
root + pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -w 和-T一样
root + pts/0 2022-05-09 15:38 (192.168.168.1)
十. 账户权限
1. 文件的一般权限
1.1. 文件详细信息
1.2. 文件权限构成
1.2.1. 权限针对三类对象定义
owner 所有者(属主),缩写u
group 所属组,缩写g
other 其他人,缩写o
1.2.2. 访问者三种权限
1.2.3. 组成
1.2.4. 文件与目录权限含义
注意:root账户不受文件权限的读写限制,执行权限受限制
示例:
例1:写出下列文件的字符权限
764 : rwx rw- r--
642: rw- r-- -w
153: --x r-x -wx
731: rwx -wx --x
例2:写出下列文件的数字权限
r-x rw- r-- : 564
rw- -w- -wx : 623
rw- r-- r-- : 644 (默认创建的文件权限)
rwx r-x r-x: 755(默认创建的目录权限)
1.3. chmod命令
作用 chmod(change mode):修改文件或目录的权限
格式:
# 格式1
chmod [选项] [ugoa][+-=][rwx] 文件或目录...
# 格式2
chmod [选项] nnn 文件或目录...`
1.3.1. 参数
-R:递归修改指定目录下所有文件、子目录的权限
u g o a:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属 主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)
+ 或 - 或 =:表示设置权限的操作动作,+代表添加;-代表取消;=表示只赋予给定的权限,并取消原有的权限。
rwx:用字符形式表示的所设置的权限,可以是其中一个字母或组合
nnn:用数字表示的权限,例如755 644 等。
示例:
修改文件权限:灵活使用命令 u g o a,+ 或 - 或 =, rwx以及 nnn。
修改目录权限:灵活使用命令 -R
扩展:隐藏权限(chattr +a)
命令: [root@server ~]# chattr +a t4.txt
意义:含有不能删除的隐藏权限。使用该命令后将无法删除该文件。
日常工作中常用该方法保护文件,防止被分正常删除。
查看方法:[root@server ~]# lsattr t4.txt
取消方法:[root@server ~]# chattr -a t4.txt
1.4. chown命令
作用:修改文件或目录的所有者和属组(修改文件的归属对象)
格式:修改文件或目录的所属者
chown -参数 所有者 : 所属组 文件名或目录名
# 参数-R递归设置
示例:
例:将文件t1.txt所有者和属组修改为fox
[root@server ~]# chown fox:fox t1.txt
例:将目录m1下所有文件的所有者和属组修改为fox
[root@server ~]# chown -R fox:fox m1
2. 特殊权限
2.1. 概述
在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SU ID)、SET GID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制。
SUID 权限的含义:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程序文件 所属者的权限。
2.2. SUID权限
2.2.1. 使用场景
例如:student用户要更改自己的密码
student 在执行 passwd 修改自己的密码时, 其修改的密码, 最终是需要保存到 /etc/shadow 这个文件 中, 而这个文件的权限是 --------- ,它的拥有者是 root ,也只有 root 可以“ 强制” 存储, 其他用户连看都 不行
可偏偏 student 去执行 passwd (/usr/bin/passwd) ,却可以更新自己的密码
这就是因为有 s 权限的存在,当 s权限在拥有者的权限位上时, 即如 -rwsr-xr-x 这样时, 称为 SUID 。 SUID 即 Set UID , UID 指的是拥有者的的 ID, 而这个程序 (/usr/bin/passwd) 的拥有者为(root) 。
[root@server ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 32648 8月 10 2021 /usr/bin/passwd
注意:
suid仅对二进制文件有效
在执行过程中,调用者会暂时获得该文件的所有者权限
该权限只在程序执行的过程中有效
2.3. SGID 权限
SGID 可以用在两个方面:
文件: 如果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成 该程序文件的所属组。
目录:如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的 所属组
注意:
一般SGID 多用在特定的多人团队的项目开发上,在系统中用的很少
2.4. Sticky Bit权限
Sticky Bit (SBit) 当前只针对目录有效, 对文件没有效果。
其对目录的作用:
在 具 有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目录 时, 只有文件拥有者与 root 才有权力删除。
例如:当 student 用户属于 A 目录的组成员或属于 other ,且拥有 wx 权限时, 可以对该目录内任 何人建立的目录或文件进行“ 删除/重命名/移动” 等操作。 如果将 A 目录加上了 Sticky Bit 权限, 则 student用户只能针对自己建立的文件或目录进行“ 删除/重命名/移动” 等操作。
2.5. 设置特殊权限
为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模式 分别用于添加和移除SUID、GUID、sticky权限。
若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数字 表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
3. ACL 权限
作用:给指定的用户指定目录分配指定的权限。
3.2. ACL权限管理命令
3.2.1. 查看ACL权限
格式: getfacl 文件名
例: [root@server ~]# getfacl t1.txt # getfacl命令
3.2.2. 设定ACL权限
格式:setfacl -参数 文件名
参数:
-m:设定 ACL 权限
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
示例:
例:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和 lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x。
[root@server ~]# mkdir /project
[root@server ~]# useradd zhangsan
[root@server ~]# useradd lisi
[root@server ~]# groupadd QQgroup
[root@server ~]# gpasswd -M zhangsan,lisi QQgroup
[root@server ~]# chown root:QQgroup /project/
[root@server ~]# useradd pt
[root@server ~]# setfacl -m u:pt:r-x /project/
[root@server ~]# ll -d /project/
drwxr-xr-x+ 2 root QQgroup 6 10月 9 14:41 /project/
[root@server ~]# getfacl /project/、
此时,当我们在pt用户下时不具有写的权限。
3.3. 删除acl权限
# 删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
# 删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
# 删除文件的所有 ACL 权限
setfacl -b 文件名
4. 权限掩码umask
4.1. 新建文件权限与umask关系
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默 认权限与umask值有关
新建文件的默认权限=0666-umask值 (减去)
新建目录的默认权限=0777-umask值
4.2. 查看默认umask值
0666-umask值 (0022)=644
0777-umask值=755