全部文章

超实用指令和技巧

查看大文件

问题描述:

在生产上,或者测试环境,突然有一天发现个别程序运行异常,甚至部分程序直接挂掉,此时我们使用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文件,并展示出来:

image

上述命令详解:

du 指令

作用:查看目录的真实大小(实际大小)

语法:#du -sh 目录路径

选项含义:

        -s:summaries,只显示汇总的大小

        -h:表示以高可读性的形式进行显示

案例:统计“/root/yunweihenniux”目录的实际大小

image

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

image

如果不指定目录,默认统计当前执行命令的路径的大小

如果不带“-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”

image

~:匹配正则表达式

"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}'

拓展:如何书写一个脚本,可以让用户输入要查询大文件的目标路径,以及要查询大文件的最小大小,然后进行最终查询结果输出?

下面的脚本仅仅实现逻辑编写,执行存在问题,有待后续研究:

echo  "注意,该脚本,只支持以G为单位的文件大小的查询,即只会查询大于1G的文件"

read -p "请输入你要查询大文件的目录:" targetPath

read -p "请输入你要查询的大文件最小大小: " targetSize

defaultPath=/

defaultSize=1




if test -n "$targetPath"

then

defaultPath=$targetPath

fi

if test -n "$targetSize"

then

defaultSize=$targetSize

fi

du -h $defaultPath|awk '{if($1 ~ "G") print $0}'|awk -FG '{if($1 > "'$defaultSize'") print $0}'

源文件:

<<getBigFile.sh>>

执行测试:

image

 

 

 

 

统计某个目录下文档总数

答:#ls / | wc -l

显示行号(临时)

输入:“:set nu

如果想取消显示,则输入:“:set nonu”

编辑文件之后保存

退出方式

回顾:之前vim中退出编辑的文件可以使用“:q”或者“:wq”。

除了上面的这个语法之外,vim还支持另外一个保存退出方法“:x”。

说明:

        ①“:x”在文件没有修改的情况下,表示直接退出,在文件修改的情况下表示保存并退出;

        ②如果文件没有被修改,但是使用wq进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用x进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定。

因此建议以后使用“:x”来进行对文件的保存退出。

但是:不要使用:X,不要使用:X,不要使用:X,:X表示对文件进行加密操作。

加密文件:

命令模式输入“:X”

image

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

image

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

image

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

image

取消加密方法:只需要再次使用“:X”,然后设置密码为空即可

别名机制

作用:相当于创建一些属于自己的自定义命令(可以全局执行)

例如:在windows下有cls命令,在Linux下可能因为没有这个命令而不习惯清屏。现在可以通过别名机制来解决这个问题,可以自己创造出cls命令

别名机制依靠一个别名映射文件:~/.bashrc如果没有该文件,可以自己创建,然后添加:

“alias 自定义命令 = ‘原linux命令’”

#vim  ~/.bashrc

image

注意:如果想新创造的命令生效,必须要重新登录当前用户。

作业:

使用别名机制,创建出一个快捷命令“kj”,要求实现按下“kj”回车之后能够实现:

        统计出Apache的服务进程数量。

案例:

例如我们在下面的路劲创建了一个脚本:

image

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

[root@localhost shell]# cd ~

[root@localhost ~]# vim .bashrc

image

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

image

端口占用情况

方法1:

1.查看某个端口是否被占用

netstat  -anp  |grep   端口号

如下,我以8761为例:

image

上面看到"listen"说明该端口被占用,占用者是进程号是13270的java程序;

2.查看该端口被哪个具体程序占用

ps -ef|grep  13270(上面查询的进程号)

image

3.查看所有被使用的端口:

netstat -nultp("nultp"字母顺序可以随便写)

image

方法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, 那么密码需要自己输入自己的密码即可。

  1. 从本地上传文件到远程计算机或服务器的命令如下:
    先进入本地目录下,然后运行如下命令:
    scp my_local_file.zip root@192.168.1.104:/usr/local/nginx/html/webs
  2. 从远程主机复制文件到本地主机(下载)的命令如下:(假如远程文件是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

image

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

image

3)jps –v :输出jvm参数

image

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

image

5)jps -mlv10.134.68.173

image

       注意:如果需要查看其他机器上的jvm进程,需要在待查看机器上启动jstatd。

 

修改jar包里的配置文件

如服务器的地址或是端口变了,需要修改项目里的配置文件,于是不得不将jar包拿下来修改再上传,或是重新打包上传,可谓是不胜烦琐,今天教大家一个小技巧,既如何直接在Linux里面修改配置文件!

准备步骤:

1.安装unzip 

命令:yum install -y unzip zip

2.直接vim jar包名

3.使用:"/+要找的配置文件名"然后回车,定位修改的文件

定位到对应文件之后,该文件会高亮显示,然后回车即可进入编辑模式

在编辑后一定别忘了wq保存成果啊!至此就修改完了,

 

posted @ 2025-10-25 16:38  指尖下的世界  阅读(2)  评论(0)    收藏  举报