一、系统操作
1.帮忙命令
1.man 帮助
2.help
3.info
2.删除命令
rm -f jdk-8u144-linux-x64.tar.gz
命令解释:
rm 删除文件或目录
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
-f 强制删除文件或目录
rm -rf nginx-1.7.8 删除一个文件夹
@see https://zhidao.baidu.com/question/405772331.html
3.磁盘命令
1.查看磁盘空间大小
df -h命令
可以查看到当前的服务器磁盘的使用率和大小了,很容易理解图片上反馈的内容,可以知道当前使用的服务器有两个磁盘,一个20G大的磁盘还剩下9.9G大的空间。
2.查看文件大小
ll -h命令查询文件大小
如图所示:
du -h 命令
如图所示,data文件夹大小总共218M
3.磁盘IO情况
这里,我们可以了解一下 Linux下I/O 分析工具。
(1) iostat
iostat -x
关于 CPU 的指标,我们重点看 %iowait 和 %idle 两个指标。
-
%iowait:CPU 等待输入输出完成时间的百分比;
%idle:CPU 空闲时间百分比。
若%iowait 的值过高,则表示硬盘存在 I/O 瓶颈;若 %idle 值高,表示 CPU 较空闲。如果 %idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
关于 Disk 指标,我们重点看 %utils、svctm、await 和 avgque-sz几个指标。
-
avgqu-sz: 平均 I/O 队列长度;
await: 平均每次设备 I/O 操作的等待时间 (毫秒);
svctm: 平均每次设备 I/O 操作的服务时间 (毫秒);
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被 I/O 消耗的 CPU 百分比
若 %util 接近 100%,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈;若 svctm 比较接近 await,说明 I/O 几乎不需要等待;若 await 远大于 svctm,说明 I/O 队列太长,I/O 响应太慢,则需要进行必要优化;若 avgqu-sz 比较大,也表示有大量 IO 在等待。
4.内存命令
1.查看服务器内存大小
free -h命令查看内存使用情况
其中第一行用全局角度描述系统使用的内存状况:
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
cached——缓存,用于已打开的文件
注意-/+ buffers/cache: 6100 67628这行。
前个值表示-buffers/cache—–>不包括缓存,应用程序物理内存使用情况,即 -buffers/cache=used-buffers-cached ,所以此时应用程序才用了6100k内存 。
后个值表示+buffers/cache—–>所有可供应用程序使用的内存大小,free加上缓存值,即+buffers/cache=free+buffers+cached ,所以此时还有67628k 内存可供程序使用。
2.查看进程内存大小
ps -o vsz,rss,sz,size,pid -q【pid】
以上显示的数字的单位是KB ,其中vsz,rss,sz,size的含义如下:
VSZ :指的是虚拟内存的大小,进程运行时所需要的总内存大小,这个来表示进程消耗了多少内存其实没有太大的意义,因为它包含了未被加载到实际内存中的空间
RSS:表示了进程中真正被加载到物理内存中的页的大小。但是用它来表示进程占用的内存大小也不太合适,因为还有个共享代码库的概念(Shared Libraries)。
思考:
1.top和free命令的区别?
top看到的内存使用情况,有一部分是缓存,那个缓存有多少呢?注意看最后有个mem那行后面有个buffers ,swap那行后面有个cached,这两个就是缓存大小。
所以如果要计算应用程序真正使用物理内存的情况,应该是used-cached-buffers才对,所以刚才top看到的物理内存使用情况为70048k-64716k=5332k。所以也才没用多少嘛!
使用top命令或者free命令看到的内存使用率used中,包含了缓存,如果要查看应用程序真正的内存使用情况,应该是used-cached-buffers ,或者直接看free命令结果的-/+ buffers/cache行信息。
2.Linux内存 mem 和 swap
mem:表示物理内存统计
swap:表示硬盘上交换分区的使用情况
1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory
2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区
3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区
4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级
5.CPU命令
1.查看CPU信息
lscpu 显示CPU详细信息
Architecture: # 架构
CPU op-mode(s): # CPU 运行模式
Byte Order: # 字节序
CPU(s): # 逻辑CPU颗数
On-line CPU(s) list: # 在线CPU列表
Thread(s) per core: # 每个核的线程数
Core(s) per socket: # 每个CPU插槽核数/每颗物理CPU核数
CPU socket(s): # CPU插槽数
NUMA node(s): # NUMA节点
Vendor ID: # CPU厂商ID
CPU family: # CPU系列
Model: # 型号
Model name: # 型号名称
Stepping: # 步进
CPU MHz: # CPU主频
CPU max MHz: # CPU最大主频
CPU min MHz: # CPU最小主频
Virtualization: # CPU支持的虚拟化技术
L1d cache: # 一级缓存(CPU的L1数据缓存)
L1i cache: # 一级缓存(CPU的L1指令缓存)
L2 cache: # 二级缓存
二、软件管理
1.linux软件管家yum
Windows 上有了软件管家,就方便多了。
Linux 也有自己的软件管家,CentOS 下面是 yum,Ubuntu 下面是 apt-get。
那么查看自己是哪种系统可以用下面的命令
查看自己系统是否安装了yum,可以用下面的命令
如果YUM已安装,该命令将输出yum
的完整路径。如果没有输出或者提示命令未找到,则表示YUM可能未安装。
你可以根据关键词搜索,例如搜索jdk、yum search jdk和apt-cache search jdk,可以搜索出很多很多可以安装的 jdk 版本。如果数目太多,你可以通过管道 grep、more、less 来进行过滤。
选中一个之后,我们就可以进行安装了。你可以用yum install java-11-openjdk.x86_64和apt-get install openjdk-9-jdk来进行安装。
安装以后,如何卸载呢?我们可以使用yum erase java-11-openjdk.x86_64和apt-get purge openjdk-9-jdk。
2.mac软件管家brew
brew 是 Mac 下的一个包管理工具,类似于 centos 下的 yum,可以很方便地进行安装/卸载/更新各种软件包,例如:nodejs, elasticsearch, kibana, mysql, mongodb 等等,可以用来快速搭建各种本地环境,程序员必备工具
2.软件安装
对于 Windows 系统,最方便的方式就是下载 exe,也就是安装文件。下载后我们直接双击安装即可。
对于 Linux 来讲,也是类似的方法,你可以下载 rpm 或者 deb。这个就是 Linux 下面的安装包。为什么有两种呢?因为 Linux 现在常用的有两大体系,一个是 CentOS 体系,一个是 Ubuntu 体系,前者使用 rpm,后者使用 deb。
在 Linux 上面,没有双击安装这一说,因此想要安装,我们还得需要命令。CentOS 下面使用rpm -i jdk-XXX_linux-x64_bin.rpm进行安装,Ubuntu 下面使用dpkg -i jdk-XXX_linux-x64_bin.deb。其中 -i 就是 install 的意思。
有一种简单粗暴的方法,就是将安装好的路径直接下载下来,然后解压缩成为一个整的路径。在 JDK 的安装目录中,Windows 有 jdk-XXX_Windows-x64_bin.zip,这是 Windows 下常用的压缩模式。Linux 有 jdk-XXX_linux-x64_bin.tar.gz,这是 Linux 下常用的压缩模式。
如何下载呢?Linux 上面有一个工具 wget,后面加上链接,就能从网上下载了。
下载下来后,我们就可以进行解压缩了。Windows 下可以有 winzip 之类的解压缩程序,Linux 下面默认会有 tar 程序。
其实无论是先下载再安装,还是通过软件管家进行安装,都是下载一些文件,然后将这些文件放在某个路径下,然后在相应的配置文件中配置一下。例如,在 Windows 里面,最终会变成 C:\Program Files 下面的一个文件夹以及注册表里面的一些配置。对应 Linux 里面会放的更散一点。例如,主执行文件会放在 /usr/bin 或者 /usr/sbin 下面,其他的库文件会放在 /var 下面,配置文件会放在 /etc 下面。
1.查看某个软件安装目录
使用which命令
如查看Java的安装目录
which java
执行结果为:
查看nginx安装目录
3.软件运行
好了,装好了程序,可以运行程序了。
我们都知道 Windows 下的程序,如果后缀名是 exe,双击就可以运行了。
Linux 不是根据后缀名来执行的。它的执行条件是这样的:只要文件有 x 执行权限,都能到文件所在的目录下,通过./filename运行这个程序。当然,如果放在 PATH 里设置的路径下面,就不用./ 了,直接输入文件名就可以运行了,Linux 会帮你找。
这是Linux 执行程序最常用的一种方式,通过 shell 在交互命令行里面运行。
这样执行的程序可能需要和用户进行交互,例如允许让用户输入,然后输出结果也打印到交互命令行上。这种方式比较适合运行一些简单的命令,例如通过 date 获取当前时间。这种模式的缺点是,一旦当前的交互命令行退出,程序就停止运行了。
这样显然不能用来运行那些需要“永远“在线的程序。比如说,运行一个博客程序,我总不能老是开着交互命令行,博客才可以提供服务。一旦我要去睡觉了,关了命令行,我的博客别人就不能访问了,这样肯定是不行的。
于是,我们就有了Linux 运行程序的第二种方式,后台运行。
这个时候,我们往往使用nohup命令。这个命令的意思是 no hang up(不挂起),也就是说,当前交互命令行退出的时候,程序还要在。
当然这个时候,程序不能霸占交互命令行,而是应该在后台运行。最后加一个 &,就表示后台运行。
另外一个要处理的就是输出,原来什么都打印在交互命令行里,现在在后台运行了,输出到哪里呢?输出到文件是最好的。
最终命令的一般形式为nohup command >out.file 2>&1 &。这里面,“1”表示文件描述符 1,表示标准输出,“2”表示文件描述符 2,意思是标准错误输出,“2>&1”表示标准输出和错误输出合并了。合并到哪里去呢?到 out.file 里。
在 Windows 里面还有一种程序,称为服务。这是系统启动的时候就在的,我们可以通过控制面板的服务管理启动和关闭它。
Linux 也有相应的服务,这就是程序运行的第三种方式,以服务的方式运行。例如常用的数据库 MySQL,就可以使用这种方式运行。
4.软件关闭
那这个进程如何关闭呢?我们假设启动的程序包含某个关键字,那就可以使用下面的命令。
|
从这个命令中,我们多少能看出 shell 的灵活性和精巧组合。
其中 ps -ef 可以单独执行,列出所有正在运行的程序,grep 上面我们介绍过了,通过关键字找到咱们刚才启动的程序。
awk 工具可以很灵活地对文本进行处理,这里的 awk '{print $2}'是指第二列的内容,是运行的程序 ID。我们可以通过 xargs 传递给 kill -9,也就是发给这个运行的程序一个信号,让它关闭。如果你已经知道运行的程序 ID,可以直接使用 kill 关闭运行的程序。
三、文件相关
1.文件编辑
要编辑文件,可以使用文本编辑器 vi,也可以使用更加友好的 vim。如果默认没有安装,可以通过 yum install vim 及 apt-get install vim 进行安装。
vim 就像 Windows 里面的 notepad 一样,是我们第一个要学会的工具。要不然编辑、查看配置文件,这些操作你都没办法完成。vim 是一个很复杂的工具,刚上手的时候,你只需要记住几个命令就行了。
1.vim命令
1.vi模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序
- w 保存文件
按ESC键可随时退出底线命令模式。
1.使用vim进入文件
$ vim runoob.txt
2.按下 i 进入输入模式(也称为编辑模式),开始编辑文字
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
3.退出vim
首先按下 ESC 按钮回到一般模式,然后在一般模式中按下 :wq 储存后离开 vi。
如果对于Mac系统没有生效的话,可以参考使用crtc+c的方式退回到一般模式
2.文件移动
远程负责:
scp -r local_folder remote_username@remote_ip:remote_folder
@see http://www.runoob.com/linux/linux-comm-scp.html
3.文件查询
cat,head,tail等
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
如:
显示 notes.log 文件的开头 5 行,请输入以下命令:
head -n 5 runoob_notes.log
4.ls列出文件
列出当前目录下的文件我们用的是ls,意思是 list。
ls -l,也就是用列表的方式列出文件。
# ls -l
drwxr-xr-x 6 root root 4096 Oct 20 2017 apt
-rw-r--r-- 1 root root 211 Oct 20 2017 hosts
其中第一个字段的第一个字符是文件类型。如果是“-”,表示普通文件;如果是 d,就表示目录。当然还有很多种文件类型,咱们后面遇到的时候再说,你现在先记住我说的这两个就行了。
ls -la 能看到所有包含隐藏的文件,a 就是 all
5.权限操作
当出现权限不够时:
1.su root
然后输入对应的用户名和密码
2.sudo -i
直接使用管理员权限
@see Linux下出现permission denied的解决办法 https://www.cnblogs.com/cyril227/p/10106269.html
6.搜索管道
rpm -qa | grep jdk,这个命令是将列出来的所有软件形成一个输出。| 是管道,用于连接两个程序,前面 rpm -qa 的输出就放进管道里面,然后作为 grep 的输入,grep 将在里面进行搜索带关键词 jdk 的行,并且输出出来。grep 支持正则表达式,因此搜索的时候很灵活,再加上管道,这是一个很常用的模式。同理dpkg -l | grep jdk也是能够找到的。
7.文件CRUD
新建文件
mkdir 文件夹
删除文件
使用rm命令删除文件夹
rm -r 文件夹路径
二、进程资源
1.进程
查看进程
ps命令
PS是LINUX下最常用的也是非常强大的进程查看命令
检查java 进程是否存在.
ps -ef |grep java
检查tomcat进程是否存在.
ps -ef |grep tomcat
下面对命令选项进行说明:
-e 显示所有进程。
-f 全格式。
ps -e 列出程序时,显示每个程序所使用的环境变量。
ps -f 用ASCII字符显示树状结构,表达程序间的相互关系
中间的|是管道命令 是指ps命令与grep同时执行
grep命令是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
杀死进程
按流程杀死进程
kill 进程id
强制杀死进程
kill -9 进程id
kill -9和kill的区别
kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应,我在使用wkhtmltopdf转pdf的项目中遇到这现象),也就是说,SIGTERM多半是会被阻塞的。
然而kill -9命令,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
2.资源管理相关
top命令
top命令:相当于Windows下的资源管理器,能够动态实时的显示系统中进程的资源占用情况。
top命令主要可以查看进程信息和cpu信息,内存信息等,具体情况如下:
显示列详细
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
如果只是想单独看某一个进程资源使用情况可以使用下面的命令
top -p 进程id