超实用指令和技巧
查看大文件
问题描述:
在生产上,或者测试环境,突然有一天发现个别程序运行异常,甚至部分程序直接挂掉,此时我们使用df命令查下磁盘空间,很可能磁盘空间几乎100%了!!!
那么我们如何快速查询出是那个文件夹或者文件过大导致的呢?
解决方案:
在根路径下面执行如下指令:
du -h|awk '{if($1~"G") print $0}'
du -h|awk '{if($1~/G/) print $0}'
[root@localhost /]# du -h|awk '{if($1~"G") print $0}'
效果:
上述命令可以查询出所有大于1G文件,并展示出来:

上述命令详解:
du 指令
作用:查看目录的真实大小(实际大小)
语法:#du -sh 目录路径
选项含义:
-s:summaries,只显示汇总的大小
-h:表示以高可读性的形式进行显示
案例:统计“/root/yunweihenniux”目录的实际大小

案例:统计“/etc”目录实际大小

如果不指定目录,默认统计当前执行命令的路径的大小
如果不带“-s”,则会遍历统计该文件夹下所有文件的大小
AWK指令
du -h|awk '{if($1~"G") print $0}'
首先对awk有一个直观概念:
给你举个例子,echo "aa bb cc" | awk -F '{print $1}' 结果就是aa,意思是把字符串按空格分割,取第一个,自己做个测试就明白了!
awk是用来提取列的主要工具;
{print $1}就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来
上述命令拆解:
$1:由于awk默认以空格进行分割,所以每一行的第一个即$1就是下面的“***G”

~:匹配正则表达式
"G":要匹配的表达式内容,即要包含G
$0: 完整的输入记录
总结:上述指令大概意思基本可以这样理解:
du -h|awk '{if($1~"G") print $0}'
du -h|awk '{if($1~/G/) print $0}'
du -h:遍历根目录下所有的文件真实大小,并以可读性较高的形式进行展示(以M和G为单位)
而我们需要的肯定是以G为单位的大文件,所以我们使用awk命令过滤:
if($1~"G") 匹配每一行里面带有"G"的,然后 print $0即可输入该行的完整内容
最终我们就得到了所有大于1G的文件
拓展:如何查询大于3G的文件?
du -h|awk '{if($1~"G") print $0}'|awk -FG '{if($1>3) print $0}'
拓展:如何书写一个脚本,可以让用户输入要查询大文件的目标路径,以及要查询大文件的最小大小,然后进行最终查询结果输出?
下面的脚本仅仅实现逻辑编写,执行存在问题,有待后续研究:
|
源文件:
<<getBigFile.sh>>
执行测试:

统计某个目录下文档总数
答:#ls / | wc -l
显示行号(临时)
输入:“:set nu”
如果想取消显示,则输入:“:set nonu”
编辑文件之后保存
退出方式
回顾:之前vim中退出编辑的文件可以使用“:q”或者“:wq”。
除了上面的这个语法之外,vim还支持另外一个保存退出方法“:x”。
说明:
①“:x”在文件没有修改的情况下,表示直接退出,在文件修改的情况下表示保存并退出;
②如果文件没有被修改,但是使用wq进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用x进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定。
因此建议以后使用“:x”来进行对文件的保存退出。
但是:不要使用:X,不要使用:X,不要使用:X,:X表示对文件进行加密操作。
加密文件:
命令模式输入“:X”

回车之后输入两次加密密码:

最后一定使用“:wq”保存一下,加密才能生效

下次使用vim打开该文档需要输入密码:

取消加密方法:只需要再次使用“:X”,然后设置密码为空即可
别名机制
作用:相当于创建一些属于自己的自定义命令(可以全局执行)
例如:在windows下有cls命令,在Linux下可能因为没有这个命令而不习惯清屏。现在可以通过别名机制来解决这个问题,可以自己创造出cls命令
别名机制依靠一个别名映射文件:~/.bashrc如果没有该文件,可以自己创建,然后添加:
“alias 自定义命令 = ‘原linux命令’”
#vim ~/.bashrc

注意:如果想新创造的命令生效,必须要重新登录当前用户。
作业:
使用别名机制,创建出一个快捷命令“kj”,要求实现按下“kj”回车之后能够实现:
统计出Apache的服务进程数量。
案例:
例如我们在下面的路劲创建了一个脚本:

但是该脚本只能在本路径下执行,或者必须输入全路径执行,很不方便,我们希望它像linux自带指令一样,全局都可以使用,那么我们就可以参照上面的说明,创建一个别名,指向该命令:
[root@localhost shell]# cd ~
[root@localhost ~]# vim .bashrc

验证:随便找个目录执行user命令:

端口占用情况
方法1:
1.查看某个端口是否被占用
netstat -anp |grep 端口号
如下,我以8761为例:

上面看到"listen"说明该端口被占用,占用者是进程号是13270的java程序;
2.查看该端口被哪个具体程序占用
ps -ef|grep 13270(上面查询的进程号)

3.查看所有被使用的端口:
netstat -nultp("nultp"字母顺序可以随便写)

方法2:
实例16:列出谁在使用某个端口
命令:
lsof -i :3306
|
[root@localhost eureka]# netstat -nultp|grep 9001 tcp6 0 0 :::9001 :::* LISTEN 1645/java [root@localhost eureka]# lsof -i :9001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 1645 root 23u IPv6 24030 0t0 TCP *:etlservicemgr (LISTEN) |
确认某个程序启动之后占用的端口:
以java程序为例:
语法说明:lsof [file] 查看谁正在使用某个文件,也就是说查找某个文件相关的进程
|
[root@localhost eureka]# lsof eureka_server-1.0-SNAPSHOT.jar #eureka启动肯定要占用程序jar包 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 1645 root mem REG 253,0 45893001 38124868 eureka_server-1.0-SNAPSHOT.jar #锁定了使用该jar包的进程号 java 1645 root 4r REG 253,0 45893001 38124868 eureka_server-1.0-SNAPSHOT.jar java 1645 root 5r REG 253,0 45893001 38124868 eureka_server-1.0-SNAPSHOT.jar [root@localhost eureka]# netstat -antpl|grep 1645 tcp6 0 0 :::9001 :::* LISTEN 1645/java #通过进程号就可以锁定端口 |
scp传输文件的命令
已剪辑自: https://www.cnblogs.com/tugenhua0707/p/8278772.html
一:scp常规的使用方式:
scp可以进行简单的远程复制文件的功能。它是一个在各个主机之间进行复制或文件传输的一个命令工具。它使用一种同ssh一样的安全机制来进行文件的传输。
注意:下面定义的远程计算机的主机域名是 192.168.1.104, 上传文件的路径是 /usr/local/nginx/html/webs 下面的文件;且 服务器的账号是 root, 那么密码需要自己输入自己的密码即可。
- 从本地上传文件到远程计算机或服务器的命令如下:
先进入本地目录下,然后运行如下命令:
scp my_local_file.zip root@192.168.1.104:/usr/local/nginx/html/webs - 从远程主机复制文件到本地主机(下载)的命令如下:(假如远程文件是about.zip)
先进入本地目录下,然后运行如下命令:
scp root@192.168.1.104:/usr/local/nginx/html/webs/about.zip .
二: 多文件传输
2-1 从本地文件复制多个文件到远程主机(多个文件使用空格分隔开)
先进入本地目录下,然后运行如下命令:
scp index.css json.js root@192.168.1.104:/usr/local/nginx/html/webs
2-2 从远程主机复制多个文件到当前目录
先进入本地目录下,然后运行如下命令:
scp root@192.168.1.104:/usr/local/nginx/html/webs/\{index.css,json.js\} .
三:复制整个文件夹(使用r switch 并且指定目录)
3-1 从本地文件复制整个文件夹到远程主机上(文件夹假如是diff)
先进入本地目录下,然后运行如下命令:
scp -v -r diff root@192.168.1.104:/usr/local/nginx/html/webs
3-2 从远程主机复制整个文件夹到本地目录下(文件夹假如是diff)
先进入本地目录下,然后运行如下命令:
scp -r root@192.168.1.104:/usr/local/nginx/html/webs/diff .
四:在两个远程主机之间复制文件
scp也可以把文件从一个远程主机复制到另一个远程主机上。
如下命令:
scp root@192.168.1.104:/usr/local/nginx/html/webs/xx.txt root@192.168.1.105:/usr/local/nginx/html/webs/
五:使用压缩来加快传输
在文件传输的过程中,我们可以使用压缩文件来加快文件传输,我们可以使用 C选项来启用压缩功能,该文件在传输过程中被压缩,
在目的主机上被解压缩。
如下命令:
scp -vrC diff root@192.168.1.104:/usr/local/nginx/html/webs
查看配置文件技巧
在redis解压目录下找到redis.conf,使用以下命令查看,否则会有很多注释:
cat redis.conf |grep -v "#" |grep -v "^$"
注意:redis.conf不要修改,我们可以使用上述命令重新生成一个复制文件:
[root@localhost redis-5.0.0]# cat redis.conf |grep -v "#" |grep -v "^$" > redis-6379.conf
java
JPS
已剪辑自: https://blog.csdn.net/qq_38423105/article/details/81233703
原文:https://blog.csdn.net/wisgood/article/details/38942449
jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。
命令格式:jps [options ] [ hostid ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
[hostid]:
[protocol:][[//]hostname][:port][/servername]
命令的输出格式 :
lvmid [ [ classname| JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]
1)jps

2)jps –l:输出主类或者jar的完全路径名

3)jps –v :输出jvm参数

4)jps –q :仅仅显示java进程号

5)jps -mlv10.134.68.173

注意:如果需要查看其他机器上的jvm进程,需要在待查看机器上启动jstatd。
修改jar包里的配置文件
如服务器的地址或是端口变了,需要修改项目里的配置文件,于是不得不将jar包拿下来修改再上传,或是重新打包上传,可谓是不胜烦琐,今天教大家一个小技巧,既如何直接在Linux里面修改配置文件!
准备步骤:
1.安装unzip
命令:yum install -y unzip zip
2.直接vim jar包名
3.使用:"/+要找的配置文件名"然后回车,定位修改的文件
定位到对应文件之后,该文件会高亮显示,然后回车即可进入编辑模式
在编辑后一定别忘了wq保存成果啊!至此就修改完了,

浙公网安备 33010602011771号