Linux基础知识

目录

一、Centos安装

二、网络连接的三种模式

三、VM相关配置及安装vmtools文件

四、创建共享文件

五、目录结构

六、VIM编辑器

七、查看基本信息

八、用户与组管理

九、运行级别

十、找回root密码

十一、常用指令

十二、调整文件及目录权限

十三、定时任务调度

  1、crontab进行定时任务的设置

  2、at定时任务

十四、磁盘分区与挂载

  1、概念详解

  2、挂载案例

  3、磁盘情况查询

十五、网络配置

  1、NAT网络配置

  2、设置主机名和hosts映射

  3、主机名解析过程分析

十六、修改命令行终端样式

十七、进程管理

  1、基本介绍

  2、ps -aux

  3、ps -ef

  4、终止进程kill、killall

  5、查看进程树pstree

十八、服务管理

  1、service管理指令

  2、chkconfig指令

  3、systemcrl管理指令

  4、动态监控进程

  5、netstat查看网络情况

十九、rpm与yum软件安装

  1、rpm包相关

  2、yum源安装

二十、atime、mtime、ctime

------------------------------------------------------------------------------

一、Centos安装

下载地址:https://mirrors.aliyun.com/centos-vault/

swap为交换分区,一般和与运行内存等大即可

安装完成后需要将进行一些配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改网络信息
--修改
ONBOOT=yes
BOOTPROTO=static
--添加
IPADDR=192.168.80.128
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=114.114.114.114
删除------
UUID

systemctl restart network.service #重启网卡重新加载配置文件
nmcli c reload +网卡名   #centos8重启网卡重新加载配置文件


systemctl stop firewalld #(本次服务内关闭防火墙)
systemctl disable firewalld #(禁用防火墙服务),本次开机不生效

#去除软件安装限制
vi /etc/selinux/config
SELINUX=disabled   

centos8在学习环境下安装的时候软件选择需要勾选以下两个,如果是生产环境直接勾选最小安装即可

Centos8虚拟机有时候启动会出现连接不上的情况

如上图,发现ens33网卡没有相关配置信息

查看网卡状态发现ens33处于委托管状态

查看networking工作状态发现不可用,使用命令开启networking即可解决问题

nmcli networking                 #查看networking工作状态
nmcli networking on|off          #通过NetworkManager启用或禁用网络
nmcli connection reload ens33    #重启网卡
nmcli connection up ens33        #网卡启动命令
nmcli connection down ens33      #网卡停止命令
nmcli device status              #查看网卡状态

二、网络连接的三种模式

桥接模式(V0):虚拟系统可以和外部系统通讯,但容易造成IP冲突

NAT模式(V8):网络地址转换模式,虚拟系统可以和外界进行通讯,不造成IP冲突

仅主机模式(V1):仅主机模式的虚拟网络适配器仅对主机可见,并在虚拟机和主机系统之间提供网络连接。

相对于NAT模式而言,仅主机模式不具备NAT功能,因此在默认情况下,使用仅主机模式网络连接的虚拟机无法连接到Internet

三、VM相关配置及安装vmtools文件

1、设置开机启动VM并打开创建好的虚拟机

①找到需要开启的虚拟机路径,这里使用CentOS8.vmx做示范

  vm快捷方式--右键属性--目标--在其后添加CentOS8.vmx的文件地址并使用双引号标注,中间添加 -x ,添加完成之后应用保存实例:

"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\zrh\centos8.3\CentOS8.vmx"

将修改好的快捷方式拖入到windows开机启动项中:

本机开机启动项:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

 重启即可

2、设置关闭托盘显示

vm虚拟机---编辑---首选项

3、安装VM Tools

①点击”虚拟机“---安装vmare tools

②打开光盘,将tar文件解压

tar -zxvf VMwareTools-10.3.22-15902021.tar.gz

③执行安装程序

./vmware-install.pl -d

注意:安装VM Tools时需要系统安装gcc,执行命令gcc -v可以检验是否安装了gcc,如果没有则需要yum安装

4、VMware开机自动启动虚拟机后台运行

Vmware Workstation和Vbox都提供了GUI界面及命令的方式供用户管理虚拟机,通过命令方式可以做一些GUI界面不方便做的事,比如让创建的指定虚拟机随系统开机启动

命令工具在安装目录可以找到,Vmware Workstation为vmrun.exe,Vbox为VBoxManage.exe

Vmware Workstation启动指定虚拟机的命令为:
vmrun -T (ws|fusion|player) start "指定虚拟机vmx文件路径" [gui|nogui]
#例如:
vmrun -T ws start "D:\systemiso\centos8.vmx" nogui
#ws代表workstation,nogui代表无界面后台运行
VBox启动指定虚拟机的命令为:
vboxmanage startvm "虚拟机名称" [--type gui|sdl|headless|separate]
#无界面启动的话,添加--type headless参数,例如:
vboxmanage startvm "centos vbox" --type headless
如果命令工具(vmrun \ vboxmanage)不处于环境变量中,需要使用全路径才能随处运行,方便我们将其加入到开机启动项

第一种:策略组执行bat程序实现

① 新建文件 VmStart.bat

② 组策略编辑器

Win+R ----- gpedit.msc

用户配置 ----- Windows设置 ----- 脚本(登录|注销) 右边 ----- 名称下选择 “登录”

添加刚才编写好的VmStart.bat即可

第二种:命令创建一个快捷方式,将其放入启动文件夹

① 右键空白处选择 新建 ---- 快捷方式,将命令整个填入对象位置的输入框中

② 打开启动文件夹,将快捷方式放进去

四、创建共享文件

①虚拟机开启共享

②Linux下文件路径

/mnt/hgfs/

注意:此种方式只适合Linux与主机在同意终端上,实际生产环境中都是利用远程管理工具进行连接,比如Xshell、XFtp

五、目录结构

1) linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。

2)深刻理解 linux树状文件目录是非常重要的,记住一句经典的话:在Linux 世界里,一切皆文件

树状目录结构:

/bin:普通用户和管理员都可以执行的命令字

/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序,只有管理员才能执行(关机、重启等)

/boot:存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件

/dev:设备文件存放目录,类似于 windows的设备管理器,把所有的硬件用文件的形式存储

/etc:所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库时mysql的配置文件都在/etc下

/home:普通用户的家目录

/root:管理员的家目录

/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下

/mnt:临时设备挂载目录,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就查看相应的内容了

/proc:进程的所在目录,里面的数据都在内存中

/tmp:临时文件安装目录

/var:常变文件存放目录(日志文件、邮件文件等)

/lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DIL文件,几乎所有的应用程序都需要用到这些共享库

/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件

/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录

/proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息

/srv:service缩写,该目录存放一些服务启动之后需要提取的数据

/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs

/opt:这是给主机额外安装软件所存放的目录,如安装ORACLE 数据库就可放到该目录下,默认为空

/usr/local:这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序

/selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置

Linux系统中如何分辨文件类型

蓝色=目录、黑色=普通文件、浅蓝色=符号链接(快捷方式)、红色=压缩包

黑底黄字=设备文件 硬盘 sda、黑底红字=警告故障文件、绿色=带有执行权限的文件、紫色=图片 模块文件

六、VIM编辑器

vim filename #正常打开
vim +8 filename  #打开文件,并将光标置于第8行
vim + filename   #打开文件,将光标置于最后一行
vim +/word filename  #打开指定搜索单词的位置,按n查找下一个,按N查找上一个

命令模式到输入模式按键解析

i:在当前位置插入数据
a:追加数据
o:在当前行后面开启一个新的输入行
I:行首
A:行尾
O:上一行

底线命令模式

:wq    #保存并退出
:q!      #不保存直接退出
:set nu    #显示行号
:set nonu     #取消显示行号
:50,60 d     #删除50-56行的数据
:w [filename]    #将编辑的数据储存成另一个档案(类似另存新档)
:s/old/new/g   #替换字符串,g表示替换当前行所有 否则只替换当前行第一个
:3,8s/old/new/g   #查找指定行
:g/old/s//new/g   #替换全文
/pattern  #搜索指定的字符串,并将结果高亮显示
:noh  #取消字符串高亮显示

命令模式

yy      #复制游标所在的那一行
nyy     #复制光标所在的向下 n 行
p       #粘贴到当前行下
dd      #删除当前行
ndd     #删除光标所在的向下 n 行
gg      #回到第一行
G       #到最后一行
nG      #快速跳转至第n行
p, P    #p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行
Ctrl+f    #屏幕『向下』移动一页,相当于 [Page Down]按键 
Ctrl+b    #屏幕『向上』移动一页,相当于 [Page Up] 按键
0 或功能键[Home]    #移动到这一行的最前面字符处
$ 或功能键[End]     #移动到这一行的最后面字符处
/word     #向光标之下寻找一个名称为 word 的字符串
?word     #向光标之上寻找一个字符串名称为 word 的字符串
u         #撤销上一次操作
Ctrl+r    #重做上一个动作
.         #重复前一个动作的意思

七、查看基本信息

查看内存信息:cat/proc/meminfo

查看cpu信息:cat/proc/cpuinfo

重启与关机

shutdown -h now    #立该进行关机
shudown -h 1         #"hello,1分钟后会关机了”
shutdown -r now    #现在重新启动计算机
halt       #关机,作用和上面一样.
reboot   #现在重新启动计算机
sync      #把内存的数据同步到磁盘

不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中,虽然目前的shutdown/reboot/halt等命令均已经在关机前进行了sync,但还是小心驶得万年船

登录与注销

登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。

可以利用普通用户登录,登录后再用“su - 用户名”命令来切换成系统管理员身份.

在提示符下输入 logout 即可注销用户

logout注销指令在图形运行级别无效,在运行级别3下有效

返回上一级目录:cd ..

列出当前所在目录路径:pwd

列出当前目录中的内容:ls

/ = 操作系统的起始路径,即根路径

查看硬盘信息:fdisk -l

/dev/sda 操作系统中第一块硬盘的名称以及所在路径,sd=硬盘类型,a=第一块,同理第二块/dev/sdb

Linux操作系统中一切皆文件

[root@HK9527 Desktop]# 执行的命令
[当前登录用户名称@主机名称 当前所在路径]#

#:用户身份为超级管理员

$:用户身份为普通用户

八、用户与组管理

组和用户的关系

1、用户必须有一个基本组,如果该组中有基本成员,该组不允许被删除

2、一个用户可以有多个附加组,如果附加组没有基本成员,该组可以被删除

3、建立一个用户时,如果没有指定组,则会建立一个与用户名同名的组

useradd
-u      #指定 uid号
-g      #指定 基本组
-G      #指定 附加组
-s      #指定用户登录的命令解释器
    -s /sbin/nologin  #不允许登录
    -s /bin/bash   #允许登录
-M      #无家目录
useradd -d /tmp/hpome test   #给新创建的用户test指定家目录
usermod(用户修改命令,选项同上)

userdel -r   #删除用户的家目录
userdel      #删除用户,但不删除家目录

passwd  用户名  #给用户名设定密码
    -S               #查看用户密码状态
    -l                #锁定用户
    -u               #解锁用户密码
    -d               #删除用户密码

chage -M 90 用户名   #修改用户密码的最长有效期

查询用户信息指令

id 用户名  #例如:id root

切换用户指令

su - 用户名   #例如:su - root

从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。

当需要返回到原来用户时,使用exit/logout指令

查看当前用户/登录用户

<<root@HK9527 ~>># who am i
#root
<<root@HK9527 ~>># su - zrh
[zrh@HK9527 ~]$ who am i
#root
[zrh@HK9527 ~]$ whoami
#zrh
[zrh@HK9527 ~]$ exit
#登出
<<root@HK9527 ~>># whoami
#root

who am i 为查询第一次登录到Linux服务器的用户名

whoami 为查询当前用户名

组命令

groupadd 组名  #创建组
groupadd -g  1005  组名   #指定gid号创建组
groupmod(组修改命令,选项同上)
groupdel      #删除组
groupmod -n old new    #修改组名字
groups [username]   #查看用户所在组

案例演示

#创建一个组指定gid为1200名称为mojiao的组,新建用户zwj并将其放入到mojiao组里
groupadd -g 1200 mojiao
useradd -g mojiao zwj

#修改zwj的组为test组
usermod -g test zwj

/etc/passwd 保存了系统中所有用户的信息

uid用户的身份标识0为超级管理员、500-60000普通用户、1-499 程序用户(不能登录系统)

vim /etc/passwd
root:x:0:0:root:/root:/bin/bash

字段1:用户名

字段2:密码占位符

字段3:uid号

字段4:用户的基本组id号

字段5:用户信息记录位置(废弃)

字段6:用户的家目录

字段7:用户登录系统后用什么命令解释器

/etc/shadow 记录系统中用户的密码信息

root : $6$Ex0t5kJ3IesoOavmq9ANH.rsg5OAsox32NpN.WaV0GeKXNSkbP/QN3z1 : : 0 : 99999 : 7 : : : 

字段1:用户名

字段2:通过sha-512以及salt值加密后的密文

字段3:距离1970年1月1日密码最近一次的修改时间

字段4:密码的最短有效期

字段5:密码的最长有效期(一般建议90天)

字段6:密码过期前7天警告

字段7:密码的不活跃期

字段8:密码距离1970年1月1日的失效时间

/etclgroup文件组(group)的配置文件,记录Linux包含的组的信息

mojiao:x:1200:

字段1:组名

字段2:口令

字段3:组标识号

字段4:组内用户列表

九、运行级别

运行级别说明:

0 :关机

1 :单用户【找回丢失密码】

2:多用户状态没有网络服务

3:多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统重启

常用运行级别是3和5,也可以指定默认运行级别

命令: init [0123456]

通过init 来切换不同的运行级别

init 0   #关机
init 6   #重启

指定默认运行级别

在centos7以前,在 /etc/inittab文件中进行修改

在centos7以后进行了如下简化:

multi-user.target = init 3

graphical.target = init 5

systemctl get-default   #查看默认运行级别
systemctl set-default graphical.target   #设置默认运行级别

十、找回root密码

①启动系统,进入开机界面,在界面中按“e”进入编辑界面

②使用键盘上的上下键把光标往下移动,找到以““Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh

③输入完成后,直接按快捷键:ctrl+x 进入单用户模式

④在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键

⑤在新的一行输入:passwd, 完成后按键盘的回车键,输入密码,然后再次确认密码

⑥在新的一行输入:touch /.autorelabel(注意:touch与 /后面有一个空格),完成后按键盘的回车键

⑦在新的一行输入:exec /sbin/init(注意:exec与 /后面有一个空格),完成后按键盘的回车键

init=/bin/sh
mount -o remount,rw /
passwd
touch /.autorelabel
exec /sbin/init

十一、常用指令

Linux命令是区分大小写的

-bash: abcd: command not found    #命令敲错了或者命令未安装

命令的参数如果是单词一般加“-”,如果是字母或者缩写一般加“--”

pwd   #显示当前工作目录的绝对路径
ls [选项] [目录或是文件]
常用选项
-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息
-h:以人类可以看懂的方式显示文件大小
-R:递归显示目录中子目录的内容
du -sh 目录  #查看目录的大小
cd [参数]    #功能描述:切换到指定目录
cd       #回到自己的家目录
cd ..    #回到当前目录的上一级目录
mkdir    #指令用于创建目录
基本语法: mkdir [选项] 要创建的目录
常用选项
-p:创建多级目录应用实例
案例1:创建一个目录 /home/dog
#mkdir /home/dog
案例2:创建多级目录/home/animal/tiger
#mkdir -p /home/animal/tiger
案例3:一次性创建多个子目录
#mkdir -p case/{a,b,c}/init
这种写法case文件夹下有a、b、c三个文件夹,这三个文件夹里都有init这个子文件夹
rmdir [选项] #删除空目录
rmdir删除的是空目录,如果目录下有内容时无法删除的
touch    #创建空文件
基本语法:touch 文件名称
cp    #拷贝文件到指定目录
基本语法
cp [选项] 
常用选项
-r :递归复制整个文件夹>应用实例
案例1:将/home/hello.txt拷贝到/home/bbb目录下
#cp hello.txt /home/bbb
案例2:递归复制整个文件夹,比如将/home/bbb 整个目录,拷贝到/opt
#cp -r /home/bbb /opt
案例3:强制覆盖不提示的方法
#\cp -r /home/bbb /opt
rm    #移除文件或目录
rm [选项] 删除的文件或目录
常用选项
-r:递归删除整个文件夹
-f:强制删除不提示
应用实例
案例1:将/home/hello.txt删除
#rm /home/hello.txt
案例2:递归删除整个文件夹/home/bbb
#rm -rf /home/bbb
mv    #移动文件与目录或重命名
基本语法
mv oldNameFile newNameFile       #功能描述:重命名
mv /temp/movefile /targetFolder   #功能描述:移动文件
应用实例
案例1:将/home/cat.txt文件重新命名为pig.txt案例
#mv /home/cat.txt /home/pig.txt
2:将/home/pig.txt文件移动到/root目录下
#mv /home/pig.txt /root/
案例3:移动整个目录,比如将/opt/bbb移动到/home下
#mv /opt/bbb /home/
cat    #查看文件内容
cat [选项] 要查看的文件
常用选项
-n :显示行号
应用实例
案例1:/etc/profile文件内容,并显示行号
#cat -n /etc/profile
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令"| more"
#cat -n/etc/profile | more
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键(交互的指令),详见操作说明
基本语法:more 要查看的文件
操作功能说明
空格键:向下翻一页
Enter:向下翻一行
q:代表立刻离开more,不再显示该文件内容
ctrl+F:向下滚动一屏
ctrl+B:返回上一屏
=:输出当前行的行号
:f 输出文件名和当前行的行号
less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比 more指令更加强大,支持各种显示终端。
less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
基本语法:less 要查看的文件
操作功能说明
空格键:向下翻动一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
/字符串:向下搜寻"字符串"的功能(n:向下查找;N:向上查找)
q:离开less程序
echo 输出内容到控制台
基本语法
echo [选项] [输出内容]
应用实例
案例:使用echo 指令输出环境变量,比如输出$PATH $HOSTNAME,
#echo $HOSTNAME
head    #用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法
head 文件   #功能描述:查看文件头10行内容
head -5 文件    #功能描述:查看文件头5行内容,5可以是任意行数
应用案例:查看/etc/profile的前面5行代码
#head -5 /etc/profile
tail    #用于输出文件中尾部的内容,默认情况下tail 指令显示文件的前10行内容
基本语法
1) tail 文件    #功能描述:查看文件尾10行内容
2) tail -5 文件    #功能描述:查看文件尾5行内容,5可以是任意行数
3) tail -f 文件    #功能描述:实时追踪该文档的所有更新
应用实例
案例1:查看/etc/profile 最后5行的代码
#tail -5 /etc/profile
案例2:实时监控 mydate.txt,看看到文件有变化时,是否看到实时的追加hello,world
#tail -f /home/mydate.txt
>输出重定向   >>追加
基本语法
1) ls -l > 文件    #功能描述:列表的内容写入文件中(覆盖写)
2) ls -al >>文件   #功能描述:列表的内容追加到文件末尾
3) cat 文件1 > 文件2    #功能描述:将文件1的内容覆盖到文件2
4) echo "内容" >> 文件    #追加
应用实例
案例1:将/home目录下的文件列表写入到/home/info.txt中,覆盖写入
#ls -l /home > /home/info.txt[如果info.txt没有,则会创建]
案例⒉:将当前日历信息追加到/home/mycal文件中
#cal >> /home/mycal
history     #查看已经执行过历史命令,也可以执行历史指令
基本语法
history    #功能描述:查看已经执行过历史命令
应用实例
案例1:显示所有的历史命令
#history
案例2:显示最近使用过的10个指令
#history 10
案例3:执行历史编号为5的指令
#!5
find    #指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
基本语法:
find [搜索范围] [选项]
选项说明
-name:按照指定的文件名查找文件
-user:查找属于指定用户名所有文件
-size:按照指定文件大小查找文件
-atime:在过去n天内被读取过的文件
-ctime:在过去n天内被修改过的文件
-cmin:在过去n分钟内修改过的文件 应用实例 案例1:根据名称查找
/home目录下的hello.txt 文件 #find /home -name hello.txt 案例2:查找/opt目录下,用户名称为nobody 的文件 #find /opt -user nobody 案例3:查找整个linux系统下大于200M的文件(+n大于、-n小于、n等于,单位有k,M,G) #find / -size +200M
案例4:查找整个linux系统下在过去10天内被读取过的文件
#find / -atime -10
exec参数说明
-exec参数后面跟的是command命令,他的终止是以;为结束标志的,考虑到各个系统中;的不同含义,所以前面加反斜杠
{}代表前面find查找出来的结果  
案例5:查找当前目录下名字包含tar.gz且10天前修改过的文件,并将其删除
#find . -name "*tar.gz" -ctime +10 -exec rm -rf {} \;
#-ctime +10 表示10天之前(不含10天之前的当天)修改过的文件
#-ctime -10 表示10天之内(含10天之前的当天)修改过的文件
#-ctime 10 表示10天之前的当天之内修改过的文件
locate    #可以快速定位文件路径
locate指令利用事先建立的系统中所有文件名称及路径的 locate数据库实现快速定位给定的文件。
Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻
基本语法:
locate 搜索文件
特别说明:由于locate 指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
应用实例
案例1:请使用locate指令快速定位hello.txt文件所在目录
#updatedb
#locate hello.txt
which    #可以查看某个指令在哪个目录下
比如ls指令在哪个目录
#which Is
grep指令和管道符号│
grep过滤查找,管道符,"|",表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法
grep [选项] 查找内容 源文件
选项说明
-n:显示匹配行及行号
-i:忽略字母大小写
应用实例
案例:请在hello.txt 文件中,查找"yes”所在行,并且显示行号
#写法1: cat /home/hello.txt | grep "yes"
#写法2: grep -n "yes" /home/hello.txt
gzip、gunzip   #gzip 用于压缩文件,gunzip用于解压
基本语法
gzip 文件    #功能描述:压缩文件,只能将文件压缩为*.gz文件
gunzip filename.gz    #功能描述:解压缩.gz结尾的文件
应用实例
案例1: gzip压缩,将/home下的hello.txt文件进行压缩
#gzip /home/hello.txt
案例2: gunzip压缩,将/home下的hello.txt.gz文件进行解压缩
#gunzip /home/hello.txt.gz

zip、unzip #zip用于压缩文件,unzip用于解压的,这个在项目打包发布中很有用的 基本语法 zip [选项] XXX.zip 将要压缩的文件内容 #功能描述:压缩文件和目录的命令unzip [选项] XXX.zip #功能描述:解压缩文件 zip常用选项 -r:递归压缩,即压缩目录 unzip的常用选项 -d <目录>:指定解压后文件的存放目录 应用实例 案例1:将/home下的所有文件/文件夹进行压缩成myhome.zip zip -r myhome.zip /home #将home目录及其包含的文件和子文件夹都压缩 案例2:将myhome.zip解压到/opt/tmp目录下 mkdir /opt/tmp unzip -d /opt/tmp /home/myhome.zip
bzip2 文件名称
#压缩文件 bunzip2 压缩包 # 解压缩 -j = bzip2 tar -jcf /tmp/allfile.tar.bz2 /tmp/allfile tar -jxf /tmp/allfile.tar.bz2 -C /root
tar
#打包指令,最后打包后的文件是.tar.gz 的文件 基本语法 tar [选项] XXX.tar.gz 要打包的文件内容 #功能描述:打包目录,压缩后的文件格式.tar.gz 选项说明 -c:产生.tar打包文件 -C:指定解压路径 -v:显示详细信息 -f:指定压缩后的文件名 -z:打包同时压缩 -x:解包.tar文件 应用实例 案例1:压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz #tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt 案例2:将/home的文件夹压缩成myhome.tar.gz #tar -zcvf myhome.tar.gz /home/ 案例3:将pc.tar.gz解压到当前目录 #tar -zxvf pc.tar.gz 案例4.将myhome.tar.gz解压到 /opt/tmp目录下 #①mkdir /opt/tmp #②tar -zxvf /home/myhome.tar.gz -C /opt/tmp
date    #显示当前日期
基本语法
1) date    #功能描述:显示当前时间
2) date +%Y    #功能描述:显示当前年份
3) date +%m    #功能描述:显示当前月份
4) date+%d      #功能描述:显示当前是哪一天
5) date "+%Y-%m-%d %H:%M:%S"    #功能描述:显示年月日时分秒。这里加引号是因为有空格,如果是+%Y-%M-%D_%H:%M:%S就不需要加引号
应用实例
案例1:显示当前时间信息
#date
案例2:显示当前时间年月日
#date "+%Y-%m-%d"
案例3:显示当前时间年月日时分秒
#date "+%Y-%m-%d %H:%M:%S"

date -s 字符串时间    #设置日期时间
案例1:设置系统当前时间,比如设置成2020-11-03 20:02:10
#date -s "2020-11-03 20:02:10"
自动同步时间
yum install ntp -y
ntpdate cn.ntp.org.cn

本地搭建NTP服务
service ntpd start  #开启本地NTP服务器
ntpdate 192.168.188.100    #客户端同步本地NTP服务器时间
cal    #查看日历指令
基本语法
cal [选项]    #功能描述:不加选项,显示本月日历
应用实例
案例1:显示当前日历
#cal
案例2:显示2020年日历
#cal 2020
cut     #用指定的规则来切分文本,cut的分隔符必须是单个字符
cut -d":" -f1,2,3,4 /etc/passwd  #以:切分文件,并显示每行的前4列
sort    #排序
sort lucky    #对文本中的行进行排序
sort -t' ' -k2 lucky       #对每一行的数据按照' '进行切分,按照第二列进行排序
sort -t' ' -k2 -r lucky    #逆序
sort -t' ' -k2 -n lucky    #按照数值大小进行排序,如果有字母,字母在前
sort -t' ' -k2 -nr lucky #nr往往同时使用
wc    #统计单词的数量
<<root@HK9527 ~>># wc /etc/passwd
  44   90 2301 /etc/passwd
#表示44行,90个单词(单词以空格划分),2301个字符
-l:line
-w:word(以空格来分割单词)
-c:char
stat    #用于显示 inode 内容
stat /etc/passwd    #查看 /etc/passwd 文件的inode内容
查看文件的状态
Inode #当前文件在文件系统的唯一标识,类似于ID
access #访问时间
modify #修改文件内容时间
change #修改文件元数据信息时间

软链接是指向文件的,硬链接是为了保护文件的

软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径,软连接和原始文件不是同一个文件
基本语法
ln -s [原文件或目录] [软链接名]    #功能描述:给原文件创建一个软链接
应用实例
案例1:在/home目录下创建一个软连接myroot,连接到/root目录
#ln -s /root /home/myroot
案例2:删除软连接myroot 
rm -f /home/myroof
细节说明:当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。

硬链接
ln [原文件或目录] [硬链接名]
硬链接和原始文件使用文件系统中的同一个文件 如果你害怕一个文件被别人误删,你可以使用硬链接保护这个文件 软硬链接在链接文件的时候,推荐使用文件的绝对路径,否则有可能会出现问题

linux与linux之间互传文件
scp 源数据地址(source) 目标数据地址(target)
scp apache-tomcat-7.0.61.tar.gz root@192.168.31.44:/opt    #传文件
scp root@192.168.31.44:/opt/apache-tomcat-7.0.61.tar.gz ./  #拿文件
scp -r apache-tomcat-7.0.61 root@192.168.31.44:/opt   #传文件夹
uniq -c case.txt   #在行首显示出现的次数(统计次数),在统计之前需要sort一下

我们可以发现“I”在上图中出现了两次,且数字都为1,这显然不对,所以在统计次数的时候,需要先sort一下再统计,这样才不会出错。

awk -F " " '{print $5}'    #表示用awk进行分割,分割依据为空格,然后输出分割后的第5行
awk -F '[ ,]+' '{print $5}'    #表示用awk进行分割,先用空格分隔,再用“,”分隔,打印第五行
print $0表示全部打印

十二、调整文件及目录权限

权限:文件或目录属于谁,属于哪个组,不同的用户能对该文件进行何种操作。

文件与目录查看权限

文件:ls -lah

目录:ls -ld

字段1:表示文件的类型 d 目录 、- 文件、 l 符号链接、 c 字符型设备比如鼠标键盘、 b block块设备比如硬盘

字段2:文件所属者的权限

如果一个用户对该目录只有x权限,那么此用户是可以进入这个目录,但不能查看目录的内容。

如果该用户对目录下的某个文件具有rw权限,那么即使看不了该目录下的文件,此用户还是可以修改具有rw权限的文件。

字段3:文件所属组的权限

文件所属组内成员对该文件具有的权限

字段4:其他用户的权限(既不是文件的所属者,也不在文件的所属组中)

字段4后面的数字如果是文件的话就表示硬连接数,如果是目录的话就表示子目录数

修改文件权限属性

chmod 对象 运算符号 权限 文件或者目录
对象:
u(user所属者)
g(goup所属组) 
o(other其他) 
a(all所有)
运算符号:
+ 赋权
- 撤权
= 指定权限
例如:
chmod a=--- 目录
chmod g+r 目录
chmod o=rx 目录

改变文件的所属者/所属组

chown 用户 文件
chgrp 组 文件

八进制赋权法

r=4、w=2、x=1

rwxr-xr-x   =   755

rw-r--r--   =   644

chmod 644 test.txt

三种特殊权限

1、t 粘滞位

只对目录有效,在目录中建立的文件只有文件的所属者可以删除。

#方法1
chmod 777 /tmp/test
chmod o+t /tmp/test
#方法2
chmod 1777 /tmp/test

2、sgid

只对目录有效,在目录中建立的文件或者目录的所属组会继承父目录的所属组

#方法1
chmod 777 /tmp/test
chmod g+s /tmp/test
#方法2
chmod 2777 /tmp/test

3、suid

只对可执行文件有效,当一个可执行文件具有suid权限,无论谁运行该文件,谁就具有该文件所属者的权限

which vim    #查找vim路径
chmod u+s /usr/bin/vim      #方法1
chmod 4755 /usr/bin/vim     #方法2
chmod u-s /usr/bin/vim      #取消suid方法
实验:赋权后可以利用普通用户打开shadow文件,删掉其他用户的密码
find /usr/bin -perm 4755    #针对权限进行查询/usr/bin目录中所有具有suid权限的命令

不可变属性

将passwd和shadow文件设置为不可变属性,那么就无法创建新用户,因为往文件里添加不了内容

chattr +i /etc/passwd /etc/shadow  #添加不可变属性
lsattr /etc/passwd /etc/shadow     #查看文件属性
chattr -i /etc/passwd /etc/shadow  #去除不可变属性

umask

目录的最高权限0777(前面的0表示三种特殊权限,默认都为0)

文件的最高权限666(并不是每个文件都具备执行属性,所以默认不给X属性,所以为666)

普通用户的umask默认为0002、root用户umask默认为0022

普通用户创建目录/文件的默认权限为:777-002=775/666-002=664

root用户创建目录/文件的默认权限为:777-022=755/666-022=644

所以要根据公司需要去修改相应的umask值

vim /etc/profile
vim /etc/bashrc

修改用户密码最长有效期(进入文件后第25行)

vim /etc/login.defs

十三、定时任务调度

1、crontab进行定时任务的设置

任务调度:是指系统在某个时间执行的特定的命令或程序。

任务调度分类:

系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等

个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

基本语法
crontab [选项]
常用选项
-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有的crontab任务
service crond restart    #重启任务调度

crontab -e之后输入

*/1 * * * * ls -l /etc/ > /tmp/case.txt

参数细节说明

#5个占位符的说明项目
第一个*:一小时当中的第几分钟,0-59
第二个*:一天当中的第几小时,0-23
第三个*:一个月当中的第几天,1-31
第四个*:一年当中的第几月,1-12
第五个*:,一周当中的星期几,0-7(0和7都代表星期日)
#特殊符号的说明
*:代表任何时间,比如第一个"*"就代表一小时中每分钟都执行一次的意思
,:代表不连续的时间,比如"0 8,12,16 * * * ",就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-:代表连续的时间范围,比如"0 5 * * 1-6",代表在周一到周六的凌晨5点0分执行命令
*/n:代表每隔多久执行一次,比如"*/10 * * * * ",代表每隔10分钟就执行一遍命令

时间执行案例

#应用实例
案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中
*/1 * * * * date >> /tmp/mydate
案例2:每隔1分钟,将当前日期和日历都追加到/home/mycal 文件中
步骤:
①vim /home/my.sh 写入内容
date >> home/mycal
cal >> /home/mycal
②给my.sh增加执行权限
chmod u+x /home/my.sh
③crontab -e增加 */1 * * * * /home/my.sh
案例3:每天凌晨2:00将mysql数据库testdb ,备份到文件中。
提示:指令为mysqldump -u root -p密码 数据库>home/db.bak
步骤①crontab -e
步骤② 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak

2、at定时任务

①at命令是一次性定时计划任务,at 的守护进程atd会以后台模式检查作业队列来运行

②默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业

③at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了

④在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看

ps -ef l grep atd    #可以检测atd是否在运行
#at命令格式
at [选项] [时间]
输出两次Ctrl+D结束at命令的输入

at指定时间的方法

(1)接受在当天的hh:mm(小时:分钟)式的时间指定。

假如该时间已过去,那么就放在第二天执行。例如:04:00

(2)使用midnight((深夜),noon (中午),teatime〈饮茶时间,一般是下午4点)等比较模糊的词语来指定时间

(3)采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm

(4)指定命令执行的具体日期,指定格式为 month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 03//01/2021

(5)使用相对计时法,指定格式为: now + count time-units,now就是当前时间,time-units 是时间单位,这里能够是minutes(分钟) 、hous(小时)、days (天)、weeks (星期)

count是时间的数量,几天,几小时。例如: now + 5 minutes

(6)直接使用 today(今天)、tomorrow(明天〉来指定完成命令的时间

atq    #查看系统中没有执行的工作任务
atrm 编号    #删除已经设置的定时任务 
#案例1:2天后的下午5点执行bin/ls /home
<<root@HK9527 ~>># at 5pm + 2 days
at> /bin/ls /home<EOT>
job 3 at Mon Oct 25 17:00:00 2021
#案例2:明天17点钟,输出时间到/root/date.txtg内
<<root@HK9527 ~>># at 17:00 tomorrow 
at> date > /root/date.txt<EOT>
job 4 at Sun Oct 24 17:00:00 2021
#案例3:2分钟后,输出时间到/root/date2.txt内
<<root@HK9527 ~>># at now + 2 minutes
at> date > /root/date2.txt<EOT>
job 5 at Sat Oct 23 22:34:00 2021
#案例4:2分钟后,执行/root/my.sh脚本
<<root@HK9527 ~>># at now + 2 minutes
at> /root/my.sh<EOT>
job 5 at Sat Oct 23 22:34:00 2021
前提是用户对my.sh具有执行权限

十四、磁盘分区与挂载

1、概念详解

对Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。

Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得。

硬盘说明

1) Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI 硬盘

2)对于IDE硬盘,驱动器标识符为“hdx~",其中nd"表明分区所在设备的类型,这里是指IDE硬盘了。

"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。

例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

3)对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样

lsblk        #查看所有设备挂载情况
lsblk -f     #查看所有设备挂载情况详细信息

2、挂载案例

增加一块磁盘的步骤

①虚拟机添加硬盘

虚拟机设置---添加---磁盘

②分区

fdisk /dev/sdb  #分区命令
开始对/sdb 分区
m:显示命令列表
p:显示磁盘分区同 fdisk- l
n:新增分区
d:删除分区
w:写入并退出
#说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区,输入分区号(只是一个分区号,不是分区的数量,如果想要创建两个分区,那就输入两次n)
#然后两次回车默认剩余全部空间,最后输入w写入分区并退出,若不保存退出输入q

③格式化

mkfs -t ext4 /dev/sdb1    #格式化磁盘,其中ext4是分区类型

④挂载

#挂载:将一个分区与一个目录联系起来,
mount 设备名称 挂载目录
例如: mount /dev/sdb1/ newdisk
#取消挂载
umount 设备名称或者挂载目录
例如: umount /dev/sdb1 或者 umount /newdisk
注意:用命令行挂载,重启后会失效

⑤设置可以自动挂载

vim /etc/fstab    #永久挂载:通过修改/etc/fstab实现挂载
添加完成后执行mount-a即刻生效,重启后挂载点不消失

注意:目录与磁盘挂载之后,往目录里写的东西是写到了磁盘里,重启之后挂在消失,之前的目录里是没有东西的,东西都在磁盘里。

挂载NTFS

1、Ntfs-3g安装
解压缩安装:
tar zxf ntfs-3g_ntfsprogs-2011.4.12.tgz    //编译和安装ntfs-3g源代码
cd ntfs-3g_ntfsprogs-2011.4.12 
./configure
make
make install
2、Mount NTFS分区
如果在安装过程中没有出现错误,NTFs卷可以mount到Linux上,并且具有读写权限。
mount -t ntfs-3g /dev/sdb1 /mnt/data

3、磁盘情况查询

df -h    #查询系统整体磁盘使用情况

目录磁盘情况查询

du -h    #查询指定目录的磁盘占用情况,默认为当前目录
-s:指定目录占用大小汇总
-h:带计量单位
-a:含文件
--max-depth=1:子目录深度
-c:列出明细的同时,增加汇总值
应用实例
查询/opt目录的磁盘占用情况,深度为1
#du -hac --max-depth=1 /opt

磁盘统计指令

#统计 /opt 文件夹下文件的个数
ls -l /opt | grep "^-" | wc -l
#统计 /opt 文件夹下目录的个数
ls -l /opt | grep "^d" | wc -l
#统计 /opt 文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep "^-" | wc -l
#统计 /opt 文件夹下目录的个数,包括子文件夹里的
ls -lR /opt | grep "^d" | wc -l
#以树状显示目录结构 tree目录,注意:如果没有tree ,则使用yum install tree安装
tree /home

十五、网络配置

查看ip地址的两种方式
1、ip addr
2、ifconfig

1、NAT网络配置

 查看网络ip和网关

编辑---虚拟网络编辑器---更改设置,即可查看

 配置网络信息

vim /etclsysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33文件说明
DEVICE=eth0         #接口名(设备,网卡)
HWADDR=00:0C:2X:6X:OX:XX    #MAC地址
TYPE=Ethernet       #网络类型(通常是Ethemet)
UUID=926a57ba-92c6-423 1-bacb-f27e5e6a9f44#随机id
ONBOOT-yes          #系统启动的时候网络接口是否有效((yes/no)
BOOTPROTO=static    #IP的配置方法none、static、bootp、dhcp(引导时不使用协议、静态分配IP、BOOTP协议、DHCP协议)
IPADDR=192.168.80.128     #IP地址
NETMASK=255.255.255.0     #子网掩码
GATEWAY=192.168.80.2      #网关
DNS1=114.114.114.114      #DNS解析地址

配置完成之后重启network服务

service network restart

2、设置主机名和hosts映射

设置主机名

为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名

hostname            #查看主机名
vim /etc/hostname   #指定主机名

修改后,重启生效

设置hosts映射

设置hosts映射可以通过主机名找到(比如 ping)某个linux系统

#windows
在C:Windows\System32\drivers\etc\hosts文件指定即可
案例: 192.168.200.130 HK9527
#linux
在 /etc/hosts 文件指定
案例:vim /etc/hosts
添加 192.168.8.100 Thinkpad

3、主机名解析过程分析

Hosts是什么

一个文本文件,用来记录IP和Hostname(主机名)的映射关系

DNS,就是Domain Name System的缩写,翻译过来就是域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库

应用实例:用户在浏览器输入了www.baidu.com

①浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析缓存,如果有直接返回IP完成解析

这两个缓存,可以理解为本地解析器缓存

②一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)

如在 cmd窗口中输入
ipconfig /displaydns     #DNS域名解析缓存
ipconfig /flushdns       #手动清理dns缓存

③如果本地解析器缓存没有找到对应映射,就回去检查系统中 hosts 文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回

④如果/本地DNS解析缓存和 hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析

十六、修改命令行终端样式

修改linux终端命令行样式,可以通过定义PS1环境变量实现

PS1是Linux终端用户的一个环境变量,用来定义命令行提示符的参数。

①在终端输入命令

[root@CentOS-7 ~]# echo $PS1
可以得到PS1当前值:  [\u@\h \W]\$

PS1的常用参数以及含义

\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"

\H :完整的主机名称

\h :仅取主机名中的第一个名字

\t :显示时间为24小时格式,如:HH:MM:SS

\T :显示时间为12小时格式

\A :显示时间为24小时格式:HH:MM

\u :当前用户的账号名称

\v :BASH的版本信息

\w :完整的工作目录名称

\W :利用basename取得工作目录名称,只显示最后一个目录名

\# :下达的第几个命令

\$ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $

所以linux默认的命令行提示信息的格式PS1=    '[\u@\h \W]\$ '    的意思就是:[当前用户的账号名称@主机名的第一个名字 工作目录的最后一层目录名]#

②颜色设置参数

在PS1中设置字符颜色的格式为:\[\e[F;Bm\]........\[\e[0m\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47,\[\e[0m\]作为颜色设定的结束。

颜色对照表:

F  B

30 40 黑色

31 41 红色

32 42 绿色

33 43 黄色

34 44 蓝色

35 45 紫红色

36 46 青蓝色

37 47 白色

只需将对应数字套入设置格式中即可

比如要设置命令行的格式为绿字黑底(\[\e[32;40m\]),显示当前用户的账号名称(\u)、主机的第一个名字(\h)、当前工作目录最后一个名称(\W),可以直接在命令行键入如下命令:

③修改.bashrc文件,永久保存命令行样式

上面的设置的作用域只有当前终端的登陆有效,关闭终端或退出登录即刻失效

要想永久性的保存设置,需要修改.bashrc配置文件

cd
vi .bashrc
    加入这一行:PS1='\[\e[36;40m\]<<\u@\h \W>>\[\e[0m\]\$ '
    保存退出
source .bashrc  #重新加载bash配置文件

十七、进程管理

1、基本介绍

在linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)

每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。

后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

2、ps -aux

显示系统执行的进程

ps      #用来查看目前系统中,有哪些正在执行,以及它们执行的状况,可以不加任何参数
ps-a    #显示当前终端的所有进程信息
ps-u    #以用户的格式显示进程信息
ps-x    #显示后台进程运行的参数

USER:用户名称

PID:进程号

%CPU:进程占用CPU的百分比

%MEM:进程占用物理内存的百分比

VSZ:进程占用的虚拟内存大小(单位:KB)

RSS:进程占用的物理内存大小(单位:KB)

TTY:终端名称,缩写

STAT:进程状态,其中S=睡眠,s=表示该进程是会话的先导进程,N=表示进程拥有比普通优先级更低的优先级,R=正在运行,D=短期等待,Z=僵死进程,T=被跟踪或者被停止等

STARTED:进程的启动时间

TIME:CPU时间,即进程使用CPU的总时间

COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

3、ps -ef

ps -ef    #以全格式显示当前所有的进程
-e显示所有进程
-f全格式
案例:查看sshd 的父进程信息
ps -ef | grep sshd

UID:用户ID

PID:进程ID

PPID:父进程ID

C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高

STIME:进程启动的时间

TTY:完整的终端名称

TME:CPU时间

CMD:启动进程所用的命令和参数

Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps -aux。两者没太大差别,是两种风格而已
System V风格和BSD 风格,ps -aux最初用到System V风格,而ps -ef被用在BSD风格中,两者输出略有不同
现在的大部分Linux系统都是可以同时使用这两种方式的

4、终止进程kill、killall

若是某个进程执行一半需要停止时,或是己消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

kill [选项] 进程号    #功能描述:通过进程号杀死/终止进程
killall 进程名称      #功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
常用选项
-9:表示强迫进程立即停止
案例1:踢掉某个非法登录用户
ps -ef | grep sshd      #查看非法登录用户进程ID
kill 11196              #kill进程号
案例2:终止远程登录服务sshd,在适当时候再次重启sshd服务
ps -ef | grep sshd      #查看非法登录用户进程ID
kill sshd对应的进程号
systemctl start sshd.service    #重启sshd服务
案例3:终止多个gedit
killall gedit
案例4:强制杀掉一个终端
ps -ef | grep bash       #查看终端对应的进程ID
kill -9 bash对应的进程号

5、查看进程树pstree

基本语法
pstree [选项]    #可以更加直观的来看进程信息
常用选项
-p:显示进程的PID
-u:显示进程的所属用户
应用实例
案例1:请以树状的形式显示进程的pid
pstreep -p
案例2:请以树状的形式进程的用户
pstree -u

十八、服务管理

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld , sshd防火墙等),因此我们又称为守护进程,是Linux 中非常重要的知识点。

1、service管理指令

service 服务名 [start | stop | restart | reload | status]
#在CentOS7.0后很多服务不再使用service ,而是 systemctl
service指令管理的服务在 /etc/init.d 查看

案例:使用service指令,查看,关闭,启动network
service network status
service network stop
service network start

查看全部服务名

setup
系统服务

上图中带 * 的为开机会自启动的,选中服务后点击空格可以变换状态,Tab键可以推出此界面

/etc/init.d看到service 指令管理的服务
ls -l /etc/init.d

2、chkconfig指令

通过chkconfig命令可以给某个服务在各个运行级别设置自启动/关闭

chkconfig指令管理的服务在/etc/init.d查看

注意: Centos7.0后,很多服务使用systemctl管理

chkconfig的基本语法
chkconfig --list [| grep xxx]     #查看服务
chkconfig 服务名 --list            #查看此服务的开关状态
chkconfig--level 5 服务名 on/off   #为此服务在运行级别上设置开关
案例演示
对network 服务﹐进行各种操作,把network在3运行级别关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on
使用细节
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效

3、systemcrl管理指令

基本语法
systemctl [start | stop | restart | status] 服务名

systemctl指令管理的服务在 /usr/liblsystemd/system 查看
#ls -l /usr/lib/systemd/system

systemctl设置服务的自启动状态

systemctl list-unit-files [ l grep 服务名]    #查看服务开机启动状态, grep可以进行过滤
systemctl enable 服务名        #设置服务开机启动
systemctl disable 服务名       #关闭服务开机启动
systemctl is-enabled 服务名    #查询某个服务是否是自启动的
#应用案例
查看当前防火墙的状况,关闭防火墙和重启防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl start firewalld

如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable | disable ] 服务名

打开或者关闭指定端口

在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯

这时,需要打开指定的端口,比如80、22、8080等,需要用到firewall指令

打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port一端口/协议
应用案例:
1)启用防火墙,测试111端口是否能telnet
#不行
2)开放111端口
#firewall-cmd --permanent --add-port=111/tcp
#firewall-cmd --reload     #需要重新载入才能生效
3)再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp
firewall-cmd --reload      #需要重新载入才能生效

4、动态监控进程

top与ps命令很相似,它们都用来显示正在执行的进程。

top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程

#基本语法
top [选项]
#常用选项
-d:秒数,指定top命令每隔几秒更新,默认是3秒
-i:使top不显示任何闲置或者僵死进程
-p:通过指定监控进程ID来仅仅监控某个进程的状态。
#交互操作
P:以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N:以PID排序
q:退出top
#P、M、N都是大写,q是小写

top - 09:42:47        #系统时间
up 9 min              #运行时间
2 users               #当前登录用户

load average: 0.00,0.01,0.02   
#负载均衡,后面的三个数分别是1分钟、5分钟、15分钟的负载情况,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
#如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

Tasks: 173 total         #总进程:173 total
1 running                #正在运行的进程数
172 sleeping             #休眠的进程数
0 stopped                #停止的进程数
0 zombie                 #僵尸进程数
Cpu(s):                  #Cpu状态信息
0.0 us                   #user space用户空间占用CPU的百分比
0.0 sy                   #sysctl内核空间占用CPU的百分比
0.0 ni                   #改变过优先级的进程占用CPU的百分比
100.0 id                 #idolt空闲CPU百分比
0.0 wa                   #wait等待占用CPU的百分比
0.0 hi                   #Hardware IRQ硬中断占用CPU的百分比
0.0 si                   #Software Interrupts软中断占用CPU的百分比
0.0 st                   #虚拟机被hypervisor偷去的CPU时间

KiB Mem : 4026376 total,3241300 free,353592 used,431484 buff/cache     #内存状态
KiB Swap:2097148 total,2097148 free,0 used. 3391548 avail Mem    #swap交换分区信息
used:使用中的内存总量,指的是现在系统内核控制的内存数
free:空闲的内存总量,是内核还未纳入其管控范围的数量。
这里要说明的是不能用windows的内存概念理解这些数据,如果按windows的方式此台服务器"危矣"。
Linux的内存管理有其特殊性,复杂点需要一本书来说明,这里只是简单说点和我们传统概念(windows)的不同。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存
内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used
如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。 PID:进程ID,进程的唯一标识符 USER:进程所有者的实际用户名 PR:进程的调度优先级,这个字段的一些值是
'rt',这意味这这些进程运行在实时态 NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR:SHR是进程使用的共享内存,共享内存大小,单位kb S:这个是进程的状态。它有以下不同的值: D - 不可中断的睡眠态。 R – 运行态 S – 睡眠态 T – 被跟踪或已停止 Z – 僵尸态 %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比 %MEM:进程使用的可用物理内存百分比 TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒 COMMAND:运行进程所使用的命令,进程名称(命令名/命令行) #案例1:监视特定用户,比如我们监控tom用户 top:输入此命令,按回车键,查看执行的进程 u:然后输入"u"回车,再输入用户名,即可 #案例2:终止指定的进程,比如我们要结束tom登录 top:输入此命令,按回车键,查看执行的进程 k:然后输入"k"回车,再输入要结束的进程ID号 #案例3:指定系统状态更新的时间(每隔10秒自动更新),默认是3秒 top -d 10

5、netstat查看网络情况

可以看到哪些服务是处于监听状态,也可以看到有哪些连接到本机,要是发现有不知名的端口在监听,那就要小心木马等病毒危害

基本语法
netstat [选项] 选项说明
-an:按一定顺序排列输出
-p:显示哪个进程在调用
应用案例
请查看服务名为 sshd的服务的信息
netstat -anp | grep sshd

 

十九、rpm与yum软件安装

1、rpm包相关

rpm包在光盘文件中的package目录中

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件

RPM是RedHat Package Manager (RedHat软件包管理工具〉的缩写,类似windows的 setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的

Linux的分发版本都有采用(suse,redhat, centos等等),可以算是公认的行业标准了

rpm-qa l grep xx    #查询已安装的rpm列表
举例:看看当前系统,是否安装了firefox
#rpm -qa | grep firefox

rpm包名: firefox-60.2.2-1.el7.centos.x86_64

名称:firefox

版本号:60.2.2-1

适用操作系统: el7.centos.x86_64表示centos7.x的64位系统

如果是i686、i386表示32位系统,noarch表示32位,64位通用

rpm -qa    #查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep xxx

rpm -q 软件包名    #查询软件包是否安装
rpm -q firefox

rpm-qi 软件包名    #查询软件包信息
rpm -qi firefox

rpm-ql 软件包名     #查询软件包中的文件
rpm -ql firefox

rpm -qf 文件全路径名查询文件所属的软件包
rpm -qf /etc/passwd    #查看passwd这个文件是那个程序所属
rpm -qf /etc/firefox     

rpm -qpi tree-1.5.3-3.el6.x86_64.rpm     #确认该软件的作用
rpm -qpl tree-1.5.3-3.el6.x86_64.rpm     ##确认该软件安装路径

#卸载rpm包
基本语法
rpm -e RPM包的名称
应用案例:删除firefox软件包
rpm -e firefox
细节讨论
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
如:$ ypm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
如果我们就是要删除foo这个rpm包,可以增加参数--nodeps ,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行.

安装rpm包

安装rpm包
基本语法
rpm -ivh RPM包全路径名称
参数说明
i=install安装
v=verbose提示
h=hash进度条
应用实例
卸载和安装firefox浏览器
#rpm -e firefox
#rpm -ivh firefox

2、yum源安装

Yum是一个 Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包

yum的基本指令
yum list | grep xx    #查询yum服务器的软件列表是否有需要安装的软件
安装指定的yum包
yum install xxx       #下载安装
yum应用实例:请使用yum的方式来安装firefox
rpm -e firefox
yum list | grep firefox
yum install firefox

 更换yum源

①yum install wget -y    #首先安装wget

②mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup    #将系统原始配置文件失效

③wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo   
#使用Wget获取centos6的阿里yum源配置文件 ③wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#使用Wget获centos7的阿里yum源配置文件 ④yum clean all #清空以前yum源的缓存 ⑤yum makecache #获取阿里云的缓存

centos8的yum源问题详解

原因:CentOS Linux 8操作系统版本在2022年12月31日结束了生命周期(EOL),Linux社区不再维护该操作系统版本。所有的CentOS Linux 8的yum源都无效!

解决办法:更换yum源

cd /etc/yum.repos.d/
mkdir repobackup
mv *.repo repobackup/     #备份镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

以上两个版本都可以,任选一个即可

yum clean all   #清除旧的yum缓存
yum makecache   #生成新的yum缓存

二十、atime、mtime、ctime

Linux里面一切皆文件,那我们可以知道文件状态的三个时间它们分别是 -atime、-ctime、-mtime

关于时间的信息有三个:

最近访问时间 access time (-atime)

最近更改时间 modify time (-mtime)

最近状态改动时间 change time(-ctime)

当然我们也看到了创建时间那一项为空白,也就是说Linux系统下是无法查看文件的创建时间的

atime  : 它代表着最近一次访问文件的时间,显示一个文件的内容或者运行一个shell脚本会更新文件的atime。可用ls -lu命令查看

mtime : 它代表着最近一次文件内容被修改的时间。可用ls -l 命令查看

ctime  : 它代表着最近一次文件状态改变的时间 ,是status change time,是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。可用ls -lc 命令查看

我们既然可以查看当前的atime、mtime、ctime,那肯定也可以查看几天前或者几天之内被改过或者访问过的文件,Linux为我们提供了一个简便的查询方式,那就是 +n 和 -n

下面以 -mtime 举例说明:

-mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名
找 “5天之内被更改过的档案名” 就是   find / -mtime -5
找 “5天前的那一天被更改过的档案名” 就是   find / -mtime 5
找 “5天之前被更改过的档案名” 就是   find / -mtime +5

下面用图来说明一下:

右边为当前时,+5 代表大于等于 6 天前的档案名, -5 代表小于等于 5 天内的档案名,5 则是代表 5-6 那一天的档案名。

二十一、Tips

1、CentOS8设置开机自动登录账户的方法

CentOS8图形界面不用输入用户名密码直接登录

vim /etc/gdm/custom.conf
#在[daemon]配置节下添加如下内容
[daemon]
AutomaticLoginEnable=True
AutomaticLogin=root

 2、Chrome浏览器开机默认全屏启动教程

① 下载安装chrome浏览器(建议默认安装)

② 右键打开chrome浏览器快键方式的属性

③ 在 目标 选项卡后面添加如下信息

 --kiosk www.baidu.com
#--kiosk前面有空格 
#www.baidu.com为要打开的地址

④ 修改完成后,将此快捷方式拖动到程序启动项文件夹中,关机重启即可

 

posted @ 2021-10-25 18:17  CentKiller  阅读(793)  评论(0编辑  收藏  举报