1.Linux的磁盘管理
1.1查看磁盘空间
1.1.1 df
df命令用于显示磁盘的空间使用情况。
df [-option]
常用参数:
- -i:使用inodes显示结果
- -k:使用KBytes显示结果
- -m:使用MBytes显示结果
1.1.2 du
du命令用于显示指定目录下所有文件以及子目录所占用的磁盘空间大小。如果不指定目录名称,则统计当前目录下所有文件及子目录的占用空间大小。
du [-option] [目录名称]
常用参数:
- -b:列出的值以bytes输出
- -k:列出的值以kb输出
- -m:列出的值以mb输出
- -s:只列出总值
1.2 磁盘分割
fdisk用于显示或进行分区,如果带上参数-l则表示显示,如果不带参数,直接写上设备名称,则表示对该存储设备进行分区。
fdisk [-option] [设备名称]
常用参数:
- -l:显示分区情况
#希望显示sda(scsi接口的硬盘)设备的分区情况
fdisk -l /dev/sda
1.3 设备挂载
1.3.1 mount
mount命令用于挂载存储设备。
mount [-ah1V]
#挂载点可以随意指定,但需要注意的是指定的目录一定要为空目录。
mount [-t 类型] 设备名称 挂载点
常用参数:
- -a:按照/etc/fstab的内容挂载所有相关设备
- -h:mount帮助信息
- -l:列出当前挂载的所有设备与挂载点
- -V:列出mount版本
- -t:指定挂载的存储设备的文件系统,比如vfat、fat、 ext、 ext2、 ext4、iso9660、ntfs等
#用iso9660文件系统格式挂载光盘设备,挂载点是/mnt目录,挂载成功后,我们可以在/mnt目录下看到并读取这张光盘上的所有内容。-t ios9660有时可以省略,对于标准的cd光盘mount会自动识别其文件系统。
mount -t iso9660 /dev/cdrom /mnt
1.3.2 unmount
unmount命令用于写在已经挂载的设备。
unmount 挂载点或设备名称
unmount命令用于卸载已经挂载的设备
#1. 通过挂载点卸载
unmount /mnt
#2.通过设备卸载
unmount /dev/cdrom
2.Linux的文本编辑vi
2.1一般模式下移动光标
h或左方向键 | 光标向左移动一个字符 |
j或者向下方向键 | 光标向下移动一个字符 |
k或者向上方向键 | 光标向上移动一个字符 |
l或者右方向键 | 光标向右移动一个方向键 |
ctrl+f或者pageDown键 | 屏幕向后移动一页 |
ctrl+f或者pageUp键 | 屏幕向前移动一页 |
ctrl+d | 屏幕向后移动半页 |
ctrl+u | 屏幕向前移动半页 |
+ | 光标移动到非空格符的下一列 |
- | 光标移动到非空格符的上一列 |
n空格(n是数字) | 按下数字n然后按空格,则光标向右移动n个字符,如果该行字符数小于n,则光标继续从下行开始向右移动,一直到n |
0(数字) | 移动到本行行首 |
$ | 移动到本行行首 |
H | 光标移动到当前屏幕的最顶行 |
M | 光标移动当前屏幕的中央那一行 |
L | 光标移动到当前屏幕的最底行 |
G | 光标移动到文本的最末行 |
nG(n是数字) | 移动到该文本的第n行 |
gg | 移动到该文本的首行 |
n回车(n是数字) | 光标向下移动n行 |
/word | 向光标之后寻找字符串word。当找到第一个后,按“n”继续搜索后一个 |
?word | 向光标之前寻找字符串word。当找到第一个后,按“n”继续搜索前一个 |
:n1,n2s/word1/word2/g | 将n1和n2行之间所有的word1替换为word2,分隔符也可以使用# |
:1,$s/word1/word2/g | 从第一行到最末行,将所有的word1替换为word2 |
:1,$s/word1/word2/gc | 加上c,在替换前需要用户确认 |
x,X | x为向后删除一个字符,X为向前删除一个字符 |
nx(n为数字) | 向后删除n个字符 |
dd | 删除光标所在的那一行 |
ndd(n为数字) | 删除光标所在的向下n行 |
d1G | 删除光标所在行到第一行的所有数据 |
dG | 删除光标所在行到末行的所有数据 |
yy | 复制光标所在的那行 |
nyy | 复制从光标所在行起向下n行 |
p,P | p复制的数据从光标下一行粘贴,P则从光标上一行粘贴 |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 复制光标所在行到末行的所有数据 |
J | 将光标所在行与下一行的数据结合成同一行 |
u | 还原过去的操作 |
i | 在当前字符前插入字符 |
I | 在当前行行首插入字符 |
a | 在当前字符后插入字符 |
A | 在当前行行末插入字符 |
o | 在当前行下插入新的一行 |
O | 在当前行上插入新的一行 |
r | 替换光标所在的字符,只替换一次 |
R | 一直替换光标所在的字符,一直到按下ESC |
:w | 将变结果的文本保存 |
:w! | 若文本属性为只读时,强制保存 |
:q | 推出vim |
:q! | 不管编辑或未编辑都不保存退出 |
:wq | 保存,推出 |
:e! | 将文档还原成最原始状态 |
ZZ | 若文档没有改动,则不存储离开;若文档改动过,则存储后离开,等同于:wq |
:w[filename] | 编辑后的文档另存为filename |
:r[filename] | 在当前光标所在行的下面读入filename文档的内容 |
:set nu | 在每行的行首显示行号 |
:set nonu | 取消行号 |
:n1,n2 w [filename] | 将n1到n2的内容另存为filename文件 |
:! command | 暂时离开vim运行某个Linux命令,例如:! ls/home暂时列出/home目录下的文件,然后会提示按回车回到vim |
3. Linux的文件打包与压缩
后缀名 | 压缩方式 |
.z | compress工具压缩的文件 |
.bz2 | bzip2工具压缩的文件 |
.gz | gzip工具压缩的文件 |
.tar | tar工具打包的数据 |
.tar.gz | 先用tar打包,在用gzip压缩 |
.zip | zip工具压缩 |
3.5 tar
tar是一个打包工具,打包和压缩并不相同。
打包的目的是为了方便对当、管理。
压缩的目的是为了减少磁盘空间的消耗。
tar [-option] 打包名 需要打包的文件
常用参数:
- -c:建立一个包
- -t:查看包中的文件
- -v:打包过程中显示被打包的文件
- -f:需要打包的内容为文件
- --exclude file:在打包过程中,不要将file文件打包
- -x:解开一个包
- -z:同时启用gzip工具进行压缩或解压
#打包
tar -cvf test.tar east.log west.txt south north
#解包
tar -xvf test.tar
#打包并压缩
tar -zcvf test.tar.gz ast.log west.txt south north
#解压并解包
tar -zxvf test.tar.gz
4.Linux下的应用程序RPM安装与源码安装
Linux分为32为和64位。
uname -a
#如果结果如下包含 x86_64,表明是64位
#Linux VM_0_6_centos 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
#如果包含i386,i586,i686,表明是31位
#Linux pmx0**.**.** 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
4.1 RPM安装
RPM是“Redhat Package Manager”的缩写。
RPM的限制:所有的rpm包必须事先准备好,某些套件还存在依赖,安装前还需要安装特别的套件;卸载也是同样的,卸载包时要先把依赖的包卸载掉。如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。如果不熟悉Linux套件,安装套件是相当繁琐和困难。推荐yum
#查询
rpm -q 套件名 #列出指定的已安装的套件
prm -qi 套件名 #列出指定已安装套件的详细信息
rpm -ql 套件名 #列出指定已安装套件的文件路径
rpm -qa #列出所有安装过的套件
#安装
rpm -ivh rpm包名 #安装该rpm包
#升级
rpm -Uvh rpm包名 #升级指定的rpm包
rpm -Fvh rpm包名 #升级指定的已安装的rpm包
#卸载
rpm -e 套件名 #卸载指定的套件
rpm -w nodeps 套件名 #强制卸载,不考虑套件之间的依赖
4.2 yum
yum [-option] [command]
常用参数:
- -h:显示帮助信息
- -v:显示安装细节
- -y:对所有问题都回答yes
常用命令:
- clean:清空缓存,yum安装套件需要从网站上自动下载,下载的包将存放到Linux配置的yum缓存目录/var/cache/yum下,如果内容太多,我们就需要清理
- check-update:检查指定的包是否存在更新包
- install:安装指定的包
- erase:卸载指定的包
- list:显示存在的所有的rpm包
- update:升级已安装的包
- reinstall:重新安装指定的已安装的包
#查看可用的安装包
yum list java*
#安装Java
yum -y install java-1.8.0-openjdk.x86_64
5. 程序与资源管理
5.1 背景工作管理
test.sh
#!/bin/bash
sum=0
for i in `seq 1 10`;do
sum=$(expr ${sum} + ${i})
done
echo $sum
5.1.1 &
sh test.sh &
查看后台的进程
ps|grep pid
进程执行完成,会提示工作完成
5.1.2 ctrl+z
在执行命令后,直接按ctrl+z打断
5.1.3 其他
jobs 查询所有后台的任务
fg %N:使第N个任务在前台运行
bg %N:使第N个任务在后台运行
不带参数,默认对最后一个进程进行操作
5.2.系统状态监控
5.2.1 ps
ps命令用于显示当前系统中运行的进程。常用ps -aux或ps -ef
常用参数:
- -a:所有进程
- -u:显示用户
- -x:列出所有try进程
- -e:所有进程,与-a略有区别
- -f:完整显示进程信息
5.2.2 w
w命令用于查看当前系统负载。
第一行从左往右显示的信息一次为:时间,系统运行时间,登陆用户数,平均负载。第二行开始以及下面所有的行,告诉我们当前登陆的都有哪些用户,以及他们是从哪里登录的等。
最需要关注的第一行中的平均负载。第一个数字表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均值;第三个表示15分钟内系统的平均负载值。
这个值的意义:单位时间内CPU活动进程数。这个值越大表示你的服务器压力越大,一般情况下只要不超过CPU数量就没有关系。
5.2.3 vmstat
vmstat用于监控当前系统状态。w查看的是系统整体上的负载,不能判断哪里有压力。通过vmstat就可以知道哪里有压力。
vmstat打印结果分为6部分:proc、memory、swap、io、system、cpu。
- proc:显示进程相关信息
* r:表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了。
* b:表示等待资源的进程数,比如等待I/O、内存等,这列的值如果长时间大于1,则需要关注 - memory内存相关信息
* swpd:表示切换到交换分区中的内存数量
* free:当前空闲的内存数量
* buff:缓冲大小(即将写入磁盘的)
* cache:缓存大小(从磁盘中读取的) - swap内存交换情况
* si:由内存进入交换区的数量
* so:有交换区进入内存的数量 - io磁盘使用情况
* bi:从块设备读取数据的量(读磁盘)
* bo:从块设备写入数据的量(写磁盘) - system显示采集间隔内发生的中断次数
* in:表示在某一时间间隔中观测到的每秒设备中断数
* cs:表示每秒产生的上下文切换次数 - CPU显示CPU的使用状态
* us:显示用户花费CPU时间百分比
* sy:显示系统花费CPU时间百分比
* id:表示cpu处于空闲状态的时间百分比
* wa:表示I/O等待所占用的CPU时间百分比
* st:表示被偷走的CPU所占百分比(通常为0)
以上参数,经常会关注r列、b列、wa列。
如果磁盘io压力很大时,这两列的数值会比较高
si、so数值比较高,并且在不断变化时,说明内存不够了,内存中数据频繁到交换分区中,往往对系统性能影响极大。
5.2.4 top
top命令用于动态监控进程所占系统的资源,每隔3秒更新一次。特点:把占用系统资源(CPU、内存、吸盘io等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、CPU使用情况、内存占用情况以及交换分区使用情况。一般关注%CPU、%MEM、COMMAND
使用> <进行前后翻页,退出q
5.2.5 free
常用参数:
-b:用字节做单位
-k:用KB做单位
-m:用MB做单位
-t:显示总计
Mem行是系统内存状况,表示使用了108MB,剩余2412MB
5.2.6 netstat
netstat用于显示网络状况,常用的:
- netstat -lnp 用于显示当前系统启用哪些端口
- netstat -an 用于显示网络链接状况,如查看系统是由程序占用4444端口,可用netstat -an|grep 4444
5.2.6 ping
ping用于测试目标与本季的连接状况。
语法:
ping [-option] 目标
常用参数:
- -c:用于指定测试多少次,如果不设置该参数,将会无休止的进行测试,用ctrl+c停止
# 比如我们测试172.16.1.209和当前设备连接是否正常:
ping -c 5 172.16.1.209
5.2.7 kill
语法:
kill [-option] pid或者任务号
常用参数:
- -1:让该进程重新读取配置文件
- -9:强制杀掉进程或任务
- -15:停止该进程
5.3网络设置
5.3.1 ifconfig
ifconfig用于显示或设置网卡。
- 不加任何选项和参数只打印当前网卡的IP相关信息
- 带上设备名,表示金查看指定的网卡设备,如ifconfig eth0
- 给网卡配置IP:ifconfig eth0 172.168.12.123
- 启用网卡:ifconfig eth0 up 注意:尽在当前的会话中有效
- 禁用网卡:ifconfig eth0 down
5.3.2 ifdown和ifup
ifdown 网卡设备名
ifup 网卡设备名
5.3.3 配置网卡IP
永久设置eth0网卡的IP,可以修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
配置网卡后,需要重启网卡才能让配置文件生效。
方法1.使用ifdown和ifup,先禁用再启用网卡
方法2.执行网络脚本:service network restart
6.Linux的关机和重启
6.1 关机shutdown
shutdown用于关机,只有当shutdown将系统安全停掉后,我们才能安全的关掉电源
常用参数:
- -r 数字:指定多少秒后关机
- -r 时间:指定时间关机后立即重新开机
- -h 时间:指定关机时间
- -c:取消正在进行的shutdown
shutdown -h 20:25 #今天20:25关机
shutdown -h now #现在就关机
shutdown -h +10 #再过10分钟就关机
shutdown -r now #现在就重启电脑
6.2 halt
halt命令用于挂起系统,所谓的挂起就是停止系统所有的工作,包括服务,和关机类似,但是比关机少一步骤,如果加上了参数-p,就是关机了
常用参数:
- -p:挂起系统后关闭系统
6.3 reboot
reboot命令用于重启电脑,作用同shutdown -r now
7.问题
7.1使用yum安装的Java缺少lib文件,maven会报错
解决方法:
1.卸载
yum list installed |grep java
yum -y remove java-1.8*
2.下载jdk,并复制到目标机器的目录,如/usr/lib/
下载文件到本地地址
scp jdk-8u231-linux-x64.tar.gz root@远程IP:/usr/lib/
登陆服务器,解压文件
tar -zxvf jdk-8u231-linux-x64.tar.gz
3.配置环境变量
修改/etc/profile文件,添加以下内容
export JAVA_HOME=/usr/lib/jdk1.8.0_231
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
4.验证
java -verison