关闭Linux系统的邮件自动提示功能即可
[root@master ~]# echo "unset MAILCHECK" >> /etc/profile
[root@master ~]# source /etc/profile
在windows的DOS操作界面里面,清屏的命令是cls
linux清屏命令
1.clear命令:这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。
2.Ctrl+l(小写的L):这是一个清屏的快捷键,清屏效果同clear命令一样。
3.reset命令:这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。值得一提的是reset命令在你的终端控制错乱时非常有用。如输入字符不出现在光标的位置的情况。还有当你敲击回车键时,新提示符并没有出现在新行上,而是出现在老提示符的前面。此时reset命令就能用来修正这些问题。
4.写脚本.在PATH路径下,如/usr/bin/目录下。
5.另外介绍一个用别名来使用清屏命令的方法,如下:
[root@localhost ~]$ alias cls='clear'
[root@localhost ~]$ cls
执行以上命令后,以后你就可以直接输入 cls 命令来实现和 clear 一样的清屏命令了。
当然,alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中。
1.#PATH=$PATH:/opt/lamp/mysql/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变.但一般情况下我们不直接在这里面修改,在/etc/profile开头有这样的提示:
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
所以:添加一个customer.sh文本文件到 /etc/profile.d/目录下,打开它并敲入export PATH=$PATH:/opt/lamp/mysql/bin保存退出,source /etc/profile 立即生效,下一次登陆也会生效
3.#vi ~/.bash_profile
修改PATH行,把/opt/lamp/mysql/bin添加进去这种方法是针对用户起作用的
注意:想改变PATH,必须重新登陆才能生效,以下方法可以简化工作:
如果修改了/etc/profile,那么编辑结束后执行source profile 或 执行点命令 ./profile,PATH的值就会立即生效了。这个方法的原理就是再执行一次/etc/profile shell脚本,注意如果用sh /etc/profile是不行的,因为sh是在子shell进程中执行的,即使PATH改变了也不会反应到当前环境中,但是source是在当前 shell进程中执行的,所以我们能看到PATH的改变。
一般情况下在用户工作目录下的bin目录会包含在PATH路径中,所以只要把用户自己写的shell脚本放在用户的bin目录下就可以了,不需要修改配置文件。
第 1 阶段:linux 环境下的基本操作命令,包括 文件操作命令(rm mkdir chmod, chown) 编辑工具使用(vi vim)linux 用户管理(useradd userdel usermod)等
第 2 阶段:linux 的各种配置(环境变量配置,网络配置,服务配置)
第 3 阶段:linux 下如何搭建对应语言的开发环境(大数据,JavaEE, Python 等)
第 4 阶段:能编写 shell 脚本,对 Linux 服务器进行维护。
第 5 阶段:能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。
第 6 阶段:深入理解 Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法。
Xshell是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。
Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
特别说明:如果希望安装好 XShell就可以远程访问 Linux 系统的话,需要有一个前提,就是Linux 启用了 SSHD 服务,该服务默认监听 22 号端口。
查看状态:
systemctl status sshd.service
启动服务:
systemctl start sshd.service
重启服务:
systemctl restart sshd.service
开机自启:
systemctl enable sshd.service
第一步:列出可安装的桌面环境
[root@local ~]# yum grouplist
第二步:安装GNOME及相应桌面管理工具
#确实是GNOME,你没看错
[root@local ~]# yum group info "Graphical Administration Tools" # 查看安装的包有哪些内容
[root@local ~]# yum -y groups install "GNOME DESKTOP" "Graphical Administration Tools"
第三步:设置开机启动为GNOME
[root@local ~]# systemctl set-default graphical.target
第四步:重启
[root@local ~]# reboot
第五步:安装相应软件
1)五笔
[root@local ~]#yum -y install ibus ibus-table-wubi ibus-pinyin
2)sublime
下载http://www.sublimetext.com/3
解压到 /usr/local 目录
编辑 /usr/local/sublime_text_3/sublime_text.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Sublime Text
GenericName=Text Editor
Comment=Sophisticated text editor for code, markup and prose
Exec=/usr/local/sublime_text_3/sublime_text %F
Terminal=false
MimeType=text/plain;
Icon=/usr/local/sublime_text_3/Icon/48x48/sublime-text.png
Categories=TextEditor;Development;
StartupNotify=true
Actions=Window;Document;
[Desktop Action Window]
Name=New Window
Exec=/usr/local/sublime_text_3/sublime_text -n
OnlyShowIn=Unity;
[Desktop Action Document]
Name=New File
Exec=/usr/local/sublime_text_3/sublime_text --command new_file
OnlyShowIn=Unity;
把图标添加到快捷启动
[root@local ~]#cp sublime_text.desktop /usr/local/share/applications/
3)smartgit
下载st https://www.syntevo.com/smartgit/download/
解压到 /usr/local 目录
添加桌面快捷启动图标
[root@local ~]#/usr/local/smartgit/bin/add-menuitem.sh
安装git
[root@local ~]#yum -y install git
4)google chrome
第六步:卸载 GNOME
[root@local ~]#yum -y groupremove "GNOME DESKTOP" "Graphical Administration Tools"
经过排查是因为我之前在/etc/fstab写入了光盘自动挂载,但开机有没有挂载成功导致的。
处理办法:自动挂载的那个fstab文件有问题,你在这个界面直接输入密码,然后把你增加的删除,重启就OK
1:登陆root 乱码也输入密码
2: vim /etc/fstab ,检查磁盘挂载信息
3:注释掉自己增加的内容,如果确定不在使用可以删除
4:重启OK。
报这个错误多数情况下是因为/etc/fstab文件的错误。注意一下是不是加载了外部硬盘、存储器或者是网络共享空间,在重启时没有加载上导致的。
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#生成缓存
yum makecache
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
1、切换工作目录至/usr/local
在Linux系统下,路径/usr/local相当于C:/Progrem Files/,通常安装软件时便安装到此目录下。
cd /usr/local
2、下载目标python版本压缩包
wget http://python.org/ftp/python/3.9.2/Python-3.9.2.tgz
3、解压压缩包
tar -zxvf Python-3.9.2.tgz
4、在当前目录下创建文件夹python3
mkdir python3
5、编译与安装
a.进入解压文件路径
cd Python-3.9.2
b.生成makefile文件
./configure --prefix=/usr/local/python3
c. 根据makefile文件进行编译
make
d.安装
make install
--prefix作用:编译的时候用来指定程序存放路径。
不指定prefix:
可执行文件默认放在/usr/local/bin
库文件默认放在/usr/local/lib
配置文件默认放在/usr/local/etc
其它的资源文件放在/usr/local/share
指定prefix,直接删掉一个文件夹就够了
问题:
在这个过程中,出现了安装失败的问题:
zipimport.ZipImportError: can't decompress data; zlib not available
这是由于缺少依赖造成的,可执行以下代码:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
6、两种版本配置方法
直接创建python3软链,利用命令 python3 调用新版本python,与自带python不冲突
#在/usr/bin路径下创建python3软链,指向已安装的python3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
#在/usr/bin路径下创建pip3软链,指向已安装的pip3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
此时系统中存在两个python版本:
命令 python 对应的仍是默认2.7版本
命令 python3 则对应新安装的3.8版本,
此本方法到此便结束了,可以快乐地打出 python3 -V, pip3 -V查看对应版本了
覆盖现有python,使其指向新安装的python,利用命令python便可调用新版本python
备份旧python与pip
mv /usr/bin/python /usr/bin/python2_old
mv /usr/bin/pip /usr/bin/pip2_old #第三部分的文件名可根据本机版本修改
修改软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
此方法到这里已经完成一半啦,可以使用命令 python -V, pip -V查看版本
7、由于修改了python的版本,会导致一些依赖于旧版本的程序出现错误,如yum,可进行如下配置:
打开yum文件
vim /usr/bin/yum
将文件第一行python修改为旧的版本号,此处添加2.7:
[root@localhost games]# cat /usr/bin/yum
#!/usr/bin/python2.7
在安装软件时报错:
SyntaxError: invalid syntax
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
还是因为python更换的原因, 依照上述操作修改文件即可:打开/usr/libexec/urlgrabber-ext-down 文件,将 “#!/usr/bin/python”
修改为 #!/usr/bin/python2.7
其他工具或库如果在安装过程中也报类似错误,同法处理。
此时系统仍存在两个python版本,但命令 python 对应的是新安装的版本,命令 python2对应之前的默认2.7版本
使用xshell来操作服务非常方便,传文件也比较方便。
就是使用rz,sz
首先,服务器要安装了rz,sz
yum install lrzsz
当然你的本地windows主机也通过ssh连接了linux服务器
运行rz,会将windows的文件传到linux服务器
运行sz filename,会将文件下载到windows本地
在最近的一次操作中,由于执行了rn -rf ~ 误将/root目录删除,删除之后发下 ll 命令无法使用,之后采取了以下方式进行恢复:
[root@test001 /]# mkdir /root
[root@test001 /]# cp -a /etc/skel/.[!.]* /root
[root@test001 /]# reboot
主要是把 /etc/skel/里面的文件拷贝回去就行了其中/etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。 这个目录下的所有文件都是隐藏文件(以.点开头的文件)。 通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一的、标准的、初始化用户环境。所以当/root目录被误删除,可以从/etc/skel中复制一份文件到/root下。由于是刚部署完成的生产环境,相关服务还未有数据进入,以此将服务器进行重启,重启之后恢复完成。若是在正式环境中,我们要考虑服务器能否重启,若不能,则将/etc/skel中的文件复制到/root下即可。
默认下载到的centos7版本一般是3.10.x,版本比较低.运行一些比较新的东西会报错(比如kubernetes),所以需要升级内核.
ELRepo支持Red Hat Enterprise Linux(RHEL)及其衍生版本(Scientific Linux,CentOS等)。ELRepo项目专注于与硬件相关的软件包,以增强您使用Enterprise Linux的体验。这包括文件系统驱动程序,图形驱动程序,网络驱动程序,声音驱动程序,网络摄像头和视频驱动程序。
#查看当前系统内核
uname -sr
或
cat /proc/version
#显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号。
uname -a
##升级内核
#导入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安装ELRepo软件仓库的yum源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
#要使用elrepo镜像系统,还需要安装yum-plugin-fastestmirror
#安装好仓库源之后,可以使用下面的命令列出可用的内核相关包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装长期维护版内核
yum --enablerepo=elrepo-kernel install kernel-lt
或者
#安装主线稳定版内核
yum --enablerepo=elrepo-kernel install kernel-ml
#设置刚安装的内核为默认启动,因为新安装的内核在启动时都会排在最上面,所以可以使用
grub2-set-default 0
等同于
编辑 /etc/default/grub,将原来的GRUB_DEFAULT=saved改为GRUB_DEFAULT=0
意思是GRUB初始化页面的第一个内核将作为默认内核。
#生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#查看内核的启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
#安装新版的工具包
yum --disablerepo=* --enablerepo=elrepo-kernel install -y kernel-lt-tools
#重启系统验证
##删除旧的内核
#查询已安装的内核
rpm -qa | grep kernel
#删除
yum remove -y 旧内核的名字
#系统内核信息
uname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号。
[root@localhost etc]# uname -a
Linux localhost.localdomain 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
查看centos的版本
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
所有的信息基本都在etc目录下,是centos的就能找到带"centos"的文件,是ubuntu或者的Debian也可以找到名字带他们的文件.常见的Linux发行版基本都有/etc/os-release文件,这个文件记载了系统的详细信息.
查看CPU个数
# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
uniq命令:删除重复行;wc –l命令:统计行数
查看CPU核数
# cat /proc/cpuinfo | grep "cpu cores" | uniq
cpu cores : 4
查看CPU型号
# cat /proc/cpuinfo | grep 'model name' |uniq
model name : Intel(R) Xeon(R) CPU E5630 @ 2.53GHz
总结:该服务器有2个4核CPU,型号Intel(R) Xeon(R) CPU E5630 @ 2.53GHz
查看内存总数
#cat /proc/meminfo | grep MemTotal
MemTotal: 32941268 kB //内存32G
uname -a # 查看内核/操作系统/CPU信息的linux系统信息
head -n l /etc/issue # 查看操作系统版本
cat /proc/cpuinfo # 查看CPU信息
hostname # 查看计算机名的linux系统信息命令
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备的linux系统信息命令
lsmod # 列出加载的内核模块
env # 查看环境变量资源
free -m # 查看内存使用量和交换区使用量
df -h # 查看各分区使用情况
du -sh # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载磁盘和分区
mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区
hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE # 查看启动时IDE设备检测状况网络
ifconfig # 查看所有网络接口的属性
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息进程
ps -ef # 查看所有进程
top # 实时显示进程状态用户
w # 查看活动用户
id # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务服务
chkconfig –list # 列出所有系统服务
chkconfig –list | grep on # 列出所有启动的系统服务程序
rpm -qa # 查看所有安装的软件包
cat /proc/cpuinfo :查看CPU相关参数的linux系统命令
cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令
cat /proc/meminfo :查看linux系统内存信息的linux系统命令
cat /proc/version :查看版本,类似uname -r
cat /proc/ioports :查看设备io端口
cat /proc/interrupts :查看中断
cat /proc/pci :查看pci设备的信息
cat /proc/swaps :查看所有swap分区的信息
CentOS系统在初始状态下是打开了防火墙的,并且不允许任何流量的出入,当然 22端口这样的基础端口是开放的.为了安全,生产环境肯定是开着防火墙的,所以不建议学习的时候为了跑项目,直接把防火墙关掉.开几个用得到的端口就可以了.
firewalld、firewalld-cmd、systemctl、iptables 之间的关系
管理防火墙的工具,CentOS7采用新的firewalld,CentOS6及以前版本采用iptables,不过firewalld底层仍然调用的是iptables.并且对iptables依然支持.
systemctl是CentOS7的服务管理工具
firewalld-cmd是firewalld的命令行工具
systemctl
systemctl start firewalld.service //启动防火墙服务
systemctl stop firewalld.service //关闭服务
systemctl restart firewalld.service //重启服务
systemctl status firewalld.service //显示服务的状态
systemctl enable firewalld.service //在开机时启用服务
systemctl disable firewalld.service //在开机时禁用服务
systemctl is-enabled firewalld.service //查看服务是否开机启动
systemctl list-unit-files|grep enabled //查看已启动的服务列表
systemctl --failed //查看启动失败的服务列表
firewalld-cmd
firewall-cmd --version //查看版本
firewall-cmd --state //显示状态
firewall-cmd --reload //更新防火墙规则
firewall-cmd --zone=public --list-ports //查看public策略下所有打开的端口
firewall-cmd --panic-on //拒绝所有包
firewall-cmd --panic-off //取消拒绝状态
firewall-cmd --query-panic //查看是否拒绝
防火墙端口启用禁用(--permanent永久生效,没有此参数重启后失效,记得更新防火墙规则)
firewall-cmd --zone=public --add-port=80/tcp --permanent //启用80端口
firewall-cmd --zone=public --query-port=80/tcp //查看80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent //删除80端口
firewall-cmd --permanent --zone=public --add-forward-port=port=8056:proto=tcp:toaddr=xxx.xx.xx.xxx:toport=3356//转发端口
//列出所有开放端口,包括转发规则
firewall-cmd --list-all
//列出所有类型public 的端口
firewall-cmd --zone=public --list-ports
firewalld 默认有 9 个 zone,默认的 zone 为 public,zone 可以理解为 firewalld 的单位:规则集。
#firewalld关于zone的操作
firewall-cmd --set-default-zone=work //设定默认zone
firewall-cmd --get-zone-of-interface=ens33 //查指定网卡
firewall-cmd --zone=public --add-interface=lo //给指定网卡设置zone
firewall-cmd --zone=dmz --change-interface=lo //针对网卡更改zone
firewall-cmd --zone=dmz --remove-interface=lo //针对网卡删除zone
firewall-cmd --get-active-zones //查看系统所有网卡所在的zone
#firewalld中关于service的操作
firewall-cmd --get-services //查看所有的servies
firewall-cmd --list-services //查看当前zone下有哪些service
firewall-cmd --zone=public --add-service=http //把http增加到public zone下面
firewall-cmd --zone=public --remove-service=http
ls /usr/lib/firewalld/zones/ //zone的配置文件模板
firewall-cmd --zone=public --add-service=http --permanent //更改配置文件,之后会在/etc/firewalld/zones目录下面生成配置文件
查看网络ip
ip addr(简写 ip a)或ifconfig
如果 linux 系统下的 ifconfig 命令找不到,需要安装 net-tools。 cent os 和 ubuntu os 的安装命令有所区别,具体命令如下:
#ubuntu os
apt install net-tools
#cent os
yum install net-tools
重启网络
service network restart
网络配置文件
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="38571b93-fd88-41a8-ade4-1799babee3a6"
DEVICE="enp0s3"
ONBOOT="yes"
DNS服务器地址配置处:/etc/resolv.conf
shutdown
shutdown -h now : 表示立即关机
shutdown -h 1 : 表示 1 分钟后关机
reboot
shutdown -r now: 立即重启
#若系统的runlevel为0或6,则使用halt命令关闭系统,否则以shutdown指令(加上-h参数)来取代。
sync 当我们关机或者重启时,都应该先执行以下.把内存的数据写入磁盘,防止数据丢失。
[root@localhost ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(centos2) at 18:06:30.
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。Linux 的用户需要至少要属于一个组。
添加用户
#当前用户是谁
whoami
#useradd [选项] 用户名
#adduser [选项] 用户名
#cd 表示 change directory, 切换目录.
[root@localhost home]# useradd xuebiao
[root@localhost home]# ls
xuebiao
[root@localhost home]# adduser zhanglu
[root@localhost home]# ls
xuebiao zhanglu
#创建用户成功之后会自动在/home创建该用户同名的家目录
#useradd -d /home/zjk xiaoxue 指定目录为新建用户的家目录
[root@localhost home]# useradd -d /home/zjk xiaoxue
[root@localhost home]# ls
xuebiao zhanglu zjk
给用户指定或者修改密码
[root@localhost home]# passwd xuebiao
更改用户 xuebiao 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
#不用在意"无效的密码: 密码少于 8 个字符"
删除用户
#删除用户但是保留家目录数据(常用)
userdel 用户名
#用户和家目录一起删除
userdel -r 用户名
[root@localhost home]# ls
xuebiao zhanglu zjk
[root@localhost home]# userdel xuebiao
[root@localhost home]# ls
xuebiao zhanglu zjk
[root@localhost home]# userdel -r zhanglu
[root@localhost home]# ls
xuebiao zjk
查询用户信息
id 用户名
#当用户不存在时,返回"无此用户"
id: lx: no such user
切换用户
大部分Linux发行版的默认账户是普通账户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户.
Linux中切换用户的命令是su或su -.前者只是切换root身份,但shell环境仍然是普通用户的shell.而后者连用户和shell环境一起切换成root身份了。只有切换了shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su - 命令切换以后,工作目录变成root工作目录了。
扩展阅读:sudo的使用
由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和 管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
[root@localhost ~]# su - xuebiao
上一次登录:二 1月 12 09:35:47 CST 2021pts/0 上
[xuebiao@localhost ~]$ su - root
密码:
上一次登录:二 1月 12 09:36:11 CST 2021pts/0 上
[root@localhost ~]# exit
登出
#当需要返回到原来用户时,使用 exit 指令
解决方法:
1.切换root用户.然后执行 #cd /home/ && ls -la #先看你的用户的所属者跟所属组有没有变跟.如果变更了看下面2,如果没变更过的看3.
2.#chown -R xxx:xxx xxx #变更过就得重新把所属者跟所属组还给这个xxx用户.
3.#vim /home/xxx/.bash_profile 在最后加上一条
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export PS1='[\u@\h \w]' #加上它.
#source .bash_profile #然后退出重新登录
介绍
类似于角色,系统可以对有共性的多个用户进行统一的管理。
#增加组
[root@localhost ~]# groupadd lushi
[root@localhost ~]# cat /etc/group
xiaoxue:x:1002:
xuebiao:x:1003:
lushi:x:1004:
#删除组
[root@localhost ~]# groupdel lushi
[root@localhost ~]# cat /etc/group
xiaoxue:x:1002:
xuebiao:x:1003:
#增加用户时直接加上组
[root@localhost ~]# useradd -g xuebiao zhanglu
[root@localhost ~]# cd /home/
[root@localhost home]# ls
xuebiao zhanglu zjk
[root@localhost home]# cat /etc/group
xiaoxue:x:1002:
xuebiao:x:1003:
[root@localhost home]# id zhanglu
uid=1004(zhanglu) gid=1003(xuebiao) 组=1003(xuebiao)
#修改用户到指定组
[root@localhost home]# usermod -g xiaoxue zhanglu
[root@localhost home]# id zhanglu
uid=1004(zhanglu) gid=1002(xiaoxue) 组=1002(xiaoxue)
/etc/passwd 文件
[root@localhost home]# cat /etc/passwd
xiaoxue:x:1002:1002::/home/zjk:/bin/bash
xuebiao:x:1003:1003::/home/xuebiao:/bin/bash
zhanglu:x:1004:1002::/home/zhanglu:/bin/bash
#每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
/etc/shadow 文件
口令的配置文件
[root@localhost home]# cat /etc/shadow
xiaoxue:!!:18638:0:99999:7:::
xuebiao:$6$z/lqo5T/$PcpovsjEufmDEuZoycP2SgtBN0JIRMnfwVKVp5H3I3w5A/aSsYfevazEr78RfBpMbmqG8PbqmThly.3G8zCtb0:18638:0:99999:7:::
zhanglu:!!:18639:0:99999:7:::
#每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组(group)的配置文件,记录 Linux 包含的组的信息
[root@localhost home]# cat /etc/group
xiaoxue:x:1002:
xuebiao:x:1003:
#每行含义:组名:口令:组标识号:组内用户列表
centos7之前运行级别说明:
0.关机
1.单用户【找回丢失密码】
2.多用户状态没有网络服务
3.多用户状态有网络服务
4.系统未使用保留给用户
5.图形界面
6.系统重启
对比init6和reboot:我们应该在通常情况下使用 init 6.
reboot:重新启动在磁盘上执行同步(1M)操作,然后多用户重启启动。'reboot’并不执行这些过程,reboot更是一个kernel级别的命令,不对应用使用shutdown脚本。 .
init 6:停止操作系统并重新启动到由init default条目定义的状态/etc/inittab。“init 6” 基于一系列/etc/inittab文件,并且每个应用都会有一个相应shutdown脚本。‘init 6’ 调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统优雅关机.
centos7之后运行级别说明
init级别 | systemctl target |
---|---|
0 | shutdown.target |
1 | emergency.target |
2 | rescure.target |
3 | multi-user.target |
4 | 无 |
5 | graphical.target |
6 | reboot.target |
# 目前两种运行级别指令都生效,除了设置默认运行级别的方法改了.
#关于系统级别的介绍在/etc/inittab文件中,大致内容
> 当系统运行时,初始化选项卡已经不再生效.
> 在这个文件中添加配置不会对你的系统产生任何影响(低版本的centos都是在这个文件中定义默认运行级别的).
> Ctrl-Alt-Delete被/usr/lib/systemd/system/ctrl-alt-del.target处理.
> 系统使用'target'代替运行级别.默认情况下,有两种主要的target.multi-user.target类似于运行级别3;graphical.target类似于运行级别5.
# 查看当前运行级别
[root@localhost etc]# systemctl get-default
multi-user.target
[root@localhost system]# runlevel
5 3
[root@localhost system]# init 5
[root@localhost system]# runlevel
3 5
# 第一个数代表之前的运行级别,第二个数代表现在的运行级别
# 设置默认运行级别
systemctl set-default TARGET.target
#切换到指定运行级别的指令
init [012356]
systemctl isolate multi-user.target 在不重启的情况下,切换到运行级别mulit-user下
systemctl isolate graphical.target 在不重启的情况下,切换到图形界面下
#设置默认的运行级别为mulit-user
[root@localhost etc]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
# 切换运行级别就是把/etc/systemd/system/default.target这个软连接删除然后重新创建并指向/usr/lib/systemd/system下指定的某个target文件
当我们对某个指令不熟悉时,我们可以使用 Linux 提供的帮助指令来了解这个指令的使用方法。
man 获得帮助信息
man [命令或配置文件](功能描述:获得帮助信息)
[root@localhost system]# man cd
# 直接进入了包含cd的一个特别全的文档中
help 指令
help 命令 (功能描述:获得 shell 内置命令的帮助信息)
help cd
cd: cd [-L|[-P [-e]]] [dir]
Change the shell working directory.
Change the current directory to DIR. The default DIR is the value of the
HOME shell variable.
The variable CDPATH defines the search path for the directory containing
DIR. Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory. If DIR begins
with a slash (/), then CDPATH is not used.
If the directory is not found, and the shell option `cdable_vars' is set,
the word is assumed to be a variable name. If that variable has a value,
its value is used for DIR.
Options:
-L force symbolic links to be followed
-P use the physical directory structure without following symbolic
links
-e if the -P option is supplied, and the current working directory
cannot be determined successfully, exit with a non-zero status
The default is to follow symbolic links, as if `-L' were specified.
Exit Status:
Returns 0 if the directory is changed, and if $PWD is set successfully when
-P is used; non-zero otherwise.
[root@localhost system]#
当一个指令不熟悉如何学习的建议百度帮助更直接
pwd (功能描述:显示当前工作目录的绝对路径)
[root@localhost system]# pwd
/usr/lib/systemd/system
ls [选项][目录或文件]
-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
-h 方便人类理解的描述方式
[root@localhost /]# ls -alh
总用量 16K
dr-xr-xr-x. 17 root root 224 1月 11 16:22 .
dr-xr-xr-x. 17 root root 224 1月 11 16:22 ..
lrwxrwxrwx. 1 root root 7 1月 11 16:17 bin -> usr/bin
dr-xr-xr-x. 5 root root 4.0K 1月 11 17:56 boot
drwxr-xr-x. 20 root root 3.1K 1月 12 11:18 dev
drwxr-xr-x. 75 root root 8.0K 1月 12 11:18 etc
drwxr-xr-x. 5 root root 47 1月 12 09:51 home
lrwxrwxrwx. 1 root root 7 1月 11 16:17 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 1月 11 16:17 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 2 root root 6 4月 11 2018 opt
dr-xr-xr-x. 107 root root 0 1月 12 11:18 proc
dr-xr-x---. 2 root root 151 1月 11 17:52 root
drwxr-xr-x. 24 root root 720 1月 12 11:18 run
lrwxrwxrwx. 1 root root 8 1月 11 16:17 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x. 13 root root 0 1月 12 11:18 sys
drwxrwxrwt. 8 root root 211 1月 12 11:19 tmp
drwxr-xr-x. 13 root root 155 1月 11 16:17 usr
drwxr-xr-x. 19 root root 267 1月 11 16:29 var
cd [参数] (功能描述:切换到指定目录)
cd ~ 或者 cd 回到自己的家目录
cd .. 回到当前目录的上一级目录
mkdir [选项] 要创建的目录
-p 创建多级目录.确保目录名称存在,不存在的就建一个。
[xuebiao@localhost ~]$ mkdir xue
[xuebiao@localhost ~]$ ls
xue
[xuebiao@localhost ~]$ mkdir /zhang/lu
mkdir: 无法创建目录"/zhang/lu": 没有那个文件或目录
[xuebiao@localhost ~]$ mkdir -p zhang/lu
[xuebiao@localhost ~]$ ls
xue zhang
[xuebiao@localhost ~]$ cd zhang
[xuebiao@localhost zhang]$ ls
lu
#删除空目录
rmdir
#删除非空目录
rm -rf 要删除的目录
-r 递归
-f 强制
#删除文件
rm 文件
[root@localhost home]# touch a.txt
[root@localhost home]# ls
a.txt xuebiao zjk
[root@localhost home]# rm a.txt
rm:是否删除普通空文件 "a.txt"?y
[root@localhost home]# ls
xuebiao zjk
#强制删除
[root@localhost home]# rm -f a.txt
[root@localhost home]# ls
xuebiao zjk
[root@localhost home]# rm zhanglu
rm: 无法删除"zhanglu": 是一个目录
[root@localhost home]# rmdir zhanglu
rmdir: 删除 "zhanglu" 失败: 目录非空
[root@localhost home]# rmdir -rf zhanglu
rmdir:无效选项 -- r
Try 'rmdir --help' for more information.
[root@localhost home]# ls
xuebiao zhanglu zjk
[root@localhost home]# rm -rf zhanglu
[root@localhost home]# ls
xuebiao zjk
[root@localhost home]#
创建文件(可以多个,用空格隔开)
touch 文件 [文件]...
[root@localhost home]# ls
xuebiao zjk
[root@localhost home]# touch a.txt
[root@localhost home]# ls
a.txt xuebiao zjk
[root@localhost home]# touch b.txt c.txt d.txt
[root@localhost home]# ls
a.txt b.txt c.txt d.txt xuebiao zjk
cp 指令拷贝文件到指定目录
cp [选项] source dest
[root@localhost home]# ls
a.txt xuebiao zjk
[root@localhost home]# cd zjk/
[root@localhost zjk]# ls
a.txt
-r :递归复制整个文件夹
[root@localhost home]# ls
a.txt xuebiao zjk
#下载目录分析工具tree
[root@localhost home]# yum install -y tree
[root@localhost home]# tree xuebiao
xuebiao
├── a.txt
├── xue
└── zhang
└── lu
3 directories, 1 file
[root@localhost home]# cp -r xuebiao zjk
[root@localhost home]# tree zjk
zjk
├── a.txt
└── xuebiao
├── a.txt
├── xue
└── zhang
└── lu
4 directories, 2 files
当目标目录中有重复文件时,会提示是否覆盖
[root@localhost home]# cp -r xuebiao zjk
cp:是否覆盖"zjk/xuebiao/.bash_logout"? y
cp:是否覆盖"zjk/xuebiao/.bash_profile"? y
cp:是否覆盖"zjk/xuebiao/.bashrc"? y
cp:是否覆盖"zjk/xuebiao/.bash_history"? y
cp:是否覆盖"zjk/xuebiao/.viminfo"? y
cp:是否覆盖"zjk/xuebiao/a.txt"? y
强制覆盖就是在命令前面加个\
[root@localhost home]# \cp -r xuebiao zjk
[root@localhost home]#
mv oldNameFile newNameFile (功能描述:重命名)
[root@localhost home]# ls
a.txt xuebiao zjk
[root@localhost home]# mv a.txt b.txt
[root@localhost home]# ls
b.txt xuebiao zjk
mv /temp/movefile /targetFolder (功能描述:移动文件或目录,目标目录不存在则会自动创建)
[root@localhost home]# touch c.txt
[root@localhost home]# ls
c.txt xuebiao
[root@localhost home]# mv c.txt xuebiao
[root@localhost home]# ls
xuebiao
[root@localhost home]# tree xuebiao
\xuebiao
├── a.txt
├── c.txt
├── xue
└── zhang
└── lu
3 directories, 2 files
r 可读权限,w可写权限,x可执行权限(也可以用二进制表示 111 110 100 --> 764)第1位:文件类型(d 目录,- 普通文件,l 链接文件)第2-4位:所属用户权限,用u(user)表示第5-7位:所属组权限,用g(group)表示第8-10位:其他用户权限,用o(other)表示第2-10位:表示所有的权限,用a(all)表示
作者:HAI猿
链接:https://www.zhihu.com/question/452895041/answer/2078866536
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
“>” 指令 和“>>”指令
说明:ls -l > a.txt , 将 ls -l 的显示的内容覆盖写入到 a.txt 文件,如果该文件不存在,就创建该文件。
root@localhost home]# ls
xue 报社项目信息.txt
[root@localhost home]# ll > a.txt
[root@localhost home]# ls
a.txt xue 报社项目信息.txt
[root@localhost home]# cat a.txt
总用量 4
-rw-r--r--. 1 root root 0 1月 12 14:47 a.txt
drwxr-xr-x. 3 root root 21 1月 12 14:12 xue
-rw-r--r--. 1 root root 1658 1月 12 14:37 报社项目信息.txt
ls -al >>文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
[root@localhost home]# ll >> a.txt
[root@localhost home]# cat a.txt
总用量 4
-rw-r--r--. 1 root root 0 1月 12 14:47 a.txt
drwxr-xr-x. 3 root root 21 1月 12 14:12 xue
-rw-r--r--. 1 root root 1658 1月 12 14:37 报社项目信息.txt
总用量 8
-rw-r--r--. 1 root root 177 1月 12 14:47 a.txt
drwxr-xr-x. 3 root root 21 1月 12 14:12 xue
-rw-r--r--. 1 root root 1658 1月 12 14:37 报社项目信息.txt
[root@localhost home]#
echo 输出内容到控制台。
echo [选项] [输出内容]
#输出环境变量
[root@localhost home]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#输出hello
[root@localhost home]# echo hello
hello
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容
head 文件 (功能描述:查看文件头 10 行内容)
[root@localhost home]# head /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
[root@localhost home]#
head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)
[root@localhost home]# head -n 5 /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
[root@localhost home]#
tail 指令
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。
[root@localhost home]# head -n 5 /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
[root@localhost home]# tail /etc/profile
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
[root@localhost home]#
-n 5 文件 (查看文件后5行内容,数字可以随意改)
[root@localhost home]# tail -n 5 /etc/profile
fi
done
unset i
unset -f pathmunge
[root@localhost home]#
-f 实时跟踪文件更新,工作中常用
连接一
[root@localhost home]# echo "nihao" > a.txt
[root@localhost home]# echo "hai" >a.txt
连接二
[root@localhost home]# tail -f a.txt
总用量 4
-rw-r--r--. 1 root root 0 1月 12 14:47 a.txt
drwxr-xr-x. 3 root root 21 1月 12 14:12 xue
-rw-r--r--. 1 root root 1658 1月 12 14:37 报社项目信息.txt
总用量 8
-rw-r--r--. 1 root root 177 1月 12 14:47 a.txt
drwxr-xr-x. 3 root root 21 1月 12 14:12 xue
-rw-r--r--. 1 root root 1658 1月 12 14:37 报社项目信息.txt
tail: a.txt:文件已截断
nihao
tail: a.txt:文件已截断
#运行.sh文件,可以通过赋权操作改变运行方式
有权限的情况
./xxx.sh
无权限的情况
sh xxx.sh
tree工具
tree:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件.
一般linux系统不会自带tree工具,要手动安装:yum -y install tree
常用命令:
1)tree -a 显示所有文件和目录(不加-a,则隐藏目录不显示)
(2)tree -d 显示目录名称而非内容
(3)tree -f 在每个文件或目录之前,显示完整的相对路径名称
(4)tree -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
(5)tree -r 以相反次序排列
(6)tree -t 用文件和目录的更改时间排序
(7)tree -L n 只显示 n 层目录 (n 为数字)
(8)tree -dirsfirst 目录显示在前,文件显示在后
(9)可以加的参数
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-D 列出文件或目录的更改时间。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
#软连接也叫符号链接,类似于windows中的快捷方式,主要存放了链接到指定文件的路径
创建软链接
ln -s [目标文件或目录][软链接名]
[root@localhost home]# ln -s /bin binlink
[root@localhost home]# ls
binlink
[root@localhost home]# ll
总用量 0
lrwxrwxrwx. 1 root root 4 1月 12 16:19 binlink -> /bin
[root@localhost home]# cd binlink/
[root@localhost binlink]# ll
总用量 61044
-rwxr-xr-x. 1 root root 41488 11月 17 06:24 [
-rwxr-xr-x. 1 root root 29104 10月 2 00:37 addr2line
-rwxr-xr-x. 1 root root 29 4月 1 2020 alias
lrwxrwxrwx. 1 root root 6 1月 12 16:13 apropos -> whatis
查看当前目录还是在软链接的目录
[root@localhost binlink]# pwd
/home/binlink
删除软链接
正确的是:rm -rf hb_link
[root@localhost home]# rm -rf binlink
[root@localhost home]#
错误的是:rm -rf hb_link/ 这个会把源文件整个目录都删了,切记不要自动补全删除,如果是rm -rf test/ 那么原目录下的文件都会被删除!!!如果删除了,就拿别的机器通过xftp把这个目录再拷一份吧.
查看已经执行过历史命令,也可以执行历史指令
history (功能描述:查看已经执行过历史命令)
[root@localhost home]# history
1 ls
2 yum -y update
3 yum -y net-tools
4 yum -y install net-tools
5 ifconfig
6 cd /home/
7 ls
8 ln -s /bin binlink
9 ls
10 ll
11 cd binlink/
12 ls
13 pwd
14 ll
15 pwd
16 cd .
17 cd ..
18 rm -rf binlink
19 history
查看最近五条命令历史,包括本条
[root@localhost home]# history 5
16 cd .
17 cd ..
18 rm -rf binlink
19 history
20 history 5
执行指定编号的命令
[root@localhost home]# !7
ls
xuebiao
[root@localhost home]#
删除历史记录(只是删除当前shell中的历史,真正的删除需要从/root/.bash_history中修改)
history -c
历史命令都存储在/root/.bash_history中
[root@localhost ~]# cat -n .bash_history
40 shutdown
41 hahhaha
42 hello
[root@localhost ~]# echo get > .bash_history
[root@localhost ~]# history
104 echo get > .bash_history
105 history
[root@localhost ~]#
#root下没有 .bash_history.因为还没存进去.
1.history -w #把缓存中的历史命令强制写入隐藏文件~/.bash_history
2.因为没有用过shutdown命令正常关机,本次登陆内存中的指令没存到硬盘里去
这相当于是一个空设备,所有输入进去的东西都会消失
用来丢弃不需要的数据或日志信息
一、区别:
2>/dev/null
意思就是把错误输出到“黑洞”
>/dev/null 2>&1
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
2>&1 >/dev/null
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
二、解释:
1、文件描述符
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
0——标准输入(stdin)
1——标准输出(stdout)
2——标准错误(stderr)
date (功能描述:显示当前时间)
[root@localhost ~]# date
2021年 01月 12日 星期二 17:14:41 CST
#参数查看年月日时分秒
[root@localhost ~]# date "+%Y %m %d %H %M %S"
2021 01 12 17 16 12
#设置日期
date -s 字符串时间
[root@localhost ~]# date -s "1995-10-14 03:40:50"
1995年 10月 14日 星期六 03:40:50 CST
[root@localhost ~]# date
1995年 10月 14日 星期六 03:41:12 CST
校正时间
#若无ntpdate命令,安装ntp
yum -y install ntp
#校正服务器时间同网络时间一致,这一步一般就校正了已经.
ntpdate 1.cn.pool.ntp.org
[root@localhost ~]# ntpdate 1.cn.pool.ntp.org
12 Jan 17:23:19 ntpdate[8290]: step time server 84.16.67.12 offset 796829926.884274 sec
[root@localhost ~]# date
2021年 01月 12日 星期二 17:23:30 CST
#如果还没校正好,设置时区,根据选择命令分别选择,5Asia->9 China->1->Beijing Time ->1 yes
tzselect
#拷贝入系统配置文件中
TZ='Asia/Shanghai'; export TZ
#软件时间同步至硬件时间(一般来说,有两个时间,操作系统时间和BIOS时间.这条命令可以同步到BIOS中)
hwclock -w
#查看当前时间
date
查看日历指令
cal [选项] (功能描述:不加选项,显示本月日历)
[root@localhost ~]# cal
一月 2021
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[root@localhost ~]#
cal 指定年份
[root@localhost ~]# cal 2021
2021
一月 二月 三月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
四月 五月 六月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
七月 八月 九月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
十月 十一月 十二月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
[root@localhost ~]#
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录的绝对路径显示在终端。
find [搜索范围] [选项]
-name 按照指定文件名查找文件,后面跟文件或目录名
[root@localhost /]# find -name .bash_history
./root/.bash_history
#不指定模式就会从当前目录找,不会再往下层找
[root@localhost /]# find bash_history
find: ‘bash_history’: 没有那个文件或目录
#查找指定目录下的指定文件(还是必须写参数)
find 指定目录 [参数] 目标文件或目录
[root@localhost /]# find /etc/ -name profile
/etc/lvm/profile
/etc/profile
-user 按照指定用户名查找文件,后面跟用户名
[root@localhost home]# find -user root
.
./xuebiao
-size 按照指定文件大小查找文件,后面跟±n,等于就是n.常用单位M/k.
如果目录中文件小于1M,则需要写1M不加单位才能显示.-1M都不显示.
使用k的话则不受影响.
[root@localhost ~]# find -size -1024k
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.viminfo
[root@localhost ~]# find -size -1M
[root@localhost ~]# find -size +1024k
[root@localhost ~]# find -size 1M
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.viminfo
[root@localhost ~]#
#小文件过多加载时间过久,中断操作Ctrl+c
#find命令适配常用功能字符
[root@localhost ~]# find / -name *txt
/etc/pki/nssdb/pkcs11.txt
/var/cache/yum/x86_64/7/base/mirrorlist.txt
/var/cache/yum/x86_64/7/timedhosts.txt
locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate数据库。由于locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
locate 搜索文件
#执行updatedb 和locate命令,提示 -bash: updatedb: 未找到命令
原因:CentOS7默认没有安装该命令
解决方法:
1.用yum命令安装下mlocate包
yum -y install mlocate
[root@bigdata114 ~]# yum -y install mlocate
[root@localhost home]# locate
locate: 没有指定任何搜索模式
[root@localhost home]# locate xuebiao
locate: 无法执行 stat () '/var/lib/mlocate/mlocate.db': 没有那个文件或目录
[root@localhost home]# updatedb
[root@localhost home]# locate xuebiao
/home/xuebiao
grep 过滤查找,管道符“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。东西很深,再研究.
grep [选项] 查找内容 源文件
[root@localhost ~]# ls -a |grep .bash
.bash_history
.bash_logout
.bash_profile
.bashrc
gzip/gunzip 指令
gzip 用于压缩文件, gunzip 用于解压的
• 基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文 件.gz (功能描述:解压缩文件命令)
• 应用实例
案例 1: gzip 压缩, 将 /home 下的 a.txt 文件进行压缩
[root@localhost xuebiao]# gzip a.txt
[root@localhost xuebiao]# ls
a.txt.gz 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]# ls
a.txt.gz 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]# gunzip a.txt.gz
[root@localhost xuebiao]# ls
a.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]#
细节说明
当我们使用 gzip 对文件进行压缩后,不会保留原来的文件。
zip/unzip 指令
zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的
• 基本语法
zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
• zip 常用选项
-r:递归压缩,即压缩目录
• unzip 的常用选项
-d<目录> :指定解压后文件的存放目录
linux中使用unzip和zip命令时,提示未找到命令
解决方案:
安装zip和unzip命令:
yum list | grep zip/unzip
yum install zip unzip
• 应用实例
案例 1: 将 /home 下的 所有文件进行压缩成 mypackage.zip
[root@localhost xuebiao]# zip -r book /home/xuebiao/
[root@localhost xuebiao]# ls
a.txt book.zip 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]# unzip -d /home/xuebiao/ book.zip
[root@localhost xuebiao]# ls
a.txt book.zip home 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]# cd home/
[root@localhost home]# cd xuebiao/
[root@localhost xuebiao]# ls
a.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xuebiao]#
tar 指令
tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。
• 基本语法
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
• 选项说明
[root@localhost xuebiao]# tar -zcvf xuebiao.tar.gz a.txt red/
a.txt
red/
red/purple.java
[root@localhost xuebiao]# ls
a.txt red xuebiao.tar.gz
[root@localhost xuebiao]# tar -zcvf xuebiao1.tar.gz /home/
[root@localhost xuebiao]# ls
a.txt red xuebiao1.tar.gz xuebiao.tar.gz
[root@localhost xuebiao]# tar -zxvf xuebiao1.tar.gz
[root@localhost xuebiao]# ls
a.txt home red xuebiao1.tar.gz xuebiao.tar.gz
[root@localhost xuebiao]# tar -zxvf xuebiao1.tar.gz -C /home/
[root@localhost home]# ls
home xuebiao 公共 模板 桌面
#指定解压到的那个目录,事先要存在才能成功,否则会报错。
Linux 组基本介绍
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
ll 等价于 ls -l
[root@localhost home]# groupadd police
[root@localhost home]# useradd -g police tom
[root@localhost home]# passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost home]# su - tom
[tom@localhost ~]$ pwd
/home/tom
[tom@localhost ~]$ touch a.txt
[tom@localhost ~]$ ll
总用量 0
-rw-r--r--. 1 tom police 0 1月 31 15:07 a.txt
[tom@localhost ~]$
修改文件所有者
chown 用户名 文件名
要求:使用 root 创建一个文件 apple.txt ,然后将其所有者修改成 tom
chown -R 用户名:用户组 文件夹名称#递归修改文件夹所有者和所有组
[tom@localhost ~]$ su - root
密码:
上一次登录:六 1月 30 08:29:52 CST 2021从 192.168.0.178pts/0 上
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /home/tom/
[root@localhost tom]# touch b.txt
[root@localhost tom]# ll
总用量 0
-rw-r--r--. 1 tom police 0 1月 31 15:07 a.txt
-rw-r--r--. 1 root root 0 1月 31 15:10 b.txt
[root@localhost tom]# chown tom b.txt
[root@localhost tom]# ll
总用量 0
-rw-r--r--. 1 tom police 0 1月 31 15:07 a.txt
-rw-r--r--. 1 tom root 0 1月 31 15:10 b.txt
[root@localhost tom]#
其它组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组.
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用 root 的管理权限可以改变某个用户所在的组。
改变用户所在组
[root@localhost tom]# id tom
uid=1003(tom) gid=1003(police) 组=1003(police)
[root@localhost tom]# usermod -g root tom
[root@localhost tom]# id tom
uid=1003(tom) gid=0(root) 组=0(root)
权限的基本介绍
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9 位说明
1)第 0 位确定文件类型:文件 (-),目录(d),链接(l)
2)第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限。—User
3)第 4-6 位确定所属组(同用户组的)拥有该文件的权限,—Group
4)第 7-9 位确定其他用户拥有该文件的权限 —Other
rwx 权限详解
rwx 作用到文件
[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
[ x ]代表可执行(execute):可以被执行
rwx 作用到目录
[ r ]代表可读(read): 可以读取,ls 查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
可用数字表示为: r=4,w=2,x=1 因此 rwx=4+2+1=7
1 文件:硬连接数 如果是目录:子目录数
root 用户
root 组
1213 文件大小(字节),如果是文件夹,显示 4096 字节
Feb 2 09:39 最后修改日期
abc 文件名
基本说明:
通过 chmod 指令,可以修改文件或者目录的权限
第一种方式:+ 、-、= 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
案例演示
给 abc 文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
给 abc 文件的所有者除去执行的权限,增加组写的权限
第二种方式:通过数字变更权限
规则:r=4 w=2 x=1 ,rwx=4+2+1=7 chmod u=rwx,g=rx,o=x 文件目录名相当于 chmod 751 文件目录名
案例演示
要求:将 /home/abc.txt 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现:
rwx = 4+2+1 = 7
r-x = 4+1=5
r-x = 4+1 =5
指令:chmod 755 /home/abc.txt
修改文件所有者chown
基本介绍
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
[root@localhost zhanglu]# chown zhanglu:police apache-tomcat-9.0.41
[root@localhost zhanglu]# ls
apache-tomcat-9.0.41 apache-tomcat-9.0.41.tar.gz nginx-1.18.0 nginx-1.18.0.tar.gz pcre-8.44 pcre-8.44.tar.gz tom2
[root@localhost zhanglu]# ll
总用量 14252
drwxr-xr-x. 9 zhanglu police 220 1月 28 16:22 apache-tomcat-9.0.41
-rw-r--r--. 1 tom root 11442169 1月 28 16:22 apache-tomcat-9.0.41.tar.gz
drwxr-xr-x. 9 tom 1001 186 1月 28 14:52 nginx-1.18.0
-rw-r--r--. 1 tom root 1039530 1月 28 11:38 nginx-1.18.0.tar.gz
drwxr-xr-x. 9 tom 1169 12288 1月 28 14:51 pcre-8.44
-rw-r--r--. 1 tom root 2090750 1月 28 11:38 pcre-8.44.tar.gz
drwxr-xr-x. 9 tom root 220 1月 29 00:24 tom2
-R 如果是目录 则使其下所有子文件或目录递归生效
案例演示:
请将 /home/kkk 目录下所有的文件和目录的所有者都修改成 tom
首选我们应该使用 root 操作。
[root@localhost home]# ls
tom zhanglu
[root@localhost home]# cd zhanglu/
[root@localhost zhanglu]# ll
总用量 14252
drwxr-xr-x. 9 root root 220 1月 28 16:22 apache-tomcat-9.0.41
-rw-r--r--. 1 root root 11442169 1月 28 16:22 apache-tomcat-9.0.41.tar.gz
drwxr-xr-x. 9 1001 1001 186 1月 28 14:52 nginx-1.18.0
-rw-r--r--. 1 root root 1039530 1月 28 11:38 nginx-1.18.0.tar.gz
drwxr-xr-x. 9 1169 1169 12288 1月 28 14:51 pcre-8.44
-rw-r--r--. 1 root root 2090750 1月 28 11:38 pcre-8.44.tar.gz
drwxr-xr-x. 9 root root 220 1月 29 00:24 tom2
[root@localhost zhanglu]# cd ..
[root@localhost home]# chown -R tom zhanglu/
[root@localhost home]# cd zhanglu/
[root@localhost zhanglu]# ll
总用量 14252
drwxr-xr-x. 9 tom root 220 1月 28 16:22 apache-tomcat-9.0.41
-rw-r--r--. 1 tom root 11442169 1月 28 16:22 apache-tomcat-9.0.41.tar.gz
drwxr-xr-x. 9 tom 1001 186 1月 28 14:52 nginx-1.18.0
-rw-r--r--. 1 tom root 1039530 1月 28 11:38 nginx-1.18.0.tar.gz
drwxr-xr-x. 9 tom 1169 12288 1月 28 14:51 pcre-8.44
-rw-r--r--. 1 tom root 2090750 1月 28 11:38 pcre-8.44.tar.gz
drwxr-xr-x. 9 tom root 220 1月 29 00:24 tom2
修改文件所在组-chgrp
基本介绍
chgrp newgroup file 改变文件的所有组
[root@localhost zhanglu]# chgrp police nginx-1.18.0
[root@localhost zhanglu]# ll
总用量 14252
drwxr-xr-x. 9 zhanglu police 220 1月 28 16:22 apache-tomcat-9.0.41
-rw-r--r--. 1 tom root 11442169 1月 28 16:22 apache-tomcat-9.0.41.tar.gz
drwxr-xr-x. 9 tom police 186 1月 28 14:52 nginx-1.18.0
-rw-r--r--. 1 tom root 1039530 1月 28 11:38 nginx-1.18.0.tar.gz
drwxr-xr-x. 9 tom 1169 12288 1月 28 14:51 pcre-8.44
-rw-r--r--. 1 tom root 2090750 1月 28 11:38 pcre-8.44.tar.gz
drwxr-xr-x. 9 tom root 220 1月 29 00:24 tom2
crontab 进行定时任务的设置。
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
crontab [选项]
常用选项:-e 编辑crontab定时任务
-l 查询crontab定时任务
-r 删除当前用户所有的crontab任务
service crond restart [重启任务调度]
快速入门
任务的要求
设置任务调度文件:/etc/crontab
设置个人任务调度。执行 crontab –e 命令.接着输入任务到调度文件.
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
参数细节说明
意思说每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
步骤如下
cron -e
*/ 1 * * * * ls -l /etc >> /tmp/to.txt
当保存退出后就程序。
在每一分钟都会自动的调用 ls -l /etc >> /tmp/to.txt
任务调度的几个应用实例
案例 1:每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
编写一个文件/home/mytask1.sh
写入
date >> /tmp/mydate
设置mytask1.sh权限
chmod 744 /home/mytask1.sh
crontab -e
写入
*/1 * * * * /home/mytask1.sh
测试成功
案例 2:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中.
先编写一个文件/home/mytask2.sh
写入
date >> /tmp/mycal
cal >> /tmp/mycal
设置mytask2.sh执行权限
chmod 744 /home/mytask2.sh
crontab -e
写入
*/1 * * * * /home/mytask2.sh
测试成功
案例 3: 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中
mydb.bak。
先编写一个文件/home/mytask3.sh
写入
/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
设置mytask3.sh执行权限
chmod 744 /home/mytask3.sh
crontab -e
0 2 * * * /home/mytask3.sh
测试成功
分区基础知识
分区的方式:
mbr 分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR 最大只支持 2TB,但拥有最好的兼容性
gpt分区
1.支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
2.最大支持18EB的大容量(1EB=1024PB,1PB=1024TB)
3.win7 64位以后支持gpt
windows 下的磁盘分区
Linux 分区
原理介绍
Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。
Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。
硬盘说明
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘.
对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样。
lsblk 列出块设备信息
[root@localhost xuebiao]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 50G 0 disk
├─sda2 8:2 0 49G 0 part
│ ├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
│ └─centos-root 253:0 0 45.1G 0 lvm /
└─sda1 8:1 0 1G 0 part /boot
#查看磁盘信息
[root@xuebiao ~]# fdisk -l
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x47ff07a2
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a284b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857599 51379200 8e Linux LVM
磁盘 /dev/mapper/centos-root:50.5 GB, 50457477120 字节,98549760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
#查看磁盘格式
[root@xuebiao ~]# df -T
文件系统 类型 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 49250820 1028068 48222752 3% /
devtmpfs devtmpfs 928968 0 928968 0% /dev
tmpfs tmpfs 941048 0 941048 0% /dev/shm
tmpfs tmpfs 941048 9040 932008 1% /run
tmpfs tmpfs 941048 0 941048 0% /sys/fs/cgroup
/dev/sda1 xfs 1038336 148420 889916 15% /boot
tmpfs tmpfs 188212 0 188212 0% /run/user/0
#分区的初始化
[root@xuebiao ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):
先输入n表示设定新的硬盘分割区
再输入p表示设置的是主要分割区
输入回车表示选择默认,所以
分区号默认选择1
起始扇区选择默认2048
最后的扇区选择默认1048575999
输入w保存
另外附上命令介绍:
1. 输入 m 显示所有命令列示。
2. 输入 p 显示硬盘分割情形,打印分区表。
3. 输入 a 设定硬盘启动区。
4. 输入 n 设定新的硬盘分割区。
4.1. 输入 e 硬盘为[延伸]分割区(extend)。
4.2. 输入 p 硬盘为[主要]分割区(primary)。
5. 输入 t 改变硬盘分割区属性。
t:分区系统id号
L:82:linux swap
83:linux
86:NTFS window分区
6. 输入 d 删除硬盘分割区属性。
7. 输入 q 结束不存入硬盘分割区属性。
8. 输入 w 结束并写入硬盘分割区属性
#对创建的分区进行格式化
#查看刚刚分配的磁盘号
fdisk -l
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
格式化磁盘:
mkfs -t ext4 /dev/sdb1
-t 表示指定格式化磁盘的文件系统类型为ext4,默认不指定为ext2(比较老的linux文件系统类型)
#挂载硬盘
创建目录/xhome
挂载磁盘,将/dev/sdb1磁盘挂载(mount)到文件系统的/homework目录上
[root@xuebiao ~]# mount /dev/sdb1 /xhome
#查看挂载情况
[root@xuebiao ~]# df -HT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 51G 1.1G 50G 3% /
devtmpfs devtmpfs 952M 0 952M 0% /dev
tmpfs tmpfs 964M 0 964M 0% /dev/shm
tmpfs tmpfs 964M 9.3M 955M 1% /run
tmpfs tmpfs 964M 0 964M 0% /sys/fs/cgroup
/dev/sda1 xfs 1.1G 152M 912M 15% /boot
tmpfs tmpfs 193M 0 193M 0% /run/user/0
/dev/sdb1 ext4 22G 47M 20G 1% /xhome
#设置开机启动自动挂载磁盘分区
编辑/etc/fstab文件(防止系统重启后挂载丢失)
/etc/fstab是在开机引导的时候自动挂载到linux的文件系统
[root@xuebiao ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Mar 31 17:59:34 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=eb8a555d-2d71-4eeb-a2ae-4b60e5acc0f5 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /xhome ext4 defaults 0 0
重启系统验证是否成功
输入reboot重启,输入df -HT查看磁盘情况
[root@xuebiao ~]# df -HT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 51G 1.1G 50G 3% /
devtmpfs devtmpfs 952M 0 952M 0% /dev
tmpfs tmpfs 964M 0 964M 0% /dev/shm
tmpfs tmpfs 964M 9.3M 955M 1% /run
tmpfs tmpfs 964M 0 964M 0% /sys/fs/cgroup
/dev/sdb1 ext4 22G 47M 20G 1% /xhome
/dev/sda1 xfs 1.1G 152M 912M 15% /boot
tmpfs tmpfs 193M 0 193M 0% /run/user/0
成功
临时卸载,重启机器之后又恢复到挂载状态
umount /dev/sdc
永久卸载
vim /etc/fstab
把添加的磁盘信息删除即可。重启机器查看是否卸载
查询系统整体磁盘使用情况
基本语法
df -h
应用实例
查询系统整体磁盘使用情况
[root@localhost xuebiao]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.6M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 5.4G 40G 12% /
/dev/sda1 1014M 147M 868M 15% /boot
tmpfs 394M 0 394M 0% /run/user/0
[root@localhost xuebiao]#
查询指定目录的磁盘占用情况
基本语法
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
应用实例
查询 /opt 目录的磁盘占用情况,深度为 1
磁盘情况
#统计某个文件夹下文件的个数
[root@localhost xuebiao]# ls
mysql.txt test.sh test.txt xue
[root@localhost xuebiao]# ll /home/xuebiao/ | grep "^-" | wc -l
3
#统计/home 文件夹下目录的个数
[root@localhost xuebiao]# ll /home/xuebiao/ | grep "^d" | wc -l
1
#统计/home 文件夹下文件的个数,包括子文件夹里的
[root@localhost xuebiao]# ll -R /home/ | grep "^-" | wc -l
602
#统计文件夹下目录的个数,包括子文件夹里的
[root@localhost xuebiao]# ll -R /home/ | grep "^d" | wc -l
17
wc -l
统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。
linux查看端口占用情况
方法1
#lsof是一个软件,用yum下载即可
lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lwfs 22065 root 6u IPv4 4395053 0t0 TCP *:irdmi (LISTEN)
方法2
netstat -tunlp |grep 端口号
netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 22065/lwfs
#-t (tcp) 仅显示tcp相关选项
#-u (udp)仅显示udp相关选项
#-n 拒绝显示别名,能显示数字的全部转化为数字
#-l 仅列出在Listen(监听)的服务状态
#-p 显示建立相关链接的程序名
进程的基本介绍
1)在 LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号。
2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程的指令是 ps ,一般来说使用的参数是 ps -aux
ps 指令详解
ps –aux|grep xxx #显示的东西多一点
ps -ef | more
ps -ef是以全格式显示当前所有的进程(和aux的区别就是显示的少一点,打印方式不一样)
-e 显示所有进程
-f 全格式
[root@localhost tom]# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:21 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 14:21 ? 00:00:00 [kthreadd]
root 4 2 0 14:21 ? 00:00:00 [kworker/0:0H]
[root@localhost tom]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128600 7260 ? Ss 14:21 0:02 /usr/lib/systemd/systemd --switched-root --system --des
root 2 0.0 0.0 0 0 ? S 14:21 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:21 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 14:21 0:00 [kworker/u2:0]
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
终止进程 kill 和 killall
介绍:
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。
基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项:
-9 :表示强迫进程立即停止
[root@localhost ~]# gedit 111
[root@localhost ~]# killall gedit
kill -15 pid # 相对安全
查看进程树 pstree
pstree [选项] 可以更加直观的来看进程信息
-p 显示PID
-u 显示进程所属用户
[root@localhost ~]# pstree -p
systemd(1)─┬─ModemManager(735)─┬─{ModemManager}(754)
│ └─{ModemManager}(758)
├─NetworkManager(783)─┬─dhclient(5077)
│ ├─{NetworkManager}(789)
│ └─{NetworkManager}(792)
├─abrt-watch-log(703)
├─abrt-watch-log(724)
├─abrtd(702)
├─agetty(1130)
├─alsactl(740)
├─atd(1132)
├─auditd(673)─┬─audispd(675)─┬─sedispatch(677)
│ │ └─{audispd}(678)
│ └─{auditd}(674)
├─avahi-daemon(745)───avahi-daemon(761)
├─chronyd(752)
├─crond(4496)
├─cupsd(1107)
├─dbus-daemon(708)───{dbus-daemon}(719)
├─dnsmasq(1377)───dnsmasq(1381)
├─firewalld(772)───{firewalld}(910)
├─gssproxy(737)─┬─{gssproxy}(746)
│ ├─{gssproxy}(747)
│ ├─{gssproxy}(748)
│ ├─{gssproxy}(749)
│ └─{gssproxy}(750)
├─ksmtuned(776)───sleep(6820)
├─libvirtd(1121)─┬─{libvirtd}(1142)
│ ├─{libvirtd}(1143)
│ ├─{libvirtd}(1144)
│ ├─{libvirtd}(1145)
│ ├─{libvirtd}(1146)
│ ├─{libvirtd}(1147)
│ ├─{libvirtd}(1148)
│ ├─{libvirtd}(1149)
│ ├─{libvirtd}(1150)
│ ├─{libvirtd}(1151)
│ ├─{libvirtd}(1183)
│ ├─{libvirtd}(1184)
│ ├─{libvirtd}(1185)
│ ├─{libvirtd}(1186)
│ ├─{libvirtd}(1187)
│ └─{libvirtd}(1216)
├─lsmd(722)
├─lvmetad(503)
├─master(1575)─┬─pickup(5616)
│ └─qmgr(1585)
├─nginx(2055)───nginx(2073)
├─packagekitd(3996)─┬─{packagekitd}(3997)
│ └─{packagekitd}(3998)
├─polkitd(707)─┬─{polkitd}(716)
│ ├─{polkitd}(720)
│ ├─{polkitd}(723)
│ ├─{polkitd}(725)
│ ├─{polkitd}(726)
│ └─{polkitd}(728)
├─rngd(704)
├─rpcbind(712)
├─rsyslogd(1112)─┬─{rsyslogd}(1120)
│ └─{rsyslogd}(1124)
├─smartd(706)
├─sshd(1109)─┬─sshd(5106)───bash(5110)
│ └─sshd(6691)───bash(6695)───pstree(6828)
├─systemd-journal(486)
├─systemd-logind(742)
├─systemd-udevd(523)
└─tuned(1111)─┬─{tuned}(1514)
├─{tuned}(1515)
├─{tuned}(1520)
└─{tuned}(1523)
[root@localhost ~]#
一般vmstat工具的使用是通过两个数字参数来完成的:
第一个参数: 采样的时间间隔数,单位是秒,
第二个参数: 采样的次数
[root@izuf633l0ge76tv5mzalpmz ~]# vmstat 2 12
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 835920 80296 642904 0 0 1 1 14 69 0 0 100 0 0
0 0 0 835920 80296 642936 0 0 0 0 216 304 1 1 99 0 0
0 0 0 835920 80296 642936 0 0 0 0 208 313 0 1 99 0 0
0 0 0 835920 80300 642936 0 0 0 8 186 292 0 0 99 1 0
0 0 0 835920 80300 642936 0 0 0 0 115 274 0 0 99 0 0
0 0 0 835920 80300 642936 0 0 0 0 115 278 0 0 100 0 0
0 0 0 835920 80300 642936 0 0 0 0 115 280 1 0 100 0 0
0 0 0 835920 80300 642936 0 0 0 0 117 284 0 1 99 0 0
0 0 0 835920 80300 642936 0 0 0 0 113 276 0 0 100 0 0
0 0 0 835920 80300 642936 0 0 0 0 114 281 0 1 100 0 0
0 0 0 835920 80300 642936 0 0 0 0 119 285 1 0 99 0 0
0 0 0 835920 80300 642936 0 0 0 0 111 274 0 0 100 0 0
[root@izuf633l0ge76tv5mzalpmz ~]#
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
[root@izuf633l0ge76tv5mzalpmz ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 836068 80304 642936 0 0 1 1 14 69 0 0 100 0 0
0 0 0 836044 80304 642936 0 0 0 0 228 324 0 0 100 0 0
0 0 0 836044 80304 642936 0 0 0 0 233 334 1 1 99 0 0
... ...
这表示vmstat每2秒采集数据,一直采集,直到我结束程序。
参数详解
Linux 内存监控vmstat命令输出分成六个部分:
进程procs
r:在运行队列中等待的进程数 。
b:在等待io的进程数 。
内存memoy
swpd:现时可用的交换内存(单位KB)。
free:空闲的内存(单位KB)。
buff: 缓冲去中的内存数(单位:KB)。
cache:被用来做为高速缓存的内存数(单位:KB)。
swap交换页面
si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
io块设备:
bi: 发送到块设备的块数,单位:块/秒。
bo: 从块设备接收到的块数,单位:块/秒。
system系统:
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)转换次数。
cpu中央处理器:
cs:用户进程使用的时间 。以百分比表示。
sy:系统进程使用的时间。 以百分比表示。
id:中央处理器的空闲时间 。以百分比表示。
常见诊断:
1、假如 r 经常大于4 ,且 id 经常小于40,表示中央处理器的负荷很重。
2、假如 bi,bo 长期不等于0,表示物理内存容量太小。
每个参数的具体意思如下:
r
表示运行队列(就是说多少个进程真的分配到CPU),
我测试的服务器目前CPU比较空闲,没什么程序在跑,
当这个值超过了CPU数目,就会出现CPU瓶颈 了。
这个也和top的负载有关系,
一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。
top的负载类似每秒的运行队 列。
如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b
表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd
虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,
如果不是程序内存泄露的原因,
那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free
空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff
Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache
cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M
(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,
是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si
每秒从磁盘读入虚拟内存的大小,如果这个值大于0,
表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
我的机器内存充裕,一切正常。
so
每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi
块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,
默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,
但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,
磁盘写入速度差不多140M每秒
bo
块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。
bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in
每秒CPU的中断次数,包括时间中断
cs
每秒上下文切换次数,
例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,
这个值要越小越好,太大了,要考虑调低线程或者进程的 数目,
例如在apache和nginx这种web服务器中,
我们一般做性能测试时会进行几千并发甚至几万并发的测试,
选择web服务器的进程可以由进程或 者线程的峰值一直下调,压测,
直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。
系统调用也是,每次调用系统函数,我们的代码就会进入内核 空间,导致上下文切换,
这个是很耗资源,也要尽量避免频繁调用系统函数。
上下文切换次数过多表示你的CPU大部分浪费在上下文切换,
导致CPU干正经事的 时间少了,CPU没有充分利用,是不可取的。
us
用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,
可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy
系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id
空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,
us是用户CPU使用率,sy是系统CPU使用率。
wt
等待IO CPU时间。
sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。
例如每1秒采集一次CPU使用率,共采集5次。
[root@sss ~]# sar -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
04:56:03 PM CPU %user %nice %system %iowait %steal %idle
04:56:04 PM all 0.00 0.00 0.00 0.00 0.00 100.00
04:56:05 PM all 0.00 0.00 0.00 0.00 0.00 100.00
04:56:06 PM all 0.99 0.00 0.99 0.00 0.00 98.02
04:56:07 PM all 0.00 0.00 0.00 0.00 0.00 100.00
04:56:08 PM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.20 0.00 0.20 0.00 0.00 99.60
和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。
[root@sss ~]# sar -P 0 -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
04:39:13 PM CPU %user %nice %system %iowait %steal %idle
04:39:14 PM 0 0.00 0.00 0.99 0.00 0.00 99.01
04:39:15 PM 0 0.00 0.00 0.00 0.00 0.00 100.00
04:39:16 PM 0 0.00 0.00 0.00 0.00 0.00 100.00
04:39:17 PM 0 0.00 0.00 0.00 0.00 0.00 100.00
04:39:18 PM 0 1.00 0.00 0.00 0.00 0.00 99.00
Average: 0 0.20 0.00 0.20 0.00 0.00 99.60
[root@izuf633l0ge76tv5mzalpmz ~]#
进程队列长度和平均负载状态
例如每1秒采集一次,共采集5次。
[root@sss ~]# sar -q 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
04:40:14 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
04:40:15 PM 0 149 0.00 0.01 0.05 0
04:40:16 PM 0 149 0.00 0.01 0.05 0
04:40:17 PM 0 149 0.00 0.01 0.05 0
04:40:18 PM 1 149 0.00 0.01 0.05 0
04:40:19 PM 1 149 0.00 0.01 0.05 0
Average: 0 149 0.00 0.01 0.05 0
输出项:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
创建的平均值和上下文切换的次数
例如每1秒收集一次,共收集5次。
[root@sss ~]# sar -w 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
04:41:39 PM proc/s cswch/s
04:41:40 PM 0.00 274.26
04:41:41 PM 0.00 277.78
04:41:42 PM 0.00 285.00
04:41:43 PM 0.00 280.00
04:41:44 PM 0.00 270.00
Average: 0.00 277.40
sar命令也可以获取过去指定日期的性能参数。
[root@sss ~]# sar -u -f /var/log/sa/sa08
Linux 3.10.0-693.2.2.el7.x86_64 (localhost.localdomain) 04/08/2019 _x86_64_ (1 CPU)
10:54:35 AM LINUX RESTART
11:00:02 AM CPU %user %nice %system %iowait %steal %idle
11:10:01 AM all 12.93 0.23 2.89 1.54 0.00 82.41
11:20:01 AM all 46.58 0.00 8.81 0.79 0.00 43.82
11:30:01 AM all 44.93 0.00 9.68 0.15 0.00 45.24
11:40:02 AM all 0.25 0.00 0.15 0.00 0.00 99.60
11:50:01 AM all 0.19 0.00 0.13 0.00 0.00 99.68
12:00:01 PM all 0.31 0.00 0.19 0.14 0.00 99.37
... ...
这个命令也在sysstat包中,语法类似。
cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。
例如每1秒收集一次,共5次。
[root@sss ~]# mpstat 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
04:58:01 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:58:02 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:58:03 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:58:04 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:58:05 PM all 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
04:58:06 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。
[root@sss ~]# iostat -c 1 2
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz) 04/16/2019 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.26 0.00 0.21 0.01 0.00 99.53
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
每秒cpu使用率情况获取
[root@sss ~]# dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
0 0 100 0 0 0
0 1 99 0 0 0
1 0 99 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
1 1 98 0 0 0
0 0 100 0 0 0
... ...
最占cpu的进程获取
[root@sss ~]# dstat --top-cpu
-most-expensive-
cpu process
AliYunDun 0.2
AliYunDun 2.0
mysqld 1.0
AliYunDun 1.0
kworker/0:1H 1.0
AliYunDun 1.0
AliYunDun 1.0
AliYunDun 1.0
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。
命令格式:free [参数]
命令功能:free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
使用实例:
实例1:显示内存使用情况
free [-k] # 以 kb 为单位显示内存使用状况
free -g # 以 G 为单位显示内存使用状况
free -m # 以 M 为单位显示内存使用状况
free -t # 以总和的形式显示内存的使用信息
free -s 1 # 每一秒显示内存使用情况
[root@sss ~]# free
total used free shared buff/cache available
Mem: 1882232 331760 811004 592 739468 1384944
Swap: 0 0 0
[root@sss ~]# free -g
total used free shared buff/cache available
Mem: 1 0 0 0 0 1
Swap: 0 0 0
[root@sss ~]# free -m
total used free shared buff/cache available
Mem: 1838 324 791 0 722 1352
Swap: 0 0 0
[root@sss ~]# free -t
total used free shared buff/cache available
Mem: 1882232 331760 811004 592 739468 1384948
Swap: 0 0 0
Total: 1882232 331760 811004
[root@sss ~]# free -s 1
total used free shared buff/cache available
Mem: 1882232 331760 811004 592 739468 1384948
Swap: 0 0 0
total used free shared buff/cache available
Mem: 1882232 331784 810980 592 739468 1384924
Swap: 0 0 0
total used free shared buff/cache available
Mem: 1882232 331784 810980 592 739468 1384924
Swap: 0 0 0
... ...
说明–对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buff/cache:磁盘缓存的大小。
第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
当可用内存少于额定值的时候,就会进行交换
如何看额定值:
命令:
cat /proc/meminfo
输出:
[root@sss ~]# cat /proc/meminfo
MemTotal: 1882232 kB
MemFree: 811244 kB
MemAvailable: 1385300 kB
Buffers: 81268 kB
Cached: 602500 kB
SwapCached: 0 kB
Active: 601948 kB
Inactive: 379880 kB
Active(anon): 298392 kB
Inactive(anon): 256 kB
Active(file): 303556 kB
Inactive(file): 379624 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 320 kB
Writeback: 0 kB
AnonPages: 298052 kB
Mapped: 47236 kB
Shmem: 592 kB
Slab: 55772 kB
SReclaimable: 44076 kB
SUnreclaim: 11696 kB
KernelStack: 2384 kB
PageTables: 5808 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 941116 kB
Committed_AS: 810896 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 10604 kB
VmallocChunk: 34359719676 kB
HardwareCorrupted: 0 kB
AnonHugePages: 237568 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 63360 kB
DirectMap2M: 2033664 kB
DirectMap1G: 0 kB
交换将通过三个途径来减少系统中使用的物理页面的个数:
1.减少缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去,
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。
那buffers和cached都是缓存,两者有什么区别呢?
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
实例2:以总和的形式显示内存的使用信息
[root@sss ~]# free -t
total used free shared buff/cache available
Mem: 1882232 331760 811004 592 739468 1384948
Swap: 0 0 0
Total: 1882232 331760 811004
实例3:周期性的查询内存使用信息,每10s 执行一次命令
[root@sss ~]# free -s 10
total used free shared buff/cache available
Mem: 1882232 324924 816688 496 740620 1392280
Swap: 0 0 0
total used free shared buff/cache available
Mem: 1882232 324944 816664 496 740624 1392260
Swap: 0 0 0
[root@sss ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41151808 3794244 35244132 10% /
devtmpfs 930644 0 930644 0% /dev
tmpfs 941116 0 941116 0% /dev/shm
tmpfs 941116 468 940648 1% /run
tmpfs 941116 0 941116 0% /sys/fs/cgroup
tmpfs 188224 0 188224 0% /run/user/0
磁盘使用率=(Used列数据之和)/(1k-blocks列数据之和)
磁盘和内存的区别与联系:
(磁盘–也叫硬盘–或是U盘–或是移动硬盘)
1、硬盘与内存都是存储器,一个是内部,一个是外部。
2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
2)内存是半导体材料制作,硬盘是磁性材料制作;
3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
3、内存与硬盘的联系也非常密切:
硬盘上的信息永远是暂时不用的,要用请装入内存!
CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
介绍:
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点.
在 CentOS7.0 后 不再使用 service ,而是 systemctl
systemctl(选项)(参数)
service 参数 选项
systemctl命令 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
任务 | 旧指令 | 新指令 |
---|---|---|
使某服务自动启动 | chkconfig --level 3 httpd on | systemctl enable httpd.service |
使某服务不自动启动 | chkconfig --level 3 httpd off | systemctl disable httpd.service |
检查服务状态 | service httpd status | systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active) |
显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
启动服务 | service httpd start | systemctl start httpd.service |
停止服务 | service httpd stop | systemctl stop httpd.service |
重启服务 | service httpd restart | systemctl restart httpd.service |
重载服务 | service httpd reload | systemctl reload httpd.service |
开机的流程说明
chkconfig 指令介绍
通过 chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭查看服务 chkconfig --list | grep xxx
[root@localhost ~]# chkconfig --list
注:该输出结果只显示SysV服务,并不包含原生systemd服务。SysV配置数据可能被原生 systemd 配置覆盖。要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
chkconfig 服务名 --list
[root@localhost ~]# chkconfig network --list
注:该输出结果只显示SysV服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
chkconfig --level 5 服务名 on/off
请将 sshd 服务在运行级别为 5 的情况下,不要自启动。(centos7中这个命令很多已经改了,找不到了)
[root@localhost ~]# chkconfig --level 4 netconsole on
[root@localhost ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:开 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
使用细节:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 才能生效.
动态监控进程
介绍:
top 与 ps 命令很相似。它们都用来显示正在执行的进程。Top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的的进程。
top [选项]
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
应用实例:
监视特定用户
top -u 用户名
结束进程
top回车,按k,输入要关闭的进程号
指定系统状态更新的时间(每隔 10 秒自动更新, 默认是 3 秒):
top -d 10
查看系统网络情况 netstat(重要)
netstat [选项]
netstat -anp
• 选项说明
-an 按一定顺序排列输出
-p 显示哪个进程在调用
• 应用案例
[root@localhost ~]# netstat -anp | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 708/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1374/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1111/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1109/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1569/master
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1592/sshd: root@pts
tcp 0 52 192.168.0.73:22 192.168.0.178:52639 ESTABLISHED 1592/sshd: root@pts
tcp6 0 0 :::111 :::* LISTEN 708/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1111/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1109/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1569/master
tcp6 0 0 ::1:6010 :::* LISTEN 1592/sshd: root@pts
#请查看服务名为 sshd 的服务的信息。
[root@localhost ~]# netstat -anp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1111/sshd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1592/sshd: root@pts
tcp 0 52 192.168.0.73:22 192.168.0.178:52639 ESTABLISHED 1592/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1111/sshd
tcp6 0 0 ::1:6010 :::* LISTEN 1592/sshd: root@pts
unix 3 [ ] STREAM CONNECTED 21127 1111/sshd
unix 2 [ ] DGRAM 24324 1592/sshd: root@pts
rpm是一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windows 的setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。Linux 的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了。
简单查询命令
查询已安装的rpm列表
rpm -qa
查询当前系统有没有安装firefox
[root@localhost ~]# rpm -qa | grep firefox
firefox-78.6.1-1.el7.centos.x86_64
rpm 包名基本格式:
一个 rpm 包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统: el6.centos.x86_64表示 centos6.x 的 64 位系统
如果是 i686、i386 表示 32 位系统,noarch表示通用
rpm -qi 软件包名 :查询软件包信息
[root@localhost ~]# rpm -qi firefox
Name : firefox
Version : 78.6.1
Release : 1.el7.centos
Architecture: x86_64
Install Date: 2021年01月22日 星期五 15时44分05秒
Group : Unspecified
Size : 257336409
License : MPLv1.1 or GPLv2+ or LGPLv2+
Signature : RSA/SHA256, 2021年01月15日 星期五 23时30分10秒, Key ID 24c6a8a7f4a80eb5
Source RPM : firefox-78.6.1-1.el7.centos.src.rpm
Build Date : 2021年01月14日 星期四 23时19分48秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://www.mozilla.org/firefox/
Summary : Mozilla Firefox Web browser
Description :
Mozilla Firefox is an open-source web browser, designed for standards
compliance, performance and portability.
rpm -qf 文件全路径名 查询文件所属的软件包
[root@localhost ~]# rpm -qf /etc/passwd
setup-2.8.71-11.el7.noarch
卸载 rpm 包:
rpm -e RPM 包的名称
[root@localhost ~]# rpm -q firefox
firefox-78.6.1-1.el7.centos.x86_64
[root@localhost ~]# rpm -e firefox
[root@localhost ~]# rpm -q firefox
未安装软件包 firefox
细节问题
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
如果我们就是要删除 foo 这个 rpm 包,可以增加参数 --nodeps ,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
rpm -e --nodeps foo
带上 --nodeps 就是强制删除。
安装 rpm 包:
rpm -ivh RPM包全路径名称
i=install 安装
v=verbose 提示
h=hash 进度条
yum(Yellow dog Updater Modified)的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器。起初是由yellow dog 这一发行版的开发者Terra Soft 研发,用python 写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke 开发团队进行改进,遂有此名。yum 的宗旨是自动化地升级,安装/移除rpm 包,收集rpm 包的相关信息,检查依赖性并自动提示用户解决。yum 的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http 或ftp 站点,也可以是本地软件池,但必须包含rpm 的header,header 包括了rpm 包的各种信息,包括描述,功能,提供的文件,依赖性等。正是收集了这些header 并加以分析,才能自动化地完成余下的任务。
yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了Linux 用户一直头痛的dependencies 的问题。这一点上,yum 和apt 相同。apt 原为debian 的deb 类型软件管理所使用,但是现在也能用到RedHat 门下的rpm 了。
yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题。
yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf),自动解决增加或删除rpm 包时遇到的依赖性问题,保持与RPM 数据库的一致性。
yum 的基本指令
yum list | grep xxx 查询yum服务器有没有这个软件
[root@localhost media]# yum list | grep firefox
firefox.i686 78.6.1-1.el7.centos updates
firefox.x86_64 78.6.1-1.el7.centos updates
yum install -y xxx 下载并安装某个软件
-y 安装过程的所有判断全部yes
[root@localhost media]# yum install -y xorg-x11-drv-openchrome-devel.x86_64
yum 的基础安装包包括:
yum //RPM installer/updater
yum-fastestmirror //Yum plugin which chooses fastest repository from a mirrorlist
yum-metadata-parser //A fast metadata parser for yum
其他安装包根据自己需要安装。
yum 配置
yum 的配置文件分为两部分:main 和repository
main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main。常位于/etc/yum.conf 中。
repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。
yum.conf 文件一般位于/etc目录下,一般其中只包含main部分的配置选项。
# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum
//yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/cache/yum
keepcache=0
//安装完成后是否保留软件包,0为不保留(默认为0),1为保留
debuglevel=2
//Debug 信息输出等级,范围为0-10,缺省为2
logfile=/var/log/yum.log
//yum 日志文件位置。用户可以到/var/log/yum.log 文件去查询过去所做的更新。
pkgpolicy=newest
//包的策略。一共有两个选项,newest 和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository 中同时存在,yum 应该安装哪一个,如果是newest,则yum 会安装最新的那个版本。如果是last,则yum 会将服务器id 以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
distroverpkg=redhat-release
//指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm 包。
tolerant=1
//有1和0两个选项,表示yum 是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum 不会出现错误信息。默认是0。
exactarch=1
//有1和0两个选项,设置为1,则yum 只会安装和系统架构匹配的软件包,例如,yum 不会将i686的软件包安装在适合i386的系统中。默认为1。
retries=6
//网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6.
obsoletes=1
//这是一个update 的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
plugins=1
//是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
除了上述之外,还有一些可以添加的选项,如:
exclude=selinux* // 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
gpgcheck=1 // 有1和0两个选择,分别代表是否是否进行gpg(GNU Private Guard) 校验,以确定rpm 包的来源是有效和安全的。这个选项如果设置在[main]部分,则对每个repository 都有效。默认值为0。
四、配置本地yum源
1、挂载系统安装光盘
# mount /dev/cdrom /mnt/cdrom/
2、配置本地yum源
# cd /etc/yum.repos.d/
# ls
会看到四个repo 文件
CentOS-Base.repo 是yum 网络源的配置文件
CentOS-Media.repo 是yum 本地源的配置文件
修改CentOS-Media.repo
# cat CentOS-Media.repo
# CentOS-Media.repo
#
# This repo is used to mount the default locations for a CDROM / DVD on
# CentOS-5. You can use this repo and yum to install items directly off the
# DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
# yum --enablerepo=c5-media [command]
#
# or for ONLY the media repo, do this:
#
# yum --disablerepo=\* --enablerepo=c5-media [command]
[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///mnt/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
在baseurl 中修改第2个路径为/mnt/cdrom(即为光盘挂载点)
将enabled=0改为1
3、禁用默认的yum 网络源
将yum 网络源配置文件改名为CentOS-Base.repo.bak,否则会先在网络源中寻找适合的包,改名之后直接从本地源读取。
4、执行yum 命令
# yum install postgresql
关于repo 文件的格式
所有repository 服务器设置都应该遵循如下格式:
[serverid]
name=Some name for this server
baseurl=url://path/to/repository/
serverid 是用于区别各个不同的repository,必须有一个独一无二的名称;
name 是对repository 的描述,支持像releaseverbasearch这样的变量;
baseurl 是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
其中url 支持的协议有 http:// ftp:// file:// 三种。baseurl 后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl 只能有一个,也就是说不能像如下格式:
baseurl=url://server1/path/to/repository/
baseurl=url://server2/path/to/repository/
baseurl=url://server3/path/to/repository/
其中url 指向的目录必须是这个repository header 目录的上一级,它也支持releaseverbasearch 这样的变量。
url 之后可以加上多个选项,如gpgcheck、exclude、failovermethod 等,比如:
[updates-released]
name=Fedora Core releasever−basearch - Released Updates
baseurl=http://download.atrpms.net/mirrors/fedoracore/updates/releasever/basearch
http://redhat.linux.ee/pub/fedora/linux/core/updates/releasever/basearch
http://fr2.rpmfind.net/linux/fedora/core/updates/releasever/basearch
gpgcheck=1
exclude=gaim
failovermethod=priority
其中gpgcheck,exclude 的含义和[main] 部分相同,但只对此服务器起作用,failovermethode 有两个选项roundrobin 和priority,意思分别是有多个url可供选择时,yum 选择的次序,roundrobin 是随机选择,如果连接失败则使用下一个,依次循环,priority 则根据url 的次序从第一个开始。如果不指明,默认是roundrobin。
五、配置国内yum源
系统默认的yum 源速度往往不尽人意,为了达到快速安装的目的,在这里修改yum源为国内源。
上海交通大学yum源
a. 修改/etc/yum.repos.d/CentOS-Base.repo为:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=os
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/os/basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=updates
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/updates/basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=extras
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/extras/basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=centosplus
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/centosplus/basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=contrib
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/contrib/basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
关于变量
$releasever:代表发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
$arch:cpu体系,如i686,athlon等
$basearch:cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
b. 导入GPG KEY
yum 可以使用gpg 对包进行校验,确保下载包的完整性,所以我们先要到各个repository 站点找到gpg key,一般都会放在首页的醒目位置,一些名字诸如RPM-GPG-KEY-CentOS-5 之类的纯文本文件,把它们下载下来,然后用rpm --import RPM-GPG-KEY-CentOS-5 命令将key 导入。
c. 执行yum 命令
其他国内yum源列表如下:
1. 企业贡献:
搜狐开源镜像站:http://mirrors.sohu.com/
网易开源镜像站:http://mirrors.163.com/
2. 大学教学:
北京理工大学:
http://mirror.bit.edu.cn (IPv4 only)
http://mirror.bit6.edu.cn (IPv6 only)
北京交通大学:
http://mirror.bjtu.edu.cn (IPv4 only)
http://mirror6.bjtu.edu.cn (IPv6 only)
http://debian.bjtu.edu.cn (IPv4+IPv6)
兰州大学:http://mirror.lzu.edu.cn/
厦门大学:http://mirrors.xmu.edu.cn/
清华大学:
http://mirrors.tuna.tsinghua.edu.cn/ (IPv4+IPv6)
http://mirrors.6.tuna.tsinghua.edu.cn/ (IPv6 only)
http://mirrors.4.tuna.tsinghua.edu.cn/ (IPv4 only)
天津大学:http://mirror.tju.edu.cn/
中国科学技术大学:
http://mirrors.ustc.edu.cn/ (IPv4+IPv6)
http://mirrors4.ustc.edu.cn/
http://mirrors6.ustc.edu.cn/
东北大学:
http://mirror.neu.edu.cn/ (IPv4 only)
http://mirror.neu6.edu.cn/ (IPv6 only)
电子科技大学:http://ubuntu.uestc.edu.cn/
六、使用第三方软件库
Centos/RHEL默认的yum软件仓库非常有限,仅仅限于发行版本那几张盘里面的常规包和一些软件包的更新,利用RpmForge,可以增加非常多的第三方rpm软件包。RpmForge库现在已经拥有超过10000种的CentOS的软件包,被CentOS社区认为是最安全也是最稳定的一个第三方软件库。
1、安装yum-priorities插件
这个插件是用来设置yum在调用软件源时的顺序的。因为官方提供的软件源,都是比较稳定和被推荐使用的。因此,官方源的顺序要高于第三方源的顺序。如何保证这个顺序,就需要安装yum-priorities这插件了。
# yum -y install yum-priorities
2、安装完yum-priorities插件后需要设置/etc/yum.repos.d/ 目录下的.repo相关文件(如CentOS-Base.repo),在这些文件中插入顺序指令:priority=N (N为1到99的正整数,数值越小越优先)
一般配置[base], [addons], [updates], [extras] 的priority=1,[CentOSplus], [contrib] 的priority=2,其他第三的软件源为:priority=N (推荐N>10)
以CentOS-Base.repo 为例:
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=os
baseurl=http://ftp.sjtu.edu.cn/centos/releasever/os/basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1
3、下载与安装相应rpmforge的rpm文件包
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
4、安装DAG的PGP Key
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
5、验证rpmforge的rpm文件包
# rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm
6、安装rpmforge的rpm文件包
# rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm
7、设置/etc/yum.repos.d/rpmforge.repo文件中源的级别
[root@TS-DEV yum.repos.d]# cat rpmforge.repo
### Name: RPMforge RPM Repository for RHEL 5 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
priority=12
8、测试安装
# yum install htop
参考 http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b
其他第三方软件库如 EPEL(Extra Packages for Enterprise Linux ) 和 RPMFusion 的安装与使用和RPMForge类似,可自行查找资料安装。
实战演习:
第一步:查看yum 源配置文件配置阿里云的yum源
#ls /etc/yum.repos.d/
第二布:修改yum配置文件
#vi /etc/yum.repos.d/CentOS-Base.repo
第三步:修改部分为红色
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/releasever/os/basearch/ #配置为阿里云的yum源
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=updates&infra=$infra #注释掉原来的默认配置
baseurl=http://mirrors.aliyun.com/centos/releasever/updates/basearch/ #配置为阿里云的yum源
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=extras&infra=$infra #注释掉原来的默认配置
baseurl=http://mirrors.aliyun.com/centos/releasever/extras/basearch/ #配置为阿里云的yum源
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=centosplus&infra=$infra #注释掉原来的默认配置
baseurl=http://mirrors.aliyun.com/centos/releasever/centosplus/basearch/ #配置为阿里云的yum源
现在我们的yum配置好了
我们安装一个工具,我刚下好的系统连一个查看网卡的工具都没安装我们安装一个net-tools 和 openssh 工具,否则我们很难操作我刚安装好的这一台原始机。
第四步:运行yum命令
#yum install net-tools
输入:y
看到Complete!
OK net-tools 安装完毕
第五步:检测net-tools安装情况
工具正常我们yum到此就安装结束。
现在我们的系统还不能远程登陆
因为系统缺少ssh服务插件,我们要安装一个远程服务的插件我们使用 openssh 这个远程插件
yum -y update
升级所有包同时也升级软件和系统内核
yum -y upgrade
只升级所有包,不升级软件和系统内核
实验分别测试 yum -y upgrade和yum -y update
升级前
系统版本: centos5.5
内核版本: 2.6.18-194.el5
升级前做过简单配置文件修改
yum -y upgrade 升级后
系统版本: centos5.7
内核版本: 2.6.18-194.el5
yum -y update 升级后
系统版本: centos5.7
内核版本: 2.6.18-238.el5
yum update不删除旧包
yum upgrade删除旧包
在生产环境中最好使用yum update,防止因旧软件包依赖而出现问题。
#列出所有源
yum repolist all
#列出所有已启用的源
yum repolist enabled
#查看禁用源
yum repolist disabled
#启用或禁用源,不需要后面的 /x86-64
yum-config-manager --disable mysql-connectors-community
yum-config-manager --enable mysql57-community-dmr
#添加源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制粘贴数据的时候,如果是打开文件进行复制粘贴,就不可避免的需要较多的鼠标与键盘的操作,就会比较繁琐。重定向是一种高效的方法,无需大量的鼠标与键盘操作就可以完成数据的转移。重定向可以分为输入重定向以及输出重定向这两种类型。由于所有程序都有输入或者输出,因此输入和输出的重定向是任何编程语言或脚本语言都自带的功能。
在 Linux 系统中,标准输入,标准输出以及标准错误都作为文件存在。 你可以在 /dev 目录下看到它们
在 Linux 系统中,使用 > 字符表示重定向输出。例如,将 ls 命令的输出重定向到一个文件中
[root@k8s-master01 xuebiao]# ls > c.txt
[root@k8s-master01 xuebiao]# cat c.txt
a.txt
b.txt
c.txt
my.sh
test.sh
w1.png
w.png
yes.log
[root@k8s-master01 xuebiao]# ls
a.txt b.txt c.txt my.sh test.sh w1.png w.png yes.log
[root@k8s-master01 xuebiao]#
执行以上命令后,屏幕上并不会显示 ls 命令的输出信息,因为输出信息已经被重定向至c.txt 文件中了。
除此之外,重定向还有许多用途,它还可以用于复制文件的内容,而且不限于复制文本文件,二进制文件也可以复制:
[root@k8s-master01 xuebiao]# ls
a.txt b.txt c.txt my.sh test.sh w1.png w.png yes.log
[root@k8s-master01 xuebiao]# cat w.png > w2.png
[root@k8s-master01 xuebiao]# ls
a.txt b.txt c.txt my.sh test.sh w1.png w2.png w.png yes.log
[root@k8s-master01 xuebiao]#
如果你想要将一个文件的内容复制到另一个文件的末尾,你只需将 > 字符换成 >> 字符串即
[root@k8s-master01 xuebiao]# cat a.txt
qwe
[root@k8s-master01 xuebiao]# cat b.txt
123
[root@k8s-master01 xuebiao]# cat c.txt
zxc
[root@k8s-master01 xuebiao]# cat a.txt>>b.txt
[root@k8s-master01 xuebiao]# cat b.txt
123
qwe
[root@k8s-master01 xuebiao]#
输入重定向可以将输入信息重定向至命令中作为参数使用。该功能可能比较少用,但是,当命令需要一个参数列表时,而这些参数都存在一个文件中,然后你想快速地将它们从文件中复制粘贴到终端,这时这个功能就能派上用场了。
例如:a.txt里记录了你需要用的命令,而你想要打印他们
[root@k8s-master01 xuebiao]# cat a.txt
qwe
[root@k8s-master01 xuebiao]# echo $(<a.txt)
qwe
[root@k8s-master01 xuebiao]#
输入重定向的常见用法是 Here-document (简称 Here-doc) 以及 Here-string 。
[root@k8s-master01 xuebiao]# cat <<EOF
> yes
> you dont kown me
> EOF
yes
you dont kown me
[root@k8s-master01 xuebiao]#
Here-doc 是 Bash 脚本编写者们将多行文本转储到文件或屏幕上的常用技巧。
Here-string 与 Here-doc 相似,但是它只有一个字符串,或者几个被引号括起来的字符串:
$ cat <<< alvin
alvin
$ cat <<< "alvin lxlinux.net"
alvin lxlinux.net
错误信息默认会进入叫 stderr 的流,使用 2> 可以对其进行重定向。例如,将错误信息重定向到名为 err.txt 的文件中:
[root@k8s-master01 xuebiao]# ls
a.txt b.txt c.txt my.sh test.sh w1.png w2.png w.png yes.log
[root@k8s-master01 xuebiao]# ls yes
ls: 无法访问yes: 没有那个文件或目录
[root@k8s-master01 xuebiao]# ls yes > err.txt
ls: 无法访问yes: 没有那个文件或目录
[root@k8s-master01 xuebiao]# ls
a.txt b.txt c.txt err.txt my.sh test.sh w1.png w2.png w.png yes.log
[root@k8s-master01 xuebiao]# cat err.txt
[root@k8s-master01 xuebiao]# ls yes 2> err.txt
[root@k8s-master01 xuebiao]# cat err.txt
ls: 无法访问yes: 没有那个文件或目录
[root@k8s-master01 xuebiao]#
就像标准输入、标准输出以及标准错误一样,在 Linux 文件系统中,空,也存在一个文件与之对应,它叫做 null ,放在 /dev 目录下。为了方便读,人们经常省略斜杠,直接把他读作 dev null 。
/dev/null 并不保存数据,被写入 /dev/null 的数据最终都会丢失,就像被丢进虚空中一样。因此,你可以使用重定向将不需要的数据输送到 /dev/null 。例如,find 命令的输出往往很冗长,而且在搜索文件时还经常会报告权限冲突的错误,像这样:
$ find ~ -type f
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file
这时,你就可以将错误信息重定向到 /dev/null ,以过滤掉不必要的信息,像这样:
$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file
去官网下载jdk的rpm包
安装JDK
1.先将软件通过xftp传到linux里下
2.安装
rpm -ivh jdk-8u281-linux-x64.rpm
3.配置环境变量的配置文件 vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
PATH=/usr/java/jdk1.8.0_281-amd64/bin:$PATH
export JAVA_HOME PATH
重新加载配置文件
source /etc/profile
测试
java
javac
java -version
去官网下载tomcat的tar.gz包.通过xftp传到linux上.
解压
tar -zxvf xxx.tar.gz
进入tomcat中的bin目录下,运行tomcat
./start.sh
开放端口8080,这样外网才能访问到
firewall-cmd --add-port=8080/tcp --permanent
测试是否安装成功:
在windows下访问http://linuxip:8080
控制台日志输出到nohup.out文件中
nohup java -jar xx.jar>nohup.out 2>&1 &
不保存控制台日志
nohup java -jar xx.jar>/dev/null 2>&1 &
apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt命令可用于软件包的安装、删除、清理等,类似于 Windows 中的软件管理工具。
更新源
用你熟悉的编辑器打开:
/etc/apt/sources.list
ubuntu 20.04(focal) 配置如下
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
软件操作的相关命令
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall 重新安装包
sudo apt-get -f install 修复安装
sudo apt-get remove package --purge 删除包,包括配置文件等
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解使用该包依赖那些包sudo apt-cache rdepends package 查看该包被哪些包依赖sudo apt-get source package 下载该包的源代码
所谓的镜像源:可以理解为提供下载软件的地方,比如 Android 手机上可以下载软件的安卓市场;iOS 手机上可以下载软件的 AppStore
使用 ssh 远程登录 Ubuntu
ssh 介绍
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行 SSH。
使用 SSH 服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A 机器想被 B
机器远程控制,那么,A 机器需要安装 SSH 服务器,B 机器需要安装 SSH 客户端。
和 CentOS 不一样,Ubuntu 默认没有安装 SSHD 服务,因此,我们不能进行远程登录。
使用 ssh 远程登录 Ubuntu
安装 SSH 和启用
sudo apt-get install openssh-server
执行上面指令后,在当前这台 Linux 上就安装了 SSH 服务端和客户端。
service sshd restart
执行上面的指令,就启动了 sshd 服务。会监听端口 22
ssh 用户名@IP
例如:ssh [email protected]
使用 ssh 访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决。
登出
登出命令:exit或者logout
The authenticity of host '192.168.0.107 (192.168.0.107)' can't be established.
ECDSA key fingerprint is SHA256:Brov9TgYfZIDvDHaxqtWzXKvhA52Ud9Wf5f3TX0NyDY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.107' (ECDSA) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.8.0-43-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
332 updates can be installed immediately.
136 of these updates are security updates.
To see these additional updates run: apt list --upgradable
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Fri Feb 19 16:28:45 2021 from 192.168.0.178
xuebiao@xuebiao-VirtualBox:~$