赞
踩
#
:表示超级管理员root用户对应的命令行。
$
:表示普通用户对应的命令行。
快捷键 | 功能 |
---|---|
tab | 补全命令 |
【ctrl + a】 / 【home】 | 光标回到命令行首 |
【ctrl + e】 / 【end】 | 光标回到命令行首 |
ctrl + insert | 复制 |
shift + insert | 粘贴 |
Ctrl+k | 剪切(删除)光标处到行尾的字符* |
Ctrl+u | 剪切(删除)光标处到行首的字符* |
Ctrl+w | 剪切(删除)光标前的 一 个单词 |
Ctrl+y | 粘贴Ctrl+u/Ctrl+k/Ctrl+w删除的文本 |
Ctrl+c | 中断终端正在执行的任务或者删除整行* |
ctrl + z | 暂停执行在终端运行的任务 |
命令 | 功能 | 备注 |
---|---|---|
passwd root | 修改密码 | |
clear | 清屏 | |
【reboot】/【shutdown -r now】 | 重启主机 | |
shutdown -h now | 关机 | |
shutdown -h + 1 | 1分钟以后关机, l可以是别的数字或时间点, 例如: 11:00 | |
exit | 退出shell | |
history | 查看历史命令 | |
printf ‘%x’ 12345 | 把12345d转换为16进制 |
功能 | 命令 | 说明 |
---|---|---|
查看当前所处路径 | pwd | |
新建文件夹 | mkdir 文件夹名称 | -p创建多层目录,即使目录存在也不会报错 ; mkdir dir1 dir2创建多个目录 |
返回上一级目录 | cd .. | |
返回上两级目录 | cd ../.. | |
返回home目录 | cd或cd ~ | |
返回指定目录 | cd - 目录名 | cd - 返回原目录 |
进入指定目录 | cd ./a | .表示当前目录,/表示目录级别分隔符 |
返回根目录 | cd / | |
把上个命令的参数作为cd参数使用 | cd !$ | 如 ls /opt cd !$ 表示打开/opt目录 |
新建文件 | touch test.txt | Linux下没有文件后缀名区分文件类型之说,系统文件类型只有可执行文件和不可执行文件 |
重命名文件 | mv A B | 如文件B存在,则覆盖。参数:-i 覆盖时提示;-f 不提示强制覆盖;-n 不覆盖已经存在的文件; -v 显示为剪切移动进度。注意:只能对单个文件重命名,如果要重命名多个文件,可以for循环处理:for name in ls *.war.original; do mv $name ${name%.war.original}.war done |
将/a目录移动到/b下,并重命名为c | mv /a /b/c | 如:mv test2 test1/test1.1。 可以使用绝对路径。 |
删除文件 | rm 文件名 | -i 会提示;-f 强制删除不提示;-v 显示文件的删除进度; -r 删除文件夹以及里面所有文件 |
删除空目录 | rmdir 文件夹名 | 如果文件夹非空则删除失败。-v 显示删除进度;-p 递归删除目录 |
比较文件内容 | diff 文件1 文件2 | |
找出特定程序的路径 | whereis | |
从索引中找出文件位置 | locate | |
建立软链接 | ln -s /test.1.0.1 /test | unlink可以去掉软链接;通过ll命令可以查看当前目录软链接-b 删除,覆盖以前建立的链接;-v 显示详细处理过程。不加-s为硬链接(以文件副本的形式存在,但不占用实际空间,只能给文件添加硬链接) |
查看文件路径及目录 | tree -a dir路径 |
/bin目录(binary)是二进制执行文件目录,主要用于具体应用
/sbin目录(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
功能 | 命令 | 说明 |
---|---|---|
查看当前目录列表 | ls |
参数列表:
功能 | 命令 | 说明 |
---|---|---|
ls -a | 所有文件,包括以 . 开头的隐藏文件 | |
ls -A | 显示除 “.”和“…”外的所有文件。 | |
ls -b | 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出 | |
ls -B | 不输出以 “~”结尾的备份文件。 | |
ls -c | 输出文件的 i 节点的修改时间,并以此排序 | |
ls -d | 将目录象文件一样显示,而不是显示其下的文件 | |
ls -i | 输出文件的 i 节点的索引信息。 | |
ls -1 | 一行只输出一个文件。 | |
ls -l | 列举目录详细信息。包括权限,所属拥有着,组群,大小,创建日期,文件是否是到系统其他地方的链接,以及链接的指向 | 别名为:ll |
ls -L | 列出链接文件名而不是链接到的文件。 | |
ls -m | 横向输出文件名,并以“,”作分格符。 | |
ls -n | 用数字的 UID,GID 代替名称。 | |
ls -N | 不限制文件长度。 | |
ls -o | 显示文件的除组信息外的详细信息。 | |
ls -p -F | 在每个文件名后附上一个字符以说明该文件的类型 | “*”表示可执行的普通,“ |
ls -q | 用?代替不可输出的字符。 | |
ls -Q | 把输出的文件名用双引号括起来。 | |
ls -r | 从后向前列举目录内容 | |
ls -R | 递归的列举所有目录以及目录下的内容 | |
ls -X | 以文件的扩展名(最后一个 . 后的字符)排序。 | |
ls -s | 在每个文件名后输出该文件的大小。 | |
ls -S | 按文件大小排列 | |
ls -t | 以时间排序(说明以最近修改的日期进行排序) | |
ls -u | 以文件上次被访问的时间排序 | |
ls --color=no | 不显示彩色文件名 | |
ls --help | 在标准输出上显示帮助信息。 | |
ls --version | 在标准输出上输出版本信息并退出。 |
# 列出以"t"开头文件:
ls -l t*
功能 | 命令 | 说明 |
---|---|---|
通过字符串替换的方式批量修改文件名 | rename from to file | from:要替换的字符;to 替换的结果;file 影响域。举例:rename .jpg .png *.jpg (将所有jpg文件替换为png结尾) |
显示文件类型 | file filename.txt | 多个文件用空格隔开,可以使用通配符批量匹配 |
计算和校验md5 | md5sum test.txt | -b 二进制模式读取文件;-c 从指定文件中读取md5并进行校验,举例:md5sum -c md5.log(输出当前目录md5匹配的文件); |
功能 | 命令 | 说明 |
---|---|---|
复制文件到指定目录 | cp file1 /home/B | 当前目录下的/home/B目录(相对路径) |
复制文件到当前目录 | cp -r test.txt newTest.txt | -r 同时复制目录下的所有文件 |
在cp指令前面加反斜杠可以不弹出是否覆盖的询问而直接覆盖!如:\cp -rf luo1/* luo2/
表示用目录luo1覆盖luo2目录。
Linux之间复制文件和目录:
使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
功能 | 命令 | 说明 |
---|---|---|
从本地复制到远程 | scp local_file remote_username@remote_ip:remote_folder | 复制到目录 local_file |
从本地复制到远程 | scp local_file remote_username@remote_ip:remote_file | remote_file为目录+文件名,该命令修改了文件名 |
从远程复制到本地 | scp remote_username@remote_ip:remote_folder local_file | |
指定端口进行复制 | scp -P 4588 remote_username@remote_ip:remote_folder local_file | 远程服务器防火墙有为scp命令设置了指定的端口需要使用-p参数 |
如:把本地文件夹复制到远程 scp -r /opt/soft root@10.95.0.0:/opt
scp:secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
ssh:secure shell的缩写
sftp> lcd 本地路径
进入本地路径
sftp> put 本地文件 服务器绝对路径
# 查看服务器文件夹下内容
sftp> ls 服务器绝对路径
# 举例:把本地服务器的/www/wwwroot目录下面的study.log文件上传到远程服务器的/www/server目录下。
sftp> lcd /www/wwwroot
sftp> put study.log /www/server
# 下载文件:
# 把远程服务器的/www/server目录下面的study.log文件下载到本地服务器的/www目录下。
sftp> get /www/server/study.log /www
# 下载文件夹:
# 把远程服务器的/www/server目录下面的test文件夹下载到本地服务器的/www目录下。
sftp> get -r /www/server/test /www
# 查看本地服务器/www目录下面的文件和文件夹
sftp> lls /www
exit
文件颜色 | 说明 |
---|---|
绿色文件 | 可执行文件,可执行的程序 |
红色文件 | 压缩文件或者包文件 |
蓝色文件 | 目录 |
白色文件 | 一般性文件,如文本文件,配置文件,源码文件等 |
浅蓝色文件 | 链接文件,主要是使用ln命令建立的文件 |
红色闪烁 | 表示链接的文件有问题 |
黄色 | 表示设备文件 |
灰色 | 表示其他文件 |
功能 | 命令 | 备注 |
---|---|---|
查看文件 | cat /etc/hosts | -n 由1开始对所有输出的行数进行编号;-b 和-n一样,但是不对空白行编号;-s 遇到有连续两行以上的空白行,就代换为一行的空白行。 |
把多个文件合并为一个 | cat file1.txt file2.txt > newfile.txt | |
创建编辑新文件 | cat > head.txt | 使用ctrl+d 或 ctrl+c可结束编辑;cat > head.txt <<EOF EOF作为标准输入结束。 |
追加内容到结尾 | cat >> file1.txt <<EOF | |
清空文件内容 | cat /dev/null >file.txt | cd $1/target/ > /dev/null 只输出错误的东西;cd $1/target/ > /dev/null 2>&1 2表示错误 1表示正确 这句话把2当1输出 由于加了/dev/null 所以都不输出 |
vi 文件 进入阅览状态,一般模式
常用命令:
命令 | 功能 |
---|---|
w | 下一单词的第一字符 |
e | 下一单词的最后字符 |
b | 上一单词的第一字符 |
( | 到句首 |
) | 到句尾 |
ctrl+F | 上页 |
ctrl+B | 下页 |
dd | 删除当前行 |
x | 删除当前字符 |
u | 恢复前一步操作 |
p | 复制之前删除的行 |
G | 查看文件最后一页 |
?a | 从文件最后查找a |
N | 下一个 |
gg | 光标跳到文件开头 |
dG | 清空光标到结尾的数据 |
按i进行编辑:
使用键盘上的Page Up和Page Down键可以上下翻页;
编辑完内容后,按下Esc键,并输入“:wq”,然后回车就可以保存退出。按:(英文冒号)就进入了底线命令模式。
常用底线命令:
命令 | 功能 | 备注 |
---|---|---|
q | 退出程序 | |
q! | 强制退出不保存 | |
w | 保存文件 | |
wq | 保存并退出 | |
set number | 显示行号 | |
:set fileencoding | 查看文件编码方式 | 如utf-8 |
:set ff? | 查看文件是dos格式还是unix格式 | windows标识一行的结束用的是回车换行符,即’\r\n’,也叫做CRLF。linux对一行结束的标识则只有换行,即’\n’,也就是LF |
set ff=unix | 修改格式 |
显示文件内容(从头显示,默认输出文件的开头10行):
head 文件名
参数:
-q 隐藏文件名
-v 显示文件名
-c 数字 显示字节数,如:-c1
-n 数字 显示多少行
显示文件内容(从最后显示,默认输出文件的最后10行):
tail 文件名
参数:
-f 数字 实时的把打开文件中的新消息显示到屏幕,等同于 tailf output.txt
-c 数字 指定显示的字节数
-n 数字 指定显示的行数
--pid=进程号 与-f连用,在进程结束后自动退出tail命令
-s 秒数 监视文件变化的间隔秒数
主要用于跟踪日志文件,默认输出最后10行。
与tail -f
不同的是,如果文件不增长,那么不访问磁盘,也不会更改文件的访问时间。
tailf output.txt
-n 行数 指定显示行数。
查找指定的字符串在文件中:
grep yun mege2.txt
grep ^Aug mege2.txt #查找当前目的录中文件mege2.txt中 以“Aug”开始的词汇
grep [0-9] mege2.txt #选择文件中所有包含数字的行
grep test *file #在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行
grep -r update /etc/acpi #- 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件
grep -rn "abc" #以递归方式查找当前目录中包含字符串“abc”的文件
grep -v grep #反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。 即不包含grep的项(即过滤掉本条查询语句)
grep -a abc #过滤abc。 -a表示二进制文本当普通文本处理。主要用于grep的时候报错:Binary file (standard input) matches,Unable to write to standard out, closing consumer。
#其它参数
-i 或 --ignore-case : 忽略字符大小写的差别。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
# 查看内存总量
grep MemTotal /proc/meminfo
# 查看空闲内存量
grep MemFree /proc/meminfo
查看当前目录下包含某字串的文件:ll | grep luo
字符串替换、删除,但不修改文件。
sed 's/string1/string2/' 1.txt 将1.txt文件中string1替换成string2显示。
sed -e 's/string1//' 1.txt 从文档中只删除词汇string1 (参数为e,动作为d)
sed -i '/test/d' test.sh 同步删除文件test.sh中的以test开头的字符串
Sed 主要用来在脚本中自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
-i : edit files in place
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
参数:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符tab。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
N:第N个字节、字符或字段
N-:从第N个字节、字符或字段开始直至行尾
N-M:从第N到第M(含第M)个字节、字符或字段
-M:从第1到第M(含第M)个字节、字符或字段
cut -b colnum file #指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符 cut -b5-9 file.txt
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
取free命令输出的Mem行的第二列:
free -m | grep Mem |awk '{print $2}'
#最后一列(分隔域,如/opt/luo为两个域,NF为luo.分隔符可以是斜杠、空格、Tab) $2改为$NF (field)
#倒数第二列 $2改为$(NF-1)
#第一行 $NR
#杀掉/opt/luo目录下的所有进程,grep -v grep可以避免杀死/opt/luo下的当前kill进程
kill -9 `ps -ef | grep /opt/luo | grep -v grep | awk '{print $2}'`
#取第一行最后一列
ps -ef|grep /opt/luo/ | grep -v grep |awk NR==1| awk '{print $NF}'
# 输出log.txt文件的第1、4项
awk '{print $1,$4}' log.txt
# 格式化输出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
# -F指定分隔符,如:使用","分割
awk -F, '{print $1,$2}' log.txt
# 设置变量 awk -v
awk -va=1 '{print $1,$1+a}' log.txt
#awk -f {awk脚本} {文件名}
awk -f cal.awk log.txt
#过滤第一列大于2的行
awk '$1>2' log.txt
将输入的文件内容按照指定的规则进行排序,然后将排序结果输出。
常见参数:
-n:依照数值大小排序
-r:倒序排
-u:去除重复行
-t:指定分隔符
-k:按指定区间排序
命令 | 功能 | 备注 |
---|---|---|
sort file.txt | 对file.txt文件中的行进行排序 |
输出或忽略文件中的重复行。主要用于在sort命令排序后,用uniq命令对文件去重并计数。
uniq [option] [INPUT(文件或标准输入)]
-c 去除重复行,并计算每行出现的次数
-d 只显示重复的行
-u 只显示唯一的行
统计文件的行数、单词数或字节数。
wc [option] [file]
-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计单词数
-L 统计打印最长行的长度
ls -l |grep "^-"|wc -l
ls -l |grep "^d"|wc -l
ls -lR|grep "^-"|wc -l
ls -lR|grep "^d"|wc -l
grep "^-"
:将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
用于转换文件的编码格式。
iconv [options] [-f from-encoding(原编码)] [-t to-encoding] [inputfile(输入文件)]
-f encodingA 从编码A转换
-t encodingB 转换成编码B
-l 显示系统支持的编码
-o 将输出输入到指定文件
dos2unix 将DOS(Windows系统)格式文件转换未UNIX格式。
DOS下的文本文件以\r\n
换行,而UNIX以\n
换行。
dos2unix [file]
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
ps 查看进程信息并通过 less 分页显示
ps -aux | less -N
显示所有运行中的进程
ps aux | less
命令 | 功能 | 备注 |
---|---|---|
file somefile | 得到文件类型 |
whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。
说明 | 命令 | 备注 |
---|---|---|
从/开始进入根文件系统搜索文件和目录 | find / -name test | 搜索文件名为test的文件(注意为精确匹配,模糊匹配需要搭配通配符一起使用) |
搜索属于用户“user1”的文件和目录 | find / -user user1 | |
在目录“/home/user1”中搜索带有“.bin”结尾的文件 | find /home/user1 -name *.bin | |
统计所有符合要求的文件 | `find *.jar | wc -l` |
功能 | 命令 | 备注 |
---|---|---|
查看内核/操作系统/CPU信息 | cat /proc/version cat /proc/cpuinfo 或 uname --help查看相关命令 | |
查看发行版本号 | cat /etc/redhat-release /etc/centos-release | |
查看环境变量 | env | |
查看系统负载 | cat /proc/loadavg | |
查看系统64/32位 | getconf LONG_BIT |
功能 | 命令 |
---|---|
cpu信息 | lscpu |
功能 | 命令 | 参数 | 举例 |
---|---|---|---|
显示磁盘空间使用情况 | df | -a 全部文件系统列表-;-h 以方便阅读的方式显示信息;-i 显示inode信息;-k 区块为1024字节;-l 只显示本地磁盘;-T 列出文件系统类型 | 显示已经挂载的分区列表的磁盘使用:df -lh |
查看文件和目录磁盘使用的空间 | du | 显示dir1的磁盘使用情况:du -sh dir1 | |
查看挂接的分区状态 | `mount | column -t` | |
查看所有交换分区 | swapon -s |
用法:du [参数][文件]
或:du [v]目录
计算每个文件的磁盘用量,目录则取总用量。
常用参数:
-a, --all 输出所有文件的磁盘用量
-B, --block-size=大小 使用指定字节数的块
-b, --bytes -k (KB) -m(MB)
-c, --total 显示总计信息
-h, --human-readable 以易读方式显示文件大小(自动匹配m、G)
--si 类似-h,但在计算时使用1000 为基底而非1024
-S, --separate-dirs 不包括子目录的占用量;仅显示总计
--max-depth=N 显示目录总计(与--all 一起使用计算文件)
当N 为指定数值时计算深度为N;
--max-depth=0 等于--summarize
--time 显示目录或该目录子目录下所有文件的最后修改时间
--time=WORD 显示WORD 时间,而非修改时间:
atime,access,use,ctime 或status
--help 显示此帮助信息并退出
--version 显示版本信息并退出
分区 | 功能 | 大小限制 | 查看命令 |
---|---|---|---|
swap(交换分区) | 用来支持虚拟内存 | 最小容量是max(内存大小,16MB);最大可以达127MB | free -g |
root(根分区)(是/目录,而不是/root目录) | 启动系统所需的文件和系统配置文件 | 大多数系统50~100M即可 | df -h |
/usr | Linux系统的许多软件所在地方,基于RPM的包安装时使用 | 尽可能的大 | |
/home | 用户home目录所在地 | 大小取决于Linux有多少用户,以及这些用户存放多少数据。对于网站建设者,web服务和匿名Ftp/home/ftp的服务器内容也放在这里 | |
/usr/local | 与其余Linux系统不同的软件,如不是RPM包的软件。 | ||
/usr/src | 存放Linux内核源程序;存放RPM包的源程序。 | ||
/tmp | 用来存放临时文件 | ||
/var | Linux系统将把日志写在/var/log。打印队列的文件通常写在/var/spool 。 | ||
/boot | 所有LILO 启动时需要的文件都在/boot目录。 |
硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等。在linux中, HDA是IDE硬盘的名称,SDA是SATA的名称。在2.6.19内核里,所有的硬盘都叫SDA。
云操作系统下的硬盘一般叫做VDA。KVM虚拟机为了提升性能,一般使用virtio作为磁盘驱动,在虚拟机里面磁盘会显示成vda而不是传统的sda。通过修改/etc/udev/rules.d/10-local.rules文件可以将硬盘显示为sda(没用试过不知道好用不)。
fdisk 作为分区工具,可以把磁盘划分为若干分区,同时也能为每个分区指定文件系统,如linux、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等。
与df区别:侧重于显示当前系统中所有文件系统信息,fdisk侧重于显示分区表的信息。
常用命令:
fdisk -l 查看当前磁盘分区信息(主要是分区表信息)
显示内容如下《《《《《《《《《《《《《《《《《
Disk /dev/hda: 80.0 GB, 80026361856 bytes #硬盘80g
255 heads, 63 sectors/track, 9729 cylinders #有255个磁面;63个扇区;9729个磁柱;
Units = cylinders of 16065 * 512 = 8225280 bytes #每个 cylinder(磁柱)的容量是 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
《《《《《《《《《《《《《《《《《《《《《《《《《《《
显示内容讲解:
1)机器挂载了两个硬盘:hda、sda
2)hda有三个主分区(包括扩展分区):hda1 hda2 hda3(Extended扩展分区);逻辑分区是hd5-hda10。
sda有两个主分区:sda1 sda2(扩展分区);逻辑分区是sda5 sda6
3)磁盘总容量=主分区总容量;扩展分区容量=逻辑分区总容量。即:sda=sda1+sda2;sda2=sda5+sda6
4)引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从X cylinder(磁柱)开始;
End (结束):表示一个分区到 Y cylinder(磁柱)结束;
估算一个存储设备是否被完全划分: cylinders(柱体) 上一个分区的End 和 下一个分区的Start是不是一个连续的数字。连续的数字表示两个分区之间没有空白的分区,是连续的,以此类推就可以知道是不是完全划分。
5)id和System 表示的是一个意思,id看起来不太直观,我们要在fdisk 一个分区时,通过指定id来确认分区类型;比如 7表示的就NTFS 分区;这个在fdisk 中要通过t功能来指定
6)Blocks(容量):单位是K
fdisk /dev/sda
Command (m for help): 在这里按m ,就会输出帮助;
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition #删除一个分区;如果想删除sda6,那么在接下来的选择中填写对应数字6即可。扩展分区删除会连逻辑分区一并删除,如果删错,用q不保存退出。
l list known partition types #列出分区类型,以供我们设置相应分区的类型;
m print this menu #列出帮助信息;
n add a new partition #添加一个分区;
o create a new empty DOS partition table
p print the partition table #列出分区表;
q quit without saving changes #不保存退出;
s create a new empty Sun disklabel
t change a partition's system id #改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit #把分区表写入硬盘并退出;
x extra functionality (experts only) #扩展应用,专家功能;
文件系统 | 对应centos系统 | 特点 | 场景 |
---|---|---|---|
ext2 | 适用于U盘 | ||
ext3 | centos5默认文件系统 | fsck时需要耗费大量时间(文件越多,时间越长) | |
ext4 | centos6 | 在fsck时用的时间相对较少 | 硬盘中,小文件较少 |
xfs | centos7.0 | 硬盘中,小文件较多 |
tmpfs
是一种基于内存的文件系统,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。
ext4
第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统
fsck(file system check)
用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
xfs
一种非常优秀的日志文件系统,xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs。ext系列文件系统内部结构相对简单一些,出问题后恢复相对容易。
一般系统盘做xfs,数据盘做ext4
命令 | 功能 |
---|---|
mkfs [tab] [tab] | 按下两下tab键查看系统支持哪些文件系统的格式化功能 |
mkfs -t [文件系统格式名] | 等同于mkfs.文件系统格式名 |
mkfs -t xfs | 与 mkfs.xfs相同 |
mkfs.xfs /dev/sdb | 格式化磁盘,第一次执行mkfs.xfs可能需要安装:apt-get install xfsprogs |
功能 | 命令 | 备注 |
---|---|---|
挂载一个文件系统 | mount /dev/hda2 /mnt/hda2 | 挂在一个叫做hda2的盘-确定目录“/mnt/hda2”已经存在 |
卸载一个文件系统 | umount /dev/hda2 | 一个叫做hda2的盘-先从挂载点“/mnt/hda2”退出 |
查看所有设备label和uuid | blkid | |
查看系统分区 | lsblk | 系统盘:安装系统的盘;数据盘:存储数据的盘。 |
参数:-a, --all 显示所有设备。
-b, --bytes 以bytes方式显示设备大小。
-d, --nodeps 不显示 slaves 或 holders。
-D, --discard print discard capabilities。
-e, --exclude <list> 排除设备 (default: RAM disks)。
-f, --fs 显示文件系统信息。
-h, --help 显示帮助信息。
-i, --ascii use ascii characters only。
-m, --perms 显示权限信息。
-l, --list 使用列表格式显示。
-n, --noheadings 不显示标题。
-o, --output <list> 输出列。
-P, --pairs 使用key="value"格式显示。
-r, --raw 使用原始格式显示。
-t, --topology 显示拓扑结构信息。
磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。
第一列:磁盘设备文件或者该设备的Label或者UUID。通过命令blkidk可查看所有设备的label和uuid.
第二列:设备的挂载点,就是你要挂载到哪个目录下
第三列:磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等
第四列:文件系统的参数
参数 | 说明 |
---|---|
Async/sync | 设置是否为同步方式运行,默认为async |
auto/noauto | 当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto |
rw/ro | 是否以以只读或者读写模式挂载 |
exec/noexec | 限制此文件系统内是否能够进行"执行"的操作 |
user/nouser | 是否允许用户使用mount命令挂载 |
suid/nosuid | 是否允许SUID的存在 |
Usrquota | 启动文件系统支持磁盘配额模式 |
Grpquota | 启动文件系统对群组磁盘配额模式的支持 |
Defaults | 同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置 |
第五列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1 | |
值 | 说明 |
– | – |
0 | 代表不要做dump备份 |
1 | 代表要每天进行dump的操作 |
2 | 代表不定日期的进行dump操作 |
第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。 |
值 | 说明 |
---|---|
0 | 不要检验 |
1 | 最早检验(一般根目录会选择) |
2 | 1级别检验完成之后进行检验 |
扩容后重启发现lsblk和df -h大小不一致:
lsblk 查看的是block device,也就是逻辑磁盘大小。
df查看的是file system, 也就是文件系统层的磁盘大小。
如果block device容量变大,但还没有反映到file system中,更新命令(即全部扩容):
ext{2,3,4}文件系统:`resize2fs /dev/vda2`
xfs文件系统:`xfs_growfs /dev/vda2`
sar --help
用法: sar [ options选项 ] [ <interval时间间隔> [ <count次数> ] ]
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息
结果说明:
sar -u 1
列名 | 说明 | 备注 |
---|---|---|
CPU | all 表示统计信息为所有 CPU 的平均值。 | |
%user | 用户模式下消耗的CPU时间的比例; | |
%nice | 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例; | |
%system | 系统模式下消耗的CPU时间的比例; | |
%iowait | CPU等待磁盘I/O而导致空闲状态消耗时间的比例; | 如果 %iowait 的值过高,表示硬盘存在I/O瓶颈 |
%steal | 利用Xen等操作系统虚拟化技术时,等待其他虚拟CPU计算占用的时间比例; | |
%idle | CPU没有等待磁盘I/O等的空闲状态消耗的时间比例 | 如果 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量;如果 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。 |
sar -v 1 5
列名 | 说明 |
---|---|
dentunusd | 目录高速缓存中未被使用的条目数量 |
file-nr | 文件句柄(file handle)的使用数量 |
inode-nr | 索引节点句柄(inode handle)的使用数量 |
pty-nr | 使用的pty数量 |
sar -r 1 5
列名 | 说明 |
---|---|
kbmemfree | 这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间. |
kbmemused | 这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间. |
%memused | 这个值是kbmemused和内存总量(不包括swap)的一个百分比. |
kbbuffers和kbcached | 这两个值就是free命令中的buffer和cache. |
kbcommit | 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap). |
%commitv | 这个值是kbcommit与内存总量(包括swap)的一个百分比. |
sar -B 10 3
列名 | 说明 |
---|---|
pgpgin/s | 表示每秒从磁盘或SWAP置换到内存的字节数(KB) |
pgpgout/s | 表示每秒从内存置换到磁盘或SWAP的字节数(KB) |
fault/s | 每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) |
majflt/s | 每秒钟产生的主缺页数. |
pgfree/s | 每秒被放入空闲队列中的页个数 |
pgscank/s | 每秒被kswapd扫描的页个数 |
pgscand/s | 每秒直接被扫描的页个数 |
pgsteal/s | 每秒钟从cache中被清除来满足内存需要的页个数 |
%vmeff | 每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比 |
sar -b 1 5
列名 | 说明 |
---|---|
tps | 每秒钟物理设备的 I/O 传输总量 |
rtps | 每秒钟从物理设备读入的数据总量 |
wtps | 每秒钟向物理设备写入的数据总量 |
bread/s | 每秒钟从物理设备读入的数据量,单位为 块/s |
bwrtn/s | 每秒钟向物理设备写入的数据量,单位为 块/s |
sar -q 1 5
列名 | 说明 |
---|---|
runq-sz | 运行队列的长度(等待运行的进程数) |
plist-sz | 进程列表中进程(processes)和线程(threads)的数量 |
ldavg-1 | 最后1分钟的系统平均负载(System load average) |
ldavg-5 | 过去5分钟的系统平均负载 |
ldavg-15 | 过去15分钟的系统平均负载 |
sar -W 1 5
列名 | 说明 |
---|---|
pswpin/s | 每秒系统换入的交换页面(swap page)数量 |
pswpout/s | 每秒系统换出的交换页面(swap page)数量 |
sar -d 1 5 -p
参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
列名 | 说明 | 备注 |
---|---|---|
tps | 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的. | |
rd_sec/s | 每秒读扇区的次数. | |
wr_sec/s | 每秒写扇区的次数. | |
avgrq-sz | 平均每次设备I/O操作的数据大小(扇区). | |
avgqu-sz | 磁盘请求队列的平均长度. | avgqu-sz 的值较低时,设备的利用率较高。 |
await | 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒). | |
svctm | 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间. | |
%util | I/O请求占CPU的百分比,比率越大,说明越饱和. | 当%util的值接近 1% 时,表示设备带宽已经占满。 |
# 1s打印一次网络io
sar -n DEV 1
列名 | 说明 |
---|---|
IFACE | LAN接口 |
rxerr/s | 每秒钟接收的坏数据包 |
txerr/s | 每秒钟发送的坏数据包 |
coll/s | 每秒冲突数 |
rxdrop/s | 因为缓冲充满,每秒钟丢弃的已接收数据包数 |
txdrop/s | 因为缓冲充满,每秒钟丢弃的已发送数据包数 |
txcarr/s | 发送数据包时,每秒载波错误数 |
rxfram/s | 每秒接收数据包的帧对齐错误数 |
rxfifo/s | 接收的数据包每秒FIFO过速的错误数 |
txfifo/s | 发送的数据包每秒FIFO过速的错误数 |
# 查看磁盘IO
iostat -d -k -x 3
默认上,iostat以B为单位衡量I/O系统
-k 以KB为单位
-m 以MB为单位
-x 增加其它数据:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;
await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
第一部分包含了CPU报告
列名 | 说明 |
---|---|
%user | 显示了在执行用户(应用)层时的CPU利用率 |
%nice | 显示了在以nice优先级运行用户层的CPU利用率 |
%system | 显示了在执行系统(内核)层时的CPU利用率 |
%iowait | 显示了CPU在I/O请求挂起时空闲时间的百分比 |
%steal | 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有的时间百分比。 |
%idle | 显示了CPU在I/O没有挂起请求时空闲时间的百分比 |
第二部分包含了设备利用率报告
列名 | 说明 |
---|---|
Device | 列出的/dev 目录下的设备/分区名称 |
tps | 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。 |
Blk_read/s | 显示了每秒从设备上读取的块的数量(KB,MB) |
Blk_wrtn/s | 显示了每秒写入设备上块的数量(KB,MB) |
Blk_read | 显示所有已读取的块 |
Blk_wrtn | 显示所有已写入的块 |
可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。
vmstat -help
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition <dev> partition specific statistics
-S, --unit <char> define display unit
-w, --wide wide output
-t, --timestamp show timestamp
-h, --help display this help and exit
-V, --version output version information and exit
命令 | 说明 | 备注 |
---|---|---|
vmstat 3 10 | 以3秒为时间间隔,连续收集10次性能数据 |
结果解读:
字段 | 类别 | 说明 |
---|---|---|
r | procs(进程) | 在运行队列中等待的进程数 |
b | procs | 在等待io的进程数 |
swpd | memory(内存) | 已经使用的交换内存(kb) |
free | memory | 空闲的物理内存(kb) |
buff | memory | 用做缓冲区的内存数(kb) |
cache | memory | 用做高速缓存的内存数(kb) |
si | swap(交换页面) | 从磁盘交换到内存的交换页数量(kb/秒) |
so | swap | 从内存交换到磁盘的交换页数量(kb/秒) |
bi | IO(块设备) | 发送到块设备的块数(块/秒) |
bo | IO | 从块设备中接收的块数(块/秒) |
in | system(系统) | 每秒的中断数,包括时钟中断 |
cs | system | 每秒的上下文切换次数 |
us | CPU(处理器) | 用户进程使用的cpu时间(%) |
sy | CPU | 系统进程使用的cpu时间(%) |
id | CPU | CPUT空闲时间(%) |
wa | CPU | 等待IO所消耗的cpu时间(%) |
st | CPU | 从虚拟设备中获得的时间(%) |
按q退出,按h进入帮助。
linux上进程有5种状态,ps对应5种状态码:
常用参数:
-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程,显示的列内容:USER PID %CPU %MEM
举例:
##查询进程
ps aux | grep 文件/服务
##显示所有运行中的进程
ps aux | less
##显示当前所有进程环境变量及进程间关系
ps -ef
##进程数
ps -ef | wc -l
##查询jar包运行的进程号
ps -ef | grep java | grep /opt/test.jar|grep -v grep|awk ' { print $2 } '
## 进程启动时间查看
ps -p PID -o lstart
##显示当前所有进程
ps -A
## 查看僵尸进程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
## 杀掉僵尸进程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
## 查看是否还存在僵尸进程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
功能 | 命令 | 备注 |
---|
查看tomcat线程以及luo进程是否存在| ps -ef|grep tomcat|grep luo
线程数| ps -xH | wc -l
功能 | 命令 | 备注 |
---|---|---|
kill -9 6866(进程id) | 杀死进程 |
# 杀掉以/opt/luo开头的所有进程
# `··`(反点)和`$()`意思一样 执行脚本的意思;`‘’`(双引号)表示字符串
kill -9 ` ps -ef | grep /opt/luo | grep -v grep | awk '{print $2}'`
# 除${NSTALL_PATH}/bin/shell/uninstall.sh相关的进程, 关闭NSTALL_PATH路径下的所有进程
ps -ef | grep "$NSTALL_PATH" | grep -v grep | grep -v ${NSTALL_PATH}/bin/shell/uninstall.sh | awk '{print $2}' | xargs kill -9
too many open files是Linux系统中常见的错误,主要是进程持有句柄(handle)数超出系统限制。句柄包含:文件、连接(socket、端口占用)。
功能 | 命令 | 备注 |
---|---|---|
查看当前系统设置的最大句柄数 | ulimit -a | open files那一行就代表系统目前允许单个进程打开的最大句柄数 |
查询当前系统上进程默认最多打开的文件描述符(句柄)数量 | cat /proc/PID/limits | 一般跟随父进程设置;默认为4096 |
查看单个进程文件句柄数 | lsof -p PID | `lsof -p PID |
查看当前系统句柄数(文件描述符) | ulimit -n | |
增大允许打开的文件数(临时) | ulimit -n 2048 | 重启后会还原为默认值。非root用户只能设置到4096;想要设置到更大需要sudo权限或者root用户。 |
查看进程当前fd(文件描述)或者IO | cd /proc/6244/fd && ll | pid=6244 |
修改最大文件打开数 | echo -e "root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n" >> /etc/security/limits.conf | |
修改最大进程数 | sed -i 's#4096#65535#g' /etc/security/limits.d/20-nproc.conf |
增大允许打开的文件数(修改系统配置文件):
vim /etc/security/limits.conf
#在最后加入
* soft nofile 4096
* hard nofile 4096
或者只加入
* - nofile 8192
最前的 * 表示所有用户,可根据需要设置某一用户,例如
roy soft nofile 8192
roy hard nofile 8192
注意”nofile”项有两个可能的限制措施。就是项下的hard和soft。 要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用”-“字符设定, 则hard和soft设定会同时被设定。
命令 | 说明 | 备注 |
---|---|---|
lsof -i UDP | 查看udp网络连接 | |
lsof -i 端口号 | 查看端口占用情况 |
命令 | 说明 | 备注 |
---|---|---|
supervisorctl status | 查看所有子进程的状态 | 第一列是服务名;第二列是运行状态,RUNNING表示运行中,FATAL 表示运行失败,STARTING表示正在启动,STOPED表示任务已停止; 第三/四列是进程号,最后是任务已经运行的时间。 |
supervisorctl status 服务名 | 查看单个任务状态 | |
supervisorctl stop 服务名 | 关闭任务 | |
supervisorctl stop all | 关闭所有进程 | |
supervisorctl start 服务名 | 启动任务 | |
supervisorctl start all | 启动所有进程 | 之后再关闭supervisord服务 kill -9 pid |
supervisorctl restart 服务名 | 重启任务 | |
supervisorctl update | 重新载入配置文件 | |
supervisorctl shutdown | 关闭supervisord | |
supervisorctl clear 进程名 | 清空进程日志 |
通过top命令对进程的显示方式进行控制。
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
VIRT = SWAP + RES;RES = CODE + DATA
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
查看进程中cpu占用高的几个线程:top -Hp PID
参数 | 说明 |
---|---|
-o 字段名 | 按字段排序 |
d | 指定每两次屏幕信息刷新之间的时间间隔。单位为秒 |
p | 通过指定监控进程ID来仅仅监控某个进程的状态。 |
q | 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 |
S | 指定累计模式。 |
s | 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 |
i | 使top不显示任何闲置或者僵死进程。 |
c | 显示整个命令行而不只是显示命令名。 |
进入top后交互命令:
命令 | 说明 |
---|---|
f | 选择显示的内容(上下键选择) |
q | 退出 |
x | 当前排序字段 |
N | 以 PID 的大小的顺序排列表示进程列表 |
P | 以 CPU 占用率大小的顺序排列进程列表 %CPU |
M | 以内存占用率大小的顺序排列进程列表 %MEM |
h | 显示帮助 |
n | 设置在进程列表所显示进程的数量 |
top结果说明:
第一行为任务队列信息(同uptime命令):系统运行时间、(当前登录)用户数、负载(系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。)
第二、三行为进程和CPU的信息:
Tasks: 29 total | 进程总数 |
---|---|
1 running | 正在运行的进程数 |
28 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
Cpu(s): 0.3% us | 用户空间占用CPU百分比 |
1.0% sy | 内核空间占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id | 空闲CPU百分比 |
0.0% wa | 等待输入输出的CPU时间百分比 |
0.0% hi | |
0.0% si |
第四五行为内存信息:
Mem: 191272k total | 物理内存总量 |
---|---|
173656k used | 使用的物理内存总量 |
17616k free | 空闲内存总量 |
22052k buffers | 用作内核缓存的内存量 |
Swap: 192772k total | 交换区总量 |
0k used | 使用的交换区总量 |
192772k free | 空闲交换区总量 |
123988k cached | 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。 |
top列表每一列含义及如何展示:
列名 | 说明 | 是否默认展示 |
---|---|---|
PID | 进程id | 默认展示 |
PPID | 父进程id | |
RUSER | Real user name | 默认展示 |
UID | 进程所有者的用户id | |
USER | 进程所有者的用户名 | |
GROUP | 进程所有者的组名 | |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? | |
PR | 优先级 | 默认展示 |
NI | nice值。负值表示高优先级,正值表示低优先级 | 默认展示 |
P | 最后使用的CPU,仅在多CPU环境下有意义 | |
%CPU | 上次更新到现在的CPU时间占用百分比 | 默认展示 |
TIME | 进程使用的CPU时间总计,单位秒 | |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 | 默认展示 |
%MEM | 进程使用的物理内存百分比 | 默认展示 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES | 默认展示 |
SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 | |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA | 默认展示 |
CODE | 可执行代码占用的物理内存大小,单位kb | |
DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb | |
SHR | 共享内存大小,单位kb | 默认展示 |
nFLT | 页面错误次数 | |
nDRT | 最后一次写入到现在,被修改过的页面数。 | |
S 进程状态。 | (D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) | 默认展示 |
COMMAND | 命令名/命令行 | 默认展示 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 | |
Flags | 任务标志,参考 sched.h |
功能 | 命令 |
---|---|
显示进程树状图 | pstree |
查找进程 | pgrep 进程名称 |
功能 | 命令 | 参数 | 实例 |
---|---|---|---|
显示内存使用情况 | free [-bkmotV][-s <间隔秒数>] | -b 以Byte为单位显示; -k KB;-m MB;-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值(b、k、m、g(gigas)、t);-o 不显示缓冲区调节列。 -s<间隔秒数> 持续观察内存使用状况。 -t 显示内存总和列。 -V 显示版本信息。 | free -g -s 10 //每10s 执行一次命令 available列的值即为可用内存(g) |
total——总物理内存
used——已使用内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加),一般主要是es等占用巨大
cached——缓存,用于已打开的文件
available——可用内存。根据可用内存buff/cache自动调整。
linux的缓存机制是这样的,当第一次读取一个文件时,一份放到内存cache中,另外一份放到运行程序的内存中,当下次再使用的时候,直接从cache中读取数据,速度就会快很多,但是有频繁的读写,而drop_cache默认是不释放的,就导致cache占用越来越多,物理内存会逐渐被吃了,当然此设置也是可以修改的,我们下面看怎么临时释放cache内存。
释放之前执行sync命令同步数据导硬盘中。
sync
释放缓存:
echo 3 > /proc/sys/vm/drop_caches
--0:不释放(系统默认值)
--1:释放页缓存
--2:释放dentries和inodes
--3:释放所有缓存
对于数据库来,除了释放1 2 3的缓存之外,还需要重启数据库。
检测一个命令的运行结果。
watch [options] command
-d:高亮显示指令输出信息的不同之处
-n:指定命令执行的时间间隔(默认单位为秒)
-t:不显示标题
举例:
watch -n 1 'psql -c "select now();"'
比pg的\watch命令更加灵活
功能 | 命令 | 备注 |
---|---|---|
显示月历 | cal | |
查看主机名 | hostname | |
查看主机详情 | hostnamectl | |
修改主机名 | vi /etc/hostname 或者 hostnamectl set-hostname <主机名> | 修改后需要重启 |
查看当前 PATH 配置 | echo $PATH | |
显示一个二进制文件或可执行文件的完整路径 | which halt | which 是在 $PATH就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 |
显示一个二进制文件,源码或man的位置 | whereis halt | whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。 |
查询进程 | ps aux | grep 文件/服务 |
查看硬件时间 | hwclock -r -u | |
修改硬件时间 | date -s “2019-1-21 10:00:00” && hwclock –w | |
查看软件时间 | date | |
修改软件时间 | date -s “Tue Dec 3 10:56:25 CST 2019” | |
将软件时间写入硬件时间 | sudo hwclock -w; hwclock -r ; date | |
禁用SELinux | /etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled | 修改后reboot,执行getenforce 可确认状态 |
查看系统启动时间 | date -d “$(awk -F. ‘{print $1}’ /proc/uptime) second ago” +“%Y-%m-%d %H:%M:%S” | /proc/uptime文件记录了系统已运行时间,单位秒 |
功能 | 命令 | 备注 |
---|---|---|
查看活动用户 | w | |
查看指定用户信息 | id <用户名> | |
查看用户登录日志 | last | |
查看系统所有用户 | cut -d: -f1 /etc/passwd | |
查看系统所有组 | cut -d: -f1 /etc/group | |
查看当前用户的计划任务 | crontab -l | |
变更为其他使用者的身份,除 root 外,需要键入该使用者的密码 | su root |
功能 | 命令 | 备注 |
---|---|---|
列出所有系统服务 | chkconfig --list | |
列出所有启动的系统服务 | `chkconfig --list | grep on` |
systemctl是Systemd 的主命令,可用于管理系统。
功能 | 命令 | 备注 |
---|---|---|
查看版本号 | systemctl --version | |
安装位置 | whereis systemd | |
列出所有service | systemctl list-units --type=service | |
分析启动时各个进程花费的时间 | systemd-analyze blame | |
列出所有服务(包括启用的和禁用的) | systemctl list-unit-files --type=service | --state=active active状态(运行或退出)--state=running 正在运行的服务;failed、enabled |
操作服务 | systemctl [command] gateway-service | command 主要有: start、 restart、 stop、 status、 enable(启用开机自启)、 disable、 reload(不关闭 unit 的情况下,重新载入配置文件,让设置生效。)、 show(列出配置)、 mask(注销,注销后你就无法启动这个 service了)、 unmask(取消对 unit 的注销)、 is-active、kill |
查看系统日志 | journalctl -u gateway-service |
功能 | 命令 | 备注 |
---|---|---|
查看所有安装的软件包 | rpm -qa | |
查看rpm包安装路径 | rpm -ql 包名 | |
安装rpm包 | rpm -ivp package1.rpm package2.rpm | |
安装rpm显示安装进度 | -ivh | |
卸载rpm包 | rpm -ef package1 package2 | |
升级软件包 | -Uvh | |
列出RPM软件包内的文件 | rpm -qpl package1.rpm | |
列出RPM软件包的描述信息 | -qpi | |
查找指定文件属于哪个RPM软件包 | -qf | |
校验所有的RPM软件包,查找丢失的文件 | -Va | |
删除包 | -e |
Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。
默认情况下,Ansible使用SSH协议在管理机和客户机之间进行通信。可以使用SFTP与客户机进行安全的文件传输。
/etc/ansible/hosts
,可以通过-i指定自定义的host文件。注意,ansibled命令的使用需要在各个结点之间建立 ssh凭据。
参数说明:
-i, 选择 host文件 缺省文件:/etc/ansible/hosts
all, 指定Ansible应该在所有主机上运行此命令
-b, --become:特权方式运行命令。
-m, model 要使用的模块名称。
-a, --args:制定模块所需的参数。
-u, 制定连接的用户名。
-h, --help显示帮助内容。
-v,--verbose以详细信息模式运行命令,可以用来调试错误。
执行每个节点的 /bin/shell/stop.sh脚本:
ansible -i hostlist all -b -m shell -a /bin/shell/stop.sh
ping所有节点
ansible all -m ping
ad-hoc命令,运行单个任务:
ansible web -b -m service -a "name=httpd enabled=yes"
# web, web组
# 启动httpd服务命令
首先建立ssh信任连接一般给固定某个用户。
进入目录可查看ssh凭据:
cd ~/.ssh/ 进入ssh凭据目录
ll 查看凭据,id_rsa为私钥,id_rsa.pub为公钥 vim id_rsa.pub即可查看公钥
ssh-keygen -t rsa 凭据生成,-t后面跟具体的算法rsa或dsa,默认为rsa。一路回车选择默认即可。然后ll即可查看凭据
cp id_rsa.pub authorized_keys 到每个结点即可
验证:可以之间ssh到其它服务器,不需要再输入密码。
用于非交互的ssh 密码验证,它支持密码从命令行,文件,环境变量中读取。
功能 | 命令 | 备注 |
---|---|---|
sshpass -p user_password ssh user_name@192.168.1.2 | 登录远程机器 | -p 参数指定明文密码,-q 去掉进度显示 |
sshpass -p user_password ssh user_name@192.168.1.2 “pwd” | 登录远程主机并执行pwd命令。可以替换为其它命令 | |
sshpass -p user_password scp -P22 root@192.168.1.2:/home/test ./ | 远程机器/home/test 复制到本机当前目录 -P22端口22 | |
sshpass -f user.passwd ssh user_name@192.168.1.2 | 从文件读取密码 | echo "user_password" > user.passwd -f 文件 |
sshpass -e ssh user_name@192.168.1.2 | 从环境变量获取密码 | export SSHPASS="user_password" |
#查看firewall状态,LINUX7默认是安装并开启的;
firewall-cmd --state
systemctl status firewalld
#安装
yum install firewalld
#启动
systemctl start firewalld
#设置开机启动
systemctl enable firewalld
#关闭,修改后reboot,执行firewall-cmd --state可确认状态
systemctl stop firewalld
#取消开机启动,修改后reboot,执行firewall-cmd --state可确认状态
systemctl disable firewalld
#重新加载配置文件,更改配置后一定要重新加载配置文件
firewall-cmd --reload
#查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略,在配置策略前,我一般喜欢先CP,以后方便直接还原)
firewall-cmd --list-all
#查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
firewall-cmd --list-all-zones
#查看开放的端口
firewall-cmd --list-ports
#禁止IP (123.44.55.66),执行成功后reload一下
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.44.55.66" drop'
#禁止一个IP段,比如禁止116.255.*.* ,执行成功后reload一下
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="116.255.0.0/16" drop'
#禁止一个IP段,比如禁止116.255.196.* ,执行成功后reload一下
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="116.255.196.0/24" drop'
#开放ip访问,即ip可以访问所有端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.1.2" accept'
#禁止机器IP(123.44.55.66)这条规则从防火墙中删除
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="123.44.55.66" drop'
#允许http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --add-service=http
#关闭http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --remove-service=http
#允许端口:3389
firewall-cmd --permanent --add-port=3389/tcp
#允许端口:1-3389
firewall-cmd --permanent --add-port=1-3389/tcp
#关闭放行中端口:3389
firewall-cmd --permanent --remove-port=3389/tcp
NAT表,作用是对网络地址进行转换,主要有两个功能:1. DNAT 网络目的地址转换; 2. SNAT 网络源地址转换。
场景:
1.公司里有几台服务器需要对外提供服务,但公司只有一个外网ip地址,怎么让几台服务器共用一个ip地址?
2.家庭里很手机、电脑等设备,一般会通过wifi连到路由器上,然后上外网,仔细推敲下手机电脑获取的是路由器分配的内网ip,而内网ip是不能在外网里传播的,路由器是如何实现让多台设备冲浪的?
linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具。可以对流入、流出及流经服务器的数据包进行精细的控制。
命令格式:
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
-t (table),后面接表名,例如nat或filter,缺省为预设的filter
##常用命令
-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空规则链;注意可能会导致服务器断开所有网络连接
-L look, 查看规则链
-A append, 在规则链的末尾加入新规则
-D num delete,删除规则-->iptables -D INPUT 1(编号)
-R 修改replace规则-->iptables -R INPUT 1 -s 192.168.12.0
-I num insert,在规则链的头部加入新规则 iptables -I INPUT 1 --dport 80 -j ACCEPT
-N 新的规则-->iptables -N allowed 定义新的规则
-j DROP 取代现行规则,顺序不变(1是位置)
## -j 指定要进行的处理动作:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source--指定原地址
## 常用参数
-p 匹配协议,如tcp udp icmp
-s 匹配源地址(ip、mask) 加叹号"!"表示除这个IP外。
-d 匹配目的地址
-sport 匹配源端口 例:iptables -A INPUT -p tcp --sport 22
-dport 匹配目的端口 例:iptables -A INPUT -p tcp --dport 22
-i 指定入口网卡 例:iptables -A INPUT -i eth0
-o 指定出口网卡 例:iptables -A FORWARD -o eth0
##其他
-n 不进行ip鱼hostname的反查,显示讯息速度会快一点;
-v 列出更多信息,包括通过该规则的封包总位数,相关的网络接口等
功能 | 命令 | 备注 |
---|---|---|
删除自定义链 | iptables -X newchain | |
重命名链 | iptables -E newchain newchain2 |
对于不直接提供公网地址给用户访问的客户,一般服务器在企业防火墙后面,通常只暴露一个公网给用户。
举例:
后端服务器:192.168.31.167 8080端口提供服务;
公网服务器:192.168.31.168 80端口暴露给用户进行访问。
直接在宿主机上访问:192.168.31.167:8080,服务正常。
在公网服务器上添加DSAT转换规则:
iptables -t nat -A PREROUTING -d 192.168.31.168 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.31.167:8080
外网访问192.168.31.168 80端口,验证结果是否ok
curl 192.168.31.168 80
功能 | 命令 | 备注 |
---|---|---|
创建一个新用户组 | groupadd group_name | |
删除一个用户组 | groupdel group_name | |
创建一个属于“admin”用户组的用户 | useradd -c “Name Surname” -g admin -d /home/user1 -s /bin/bash user1 | |
创建一个新用户 | useradd user1 | |
删除一个用户 | userdel -r user1 | |
修改一个用户的口令(只允许root执行) | passwd user1 | |
列出所有用户以及密码 | cat /etc/passwd | |
查找某个用户 | cat /etc/passwd | grep 用户名 |
列出所有用户组 | cat /etc/group | |
查找某个组 | cat /etc/group | grep 组名 |
查看当前登录用户的组内成员 | groups | |
查看test用户所在的组,以及组内成员 | groups test | |
查看当前登录用户 | whoami | |
历史访问用户列表 | who | 列从左到右:登录用户名、终端名、登录时间 |
查看系统所有用户 | lastlog | |
建立用户账号 | useradd | |
删除用户账号及相关文件 | userdel |
运行时报错:-bash: ./test: Permission denied
,需要修改访问权限,调用命令chmod 777 test
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。
chmod [-cfvR] [--help] [--version] mode file...
其中mode为权限设定字串,格式如:`[ugoa...][[+-=][rwxX]...][,...]`
其中:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
举例:将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
## 用数字来表示权限 分别表示User、Group、及Other的权限
# 其中 r=4,w=2,x=1
# 若要rwx属性则4+2+1=7;
# 若要rw-属性则4+2=6;
# 若要r-x属性则4+1=5。
chmod 777 file1.txt
chown [参数] [用户]:[用户组] [文件]
-R 递归更改目录所属的用户及用户组
通过ll命令,可以看到:
# 第一个root指的是所属用户,第二个root指的是所属用户组
-rw-r--r--. 1 root root 4 Nov 17 23:29 test1.py
# 修改所属【用户】为mysql
chown -R mysql test1.py
# 修改所属【用户组】为mysql
chown -R :mysql test1.py
# 同时修改所属【用户】及【用户组】为mysql
chown -R mysql:mysql test1.py
功能 | 命令 | 备注 |
---|---|---|
查看主机ip地址和网卡信息 | ifconfig | 网卡配置文件路径:/etc/sysconfig/network-scripts |
查看ip | ip addr | |
测试网络连通性 | ping | |
查看网络模式和网络速度 | ethtool | |
查看路由表 | route | |
查看主机名 | hostname | |
路由跟踪命令 | traceroute | |
查询dns相关信息记录 | dig | |
查看路由表 | route |
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告,另外它还能列出处于监听状态(即等待接入请求)的套接字。
netstat 显示连接信息,路由表
常用参数:
-a all,列出所有当前的连接
-t tcp,列出 TCP 协议的连接
-u udp
-n num, 禁用域名解析功能、只用数字展示,可以加扩查询速度
-l listening 正在监听的连接
-p process 显示对应连接的PID/Program name
查看端口是否监听:netstat -ntlp |grep 端口
查看端口占用情况(监听的和被调用的都有) `netstat -anp|grep 80` 或 `ss -ntlp | grep 443`
第一列ip:port表示本地address;
第二列ip:port表示外部访问它的foreign address;
最后一列为PID/Program name;
倒数第二列为连接状态state:ESTABLISHED-已连接,一般address\foreign address成对出现
-c continued 每隔一个固定时间,执行该netstat命令.
-e extend 显示扩展信息,例如uid等
查看进程拥有者 netstat -ltpe
-r route 显示路由信息
-s statistics 按各个协议进行统计
连接状态 | 说明 |
---|---|
CLOSED | 无连接是活动的或正在进行 |
LISTEN | 服务器在等待进入呼叫 |
SYN_RECV | 一个连接请求已经到达,等待确认 |
SYN_SENT | 应用已经开始,打开一个连接 |
ESTABLISHED | 正常数据传输状态 |
FIN_WAIT1 | 应用说它已经完成 |
FIN_WAIT2 | 另一边已同意释放 |
ITMED_WAIT | 等待所有分组死掉 |
CLOSING | 两边同时尝试关闭 |
TIME_WAIT | 另一边已初始化一个释放 |
LAST_ACK | 等待所有分组死掉 |
功能 | 命令 | 备注 |
---|---|---|
查看端口占用 | nnetstat –ano | grep 端口 |
打印网络接口 | netstat -i | -ie可以输出ifconfig,显示网卡列表 |
查看http,smtp 或 ntp 服务是否在运行 | `netstat -aple | grep ntp` |
统计机器中网络连接各个状态个数 | `netstat -an | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]} ’ netstat -ant |
netstat -antp | grep 2181 | 查看2181连接 |
利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。支持文件的上传和下载。
curl [option] [url]
参数 | 说明 |
---|---|
-A/–user-agent | 设置用户代理发送给服务器 |
-b/–cookie <name=string/file> | cookie字符串或文件读取位置 |
-c/–cookie-jar | 操作结束后把cookie写入到这个文件中 |
-C/–continue-at | 断点续转 |
-D/–dump-header | 把header信息写入到该文件中 |
-e/–referer | 来源网址 |
-f/–fail | 连接失败时不显示http错误 |
-o/–output | 把输出写到该文件中 |
-O/–remote-name | 把输出写到该文件中,保留远程文件的文件名 |
-r/–range | 检索来自HTTP/1.1或FTP服务器字节范围 |
-s/–silent | 静音模式。不输出任何东西 |
-T/–upload-file | 上传文件 |
-u/–user <user[:password]> | 设置服务器的用户和密码 |
-w/–write-out [format] | 什么输出完成后 |
-x/–proxy <host[:port]> | 在给定的端口上使用HTTP代理 |
-#/–progress-bar | 进度条显示当前的传送状态 |
-H | 请求头 |
-d | POST内容 |
-X | 请求协议 |
-k | 跳过ssl证书认证 |
示例: | |
上传: |
curl -u 用户名:密码 -T test.txt "https://af.cn/artifactory/document/test.txt"
下载:
curl -u 用户名:密码 https://af.cn/artifactory/test.txt
curl ${HTTP_WWW_PATH} -o /opt/test.zip
post访问:
curl -H "Content-Type: application/json"
-X POST
-d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }'
"http://192.168.0.1:8001/test"
wget ${HTTP_WWW}
过滤传递给指定端口的数据 。
tcpdump想要捕获发送给imap服务器的数据 , 可以使用下面的参数 , 默认端口是143 :
tcpdump -i any dst port 143 -l -s 0 -w -|strings
说明:
dst port 是目标端口 , 只获取发送的数据 , 不获取返回的数据
-l 是监听模式
-s 0 不限制大小
-|strings 传递给strings命令打印可以打印的字符
加入crontab:
echo "*/20 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com >/dev/null &" >> /var/spool/cron/root
参数 | 说明 |
---|---|
-a | Keyid 使用 Keyid 来认证全部数据包。 |
-b | 通过调用 settimeofday 子例程来增加时钟的时间。 |
-d | 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结 果再现在屏幕上。这个标志使用无特权的端口。 |
-e | AuthenticationDelay 指定延迟认证处理的时间秒数。 |
-k | KeyFile 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。 |
-o | Version 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。 |
-p | Samples 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。 |
-s | 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。 |
-t | TimeOut 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。 |
-u | 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。 |
-v | 记录 ntpdate 的版本标识字符串 |
-q | 仅查询 - 不设置时钟。 |
-B | 使用 adjtime() 系统调用强制始终对时间进行压摆,即使测得的偏移大于 ±128 ms。默认值是,如果偏移量大于 ±128 毫秒,则使用 settimeofday() 步进时间。请注意,如果在这种情况下偏移量远大于 ±128 毫秒,则可能需要很长时间(小时)才能将时钟转换为正确的值。在此期间,不应使用主机来同步客户端。 |
vi /etc/services
文件格式:
service-name port/protocol [aliases..] [#comment]
docker常用命令:
功能 | 命令 | 备注 |
---|---|---|
查看docker容器 | docker ps -a | 可以获得CONTAINER ID |
查看docker镜像 | docker images | |
查看服务端口映射情况 | docker container port a7bced18020a(CONTAINER ID) | |
进入正在运行的容器 | docker exec -it containerName bash | |
查看容器 | docker ps | 加参数-a表示查看所有容器,-l 查看最后一个创建的容器,包含停止态的容器。 |
容器重命名 | docker rename old容器名 new容器名 | |
删除容器 | docker rm $CONTAINER_ID | |
删除镜像 | docker rmi <imageID/ImageRepository:tag> | |
重启docker中的服务 | docker restart <containerID> | 如:docker restart serviceName |
暂停容器 | docker pause | |
停止容器 | docker stop | |
启动容器 | docker start | |
进入对应容器 | ssh localhost -p 12345(容器映射端口号) | |
查看容器的IP | docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID | |
搜索镜像 | docker search nginx | |
下载镜像 | docker pull nginx | 官方源速度慢的话,可以指定国内的源:docker pull daocloud.io/nginx |
k8s常用命令:kubernetes(k8s)
功能 | 命令 |
---|---|
tomcat关闭 | /opt/…/bin/shell/stop-tomcat.sh |
tomcat启动 | /opt/…/bin/shell/start-tomcat.sh |
TOMCAT启动JVM内存大小设置 | /bin/catalina.sh中,JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=512m"' ,然后重启tomacat。-Xms 堆空间初始大小,-Xmx 堆空间最大数值,-Xmn 年轻代的堆大小,-Xss 每个线程堆大小。 |
功能 | 命令 | 备注 |
---|---|---|
查看进程map | jmap 18093(PID) | jmap -dump:format=b,file=filename pid 将dump打出来 |
查看进程内存统计 | jmap -histo:live PID |
Eden区就是用来存放新创建的对象的,经过minor Gc之后,会把存活的对象放到其Survior区中,再经过几次minor Gc后存活的对象会被放到Old区。所以总体来说Eden总是会不断增长的,并不断的minor Gc,当然可以通过增大Eden区的大小来减少minor Gc的次数。Full Gc相对来说更影响程序的性能。因为其执行时程序会暂停。
jstat结果查看:
功能 | 命令 | 备注 |
---|---|---|
查看进程stack | jstack -l pid> output; vim output | |
查看JVM总GC统计 | jstat -gcutil PID 1000 | 1000表示每1000ms打印一次。 S0:幸存1区当前使用比例;S1:幸存2区当前使用比例;E:Eden区使用比例;O:老年代使用比例;M:元数据区使用比例;CCS:压缩使用比例;YGC:年轻代垃圾回收次数;FGC:老年代垃圾回收次数;FGCT:老年代垃圾回收消耗时间;GCT:垃圾回收消耗总时间 |
类加载统计 | jstat -class PID | Loaded:加载class的数量;Bytes:所占用空间大小;Unloaded:未加载数量;Bytes:未加载占用空间;Time:时间 |
编译统计 | jstat -compiler PID | Compiled:编译数量;Failed:失败数量; Invalid:不可用数量;Time:时间;FailedType:失败类型;FailedMethod:失败的方法 |
垃圾回收统计 | jstat -gc PID | S0C:第一个幸存区的大小;S1C:第二个幸存区的大小S0U:第一个幸存区的使用大小;S1U:第二个幸存区的使用大小;EC:Eden区的大小;EU:Eden区的使用大小;OC:老年代大小;OU:老年代使用大小;MC:方法区大小;MU:方法区使用大小;CCSC:压缩类空间大小;CCSU:压缩类空间使用大小; |
堆内存统计 | jstat - gccapacity PID | NGCMN:新生代最小容量;NGCMX:新生代最大容量;NGC:当前新生代容量;OGCMN:老年代最小容量;OGCMX:老年代最大容量;OGC:当前老年代大小;MCMN:最小元数据容量;MCMX:最大元数据容量;MC:当前元数据空间大小;CCSMN:最小压缩类空间大小;CCSMX:最大压缩类空间大小;CCSC:当前压缩类空间大小 |
新生代垃圾回收统计 | jstat -gcnew PID | TT:对象在新生代存活的次数;MTT:对象在新生代存活的最大次数;DSS:期望的幸存区大小 |
新生代内存统计 | jstat -gcnewcapacity PID | S0CMX:最大幸存1区大小;S1CMX:最大幸存2区大小;ECMX:最大Eden区大小 |
老年代垃圾回收统计 | jstat -gcold PID | |
老年代内存统计 | jstat -gcoldcapacity PID | |
元数据空间统计 | jstat -gcmetacapacity PID | |
JVM编译方法统计 | jstat -printcompilation PID | Compiled:最近编译方法的数量;Size:最近编译方法的字节码数量;Type:最近编译方法的编译类型;Method:方法名标识。 |
java 的每一个程序,均独占一个 java 虚拟机实例,且都是一个独立的进程。每个进程都有自己的 id,通过jps可以查看当前所有java进程的pid。通过 option 参数来参看进程的详细信息。
如果是查询容器里的pid,需要进入容器再执行该命令。
常见命令:
参数 | 含义 |
---|---|
无 | 默认显示 pid、应用程序 main class 类名 |
-q | 只显示 pid |
-m | 显示 pid、应用程序 main class 类名 和 传递给main方法的参数,在嵌入式jvm上可能是null |
-l | 显示 pid 和 应用程序 main class 的完整包名 或者 应用程序的 jar 路径 |
-v | 显示 pid 、应用程序 main class 类名 和 传递给 jvm 的参数 |
查看虚拟机配置参数信思,也可用于调整虚拟机的配置参数。
命令 | 说明 | 备注 |
---|---|---|
jinfo -sysprops pid | 查看该进程的全部配置信息 | |
jinfo -flag <具体参数> pid | 查看具体参数的值 | jinfo -flag MaxHeapSize 6 查看最大堆内存设置 |
jinfo -flag ±参数 pid | 布尔类型的进程参数修改 | 修改是实时立即生效的,但并不是每个参数都支持修改,只有被标记 manageable的flag可以被实时修改。 |
jinfo -flag 参数名=参数值 pid | 非布尔类型的修改 |
使用时需要引用maven包。
功能 | 命令 | 备注 |
---|---|---|
install打包 | mvn clean install -Dmaven.test.skip=true | clean 清除之前的包; -Dmaven.test.skip=true 跳过测试代码 |
package打包 | mvn clean package -Dmaven.test.skip=true | |
激活profile | mvn package –Prelease | -P显示激活release,注意没有空格 |
不激活默认激活的profile | mvn package –P !profileTest1 | |
查看当前处于激活状态的profile | mvn help:active-profiles | |
停止mvn | ||
打印依赖树 | mvn dependency:tree | 用于排查依赖冲突 |
功能 | 命令 | 备注 |
---|---|---|
启动 | nginx安装目录地址 -c nginx配置文件地址 | /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
停止 | 杀进程或强制停止 | 杀进程:ps -ef |
重新加载配置 | /usr/local/nginx/sbin/nginx -s reload -c | 0.7.53 版本之前用 kill -HUP cat /usr/local/nginx/logs/nginx.pid 方法来重新加载配置 |
交互式编程:Python
,ctrl+Z退出。
# python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("1")
1
>>>
脚本实编程:python test.py
运行时报错:-bash: ./test: Permission denied
,需要修改访问权限,调用命令chmod 777 test
在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限".
source FileName
source .bash_profile
. .bash_profile两者等效。
场景:source(或点)命令通常用于重新执行刚修改的初始化文档。
在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"。
sh FileName
bash FileName
nohup 命令忽略所有挂断(SIGHUP)信号,用于脚本的后台执行。
如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
nohup shell test.sh > nohup.out 2>&1 & 要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup python -u test.py > nohup.out 2>&1 & python的输出有缓冲,导致nohup.out并不能够马上看到输出,需要添加-u参数。
打开一个子shell来读取并执行FileName中命令。
./FileName
linux只能执行格式为unix格式的脚本。否则会有如下报错:
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
IDEA中,可以修改格式为LF即可,如图片所示:
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
#!/bin/bash
#使用 . 号来引用test1.sh 文件
. ./test1.sh
# 或者使用以下包含文件代码
# source ./test1.sh
vi打开脚本,在vi命令模式中使用 :set ff
命令,可以看到该文件的格式。
dos格式是有问题的,如下:
fileformat=dos
我们需要修改脚本格式为unix,命令:set ff=unix
再通过 :set ff
命令查看格式,为unix即可。
或者直接将脚本格式进行转换:dos2unix test.sh
$(cd `dirname $0`;pwd)
dirname $0,取得当前执行的脚本文件的父目录;cd dirname $0
,进入这个目录(切换当前工作目录);pwd,显示当前工作目录(cd执行后的)。
在使用的过程中需注意此事项:
命令中“`”不是英文的单引号,而是英文输入法下的“~”同一个按键下面的那个符号。
程序必须以下面的行开始(第一行):
#!/bin/sh
#!
用来告诉系统它后面的参数是用来执行该文件的程序。
退出程序:
exit 1;
以#开头。
a=”hello world”
echo “A is:”
#输出变量a的值,为了便于区分可以用花括号
echo $a
echo "A is ${a}"
通过cat进行字串拼接并追加到文件结尾:
echo "net.ipv4.ip_local_ports=18080,`cat /proc/ip_local_ports`" >> test.conf
提示用户输入,并将输入赋值给变量:
read var
由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
在shell脚本中可以使用三类命令:
虽然在shell脚本中可以使用任意的unix命令,但是还是有一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
./install.sh > output 2>&1 | tailf output
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反短斜线- 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
if ….; then
….
elif ….; then
….
else
….
fi
通常用 [ ]
来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f “somefile” ] :判断是否是一个文件
[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限
[ -n “$var” ] :判断$var变量是否有值
[ “$a” = “$b” ] :判断$a和$b是否相等
操作符 | 描述 | 举例 |
---|---|---|
-eq | = | [ $var -eq 0 ] # 当 $var 等于 0 时,返回真 |
-ne | 不等于 | [ $var -ne 0 ] # 当 $var 不等于 0 时,返回真 |
-gt | 大于 | |
-lt | 小于 | |
-ge | 大于或等于 | |
-le | 小于或等于 |
操作符 | 描述 | 举例 |
---|---|---|
-a (and) 或者 && | 逻辑与 | [ -f “/etc/shadow” ] && echo “This computer uses shadow passwors” |
-o (or) 或者` | ` |
操作符 | 意义 |
---|---|
[ -f $file_var ] | 变量 $file_var 是一个正常的文件名 (file),则返回真 |
[ -x $var ] | 变量 $var 包含的文件可执行 (execute),则返回真 |
[ -d $var ] | 变量 $var 包含的文件是目录 (directory),则返回真 |
[ -e $var ] | 变量 $var 包含的文件存在 (exist),则返回真 |
[ -c $var ] | 变量 $var 包含的文件是一个字符设备文件的路径 (character),则返回真 |
[ -b $var ] | 变量 $var 包含的文件是一个块设备文件的路径 (block),则返回真 |
[ -w $var ] | 变量 $var 包含的文件可写(write),则返回真 |
[ -r $var ] | 变量 $var 包含的文件可读 (read),则返回真 |
[ -L $var ] | 变量 $var 包含是一个符号链接 (link),则返回真 |
在进行字符串比较时,最好使用双中括号 [[ ]]. 因为单中括号可能会导致一些错误,因此最好避开它们。
检查两个字符串是否相同:
[[ $str1 = $str2 ]]
表达式可以用来匹配一个给定的字符串,而不是数字。
case … in
…) do something here ;;
esac
举例:smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:
#!/bin/sh
ftype=`file “$1″`
case “$ftype” in
“$1: Zip archive”*)
unzip “$1” ;;
“$1: gzip compressed”*)
gunzip “$1” ;;
“$1: bzip2 compressed”*)
bunzip2 “$1” ;;
*) echo “File $1 can not be uncompressed with smartzip”;;
esac
您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。
也就是说,当我们运行:
smartzip articles.zip
$1 就是字符串 articles.zip
select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
select var in … ; do
break
done
…. now $var can be used ….
举例:
#!/bin/sh
echo “What is your favourite OS?”
select var in “Linux” “Gnu Hurd” “Free BSD” “Other”; do
break
done
echo “You have selected $var”
下面是该脚本运行的结果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
while …; do
….
done
for var in ….; do
….
done
在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件, mail.jpg 和tux.jpg。
shell中不支持像普通c语言中的i++操作,默认都是字符串操作。
i=0
let i +=1 或者 let ‘i+=1’
let也可以用 (())替代:
for 循环中用法:((for i=0;i<2;i++))
linux 中也可以用expr : i=
expr $i + 1;
还可以用如下模式 :
i=$[$i+1];
i=$(( $i + 1 ))
GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。
下载gcc后可以编译运行许多程序,常见命令:
#编译
make
vi /etc/sysconfig/network-scripts/ifcfg-ens192
service network restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。