Linux常用命令整理


系统相关

# 详细参数请自行百度,这里只是常用参数

# 树形显示目录结构
# 颜色突出的形式 展示2层
tree -C -L 2

#查看进程树(可以直观的看到进程父子关系,可用来排查木马/病毒) -p:显示pid
pstree -p

###控制进程运行在那些核心上(多核心独立分配效果明显,核心较少时资源紧张意义不大)
#减少cpu上下文切换的开销,节约时间,提高效率.
taskset -cp 1,2 PID

# 系统资源监控
## 内存监控
free
## 综合监控
top
htop # 彩色界面功能更加丰富

#修改时间 2021年8月9日12时1分 (月日时分年)
sudo date 080912012021
#将当前时间和日期写入BIOS,避免重启后失效:
sudo hwclock -w
#更新系统时间
sudo ntpdate -u ntp.aliyun.com

###压力测试
##系统压力测试软件 可以测试Linux系统cpu/menory/IO/disk 的负载
stress
#参数解释
# -? 显示帮助信息
# -v 显示版本号
# -q 不显示运行信息
# -n 显示已完成的指令情况
# -t --timeout N 指定运行N秒后停止
#    --backoff N 等待N微秒后开始运行
# -c N 产生N个进程 每个进程都反复不停的计算平方根,测试cpu
# -i N 产生N个进程 每个进程都反复调用sync(),sync()用于将内存上的内容写入到硬盘上,测试磁盘
# -m --vm N 产生N个进程 每个进程不断调用内存分配malloc()和内存释放free()函数,测试内存
#    --vm-bytes B 指定malloc时内存的字节数(默认256MB)
#    --vm-hang N 指定在free栈的秒数
# -d --hadd N 产生N个执行write和unlink函数的进程
#    --hadd-bytes B 指定写的字节数
#    --hadd-nodean 不unlink
# 注:时间单位可以为 s(秒)/m(分)/h(小时)/d(天)/y(年),文件大小单位可以为KB/MB/GB
# 例1:产生两个cpu进程,两个io进程,20秒停止运行
# stress -c 2 -i 2 --verbose --timeout 20s

##接口并发压力测试工具
#webbench
webbench -c 并发数 -t 并发时间 网址
webbench -c 300 -t 10 http://localhost/home/Redis1/order

#Apache的ab
#Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。
#ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,
#因此是某些DDOS攻击之必备良药,老少皆宜。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。
#在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。
#远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)
# -n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url
ab -n 800 -c 800  http://192.168.0.10/
# 在60秒内发请求,一次100个请求。
ab -t 60 -c 100 http://192.168.0.10/
# 如果需要在url中带参数,这样做
# p.txt 是和ab.exe在一个目录
# p.txt 中可以写参数,如  p=wdp&fq=78
ab -t 60 -c 100 -T "text/plain" -p p.txt http://192.168.0.10/hello.html


#基于对内核空间修改进行进程信息隐藏的手法,这一类的手法就比较高深了
rootkit

# 统计当前位置下文件夹个数(不含子目录)
ls -l ./|grep "^d"|wc -l
# 统计当前位置下文件夹个数(含子目录)
ls -lR ./|grep "^d"|wc -l

# 统计当前位置下文件个数(不含子目录文件)
ls -l ./|grep "^-"|wc -l
# 统计当前位置下文件个数(含子目录文件)
ls -lR ./|grep "^-"|wc -l

# 配置系统编码(debian系列)
dpkg-reconfigre locales

#######lsof
lsof可以替代netstat和ps的全部工作。它可以带来那些工具所能带来的一切,而且要比那些工具多得多。
那么,让我们来看看它的一些基本能力吧:

关键选项
理解一些关于lsof如何工作的关键性东西是很重要的。最重要的是,当你给它传递选项时,默认行为是对结果进行“或”运算。
因此,如果你正是用-i来拉出一个端口列表,同时又用-p来拉出一个进程列表,那么默认情况下你会获得两者的结果。
下面的一些其它东西需要牢记:
默认 : 没有选项,lsof列出活跃进程的所有打开文件
组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
-a : 结果进行“与”运算(而不是“或”)
-l : 在输出显示用户ID而不是用户名
-h : 获得帮助
-t : 仅获取进程ID
-U : 获取UNIX套接口地址
-F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)

###获取网络信息    获取关于系统怎么和网络交互的信息
#使用-i显示所有连接
lsof  -i
#使用-i 4/6仅获取IPv4/IPv6流量
lsof  -i 6
#仅显示TCP连接(同理可获得UDP连接)
lsof  -iTCP
#使用-i:port来显示与指定端口相关的网络信息
lsof  -i :22
#使用@host来显示指定到指定主机的连接
lsof  -i@172.16.12.5
#使用@host:port显示基于主机与端口的连接
lsof  -i@172.16.12.5:22
#找出监听端口  找出正等候连接的端口。
lsof  -i -sTCP:LISTEN
#也可以grep “LISTEN”来完成该任务。
lsof  -i |  grep  -i LISTEN
#找出已建立的连接
lsof  -i -sTCP:ESTABLISHED
#也可以通过grep搜索“ESTABLISHED”来完成该任务
lsof  -i |  grep  -i ESTABLISHED

###用户信息   可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等。
#使用-u显示指定用户打开了什么
lsof  -u root
#使用-u user来显示除指定用户以外的其它所有用户所做的事情
lsof  -u ^daniel
#杀死指定用户所做的一切事情    可以消灭指定用户运行的所有东西
kill  -9  `lsof -t -u daniel`

###命令和进程     可以查看指定程序或进程由什么启动,这通常会很有用,而你可以使用lsof通过名称或进程ID过滤来完成这个任务
#使用-c查看指定的命令正在使用的文件和网络连接
lsof  -c syslog-ng
#使用-p查看指定进程ID已打开的内容
lsof  -p 10075
#-t选项只返回PID
lsof  -t -c Mail

###文件和目录     通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等。
#显示与指定目录交互的所有一切    查看目录被那个进程占用(可以得到占用进程的pid)
lsof  /var/log/messages/
#显示与指定文件交互的所有一切
lsof  /home/daniel/firewall_whitelist.txt

###高级用法   与tcpdump类似,当你开始组合查询时,它就显示了它强大的功能。
#显示root连接到1.1.1.1所做的一切
lsof  -u root -i @1.1.1.1
#同时使用-t和-c选项以给进程发送 HUP 信号
kill  -HUP `lsof -t -c sshd`
#lsof +L1显示所有打开的链接数小于1的文件     这通常(当不总是)表示某个攻击者正尝试通过删除文件入口来隐藏文件内容。
lsof  +L1
#显示某个端口范围的打开的连接
lsof  -i @fw.google.com:2150=2180

####### 虚拟内存
#查看当前虚拟内存: cat /proc/swaps
#创建swap文件:cd / && sudo dd if=/dev/zero of=swaps bs=512 count=8388616;其中swaps大小为:bs*count=4G
#通过mkswap命令把上一步创建的文件做成swap分区:mkswap /swaps
#查看内核参数:cat /proc/sys/vm/swappiness
#修改内核参数:sudo vim /etc/sysctl.conf 将 vm.swappiness修改为60(表示100% -60% = 40% 物理内存时启用虚拟内存)
#启用分区:sudo swapon /swaps
#修改以使重启启用分区: sudo vim /etc/fstab 添加/swaps swap swap defaults 0 0

# 查看当前目录占用大小
du -sh .
#扩展用法---> 包含子目录
# 还需在不同系统验证->当前目录下文件或目录占用详情(不含子目录和文件)
du -sh ./*
#按照文件夹大小排序
du -s ./* | sort -nr

# 显示磁盘分区上可以使用的磁盘空间
df -h

########### 磁盘挂载 ########
#查看所有磁盘设备
fdisk -l
#查看已经挂载的设备
mount
#挂载磁盘到指定目录
mkdir /media/windows #需要先创建好挂载到的目标目录
mount -t ntfs /dev/hda1 /media/windows/ #挂载磁盘到指定目录
#卸载挂载的磁盘
umount /media/windows
#查看在使用的进程(用于解决被占用无法卸载,可得到占用进程的pid,使用kill关掉即可)
fuser -mv /mnt/data
#参数说明:
#-k,--kill kill   processes accessing the named file
#-m,--mount    show all processes using the named filesystems or block device
#-v,--verbose    verbose output
#注意:
#可以使用 fuser -km /mnt 进行 kill 进程, 可能会结束当前bash进程
#可以使用 kill 命令杀掉查到对应的进程 。
#强制 kill 进程可能会导致数据丢失,请确保数据得到有效备份后,再进行相关操作。

###mount挂载失败出现Structure needs cleaning
#ext4文件系统,使用下面命令修复
fsck.ext4 /dev/sda1
#如果是xfs文件系统,使用下面命令修复
xfs_repair -L /dev/sda1


########mount命令详解
#功能:加载指定的文件系统。
#语法:mount [-afFhnrvVw] [-L] [-o] [-t] [设备名] [加载点]
#用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。
#可将经常使用的设备写入文件/etc/fastab,以使系统在每次启动时自动加载。
#mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。

###常用参数和选项:
#-a 加载文件/etc/fstab中设置的所有设备。
#-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
#-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
#-h 显示在线帮助信息。
#-L 加载文件系统标签为的设备。
#-n 不将加载信息记录在/etc/mtab文件中。

###-o 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
#async 以非同步的方式执行文件系统的输入输出动作。
#atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
#auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
#defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
#dev 可读文件系统上的字符或块设备,取消选项为nodev。
#exec 可执行二进制文件,取消选项为noexec。
#noatime 每次存取时不更新inode的存取时间。
#noauto 无法使用-a参数来加载。
#nodev 不读文件系统上的字符或块设备。
#noexec 无法执行二进制文件。
#nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
#nouser 使一位用户无法执行加载操作,默认设置。
#remount 重新加载设备。通常用于改变设备的设置状态。
#ro 以只读模式加载。
#rw 以可读写模式加载。
#suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
#sync 以同步方式执行文件系统的输入输出动作。
#user 可以让一般用户加载设备。

###-r 以只读方式加载设备。

###-t 指定设备的文件系统类型。常用的选项说明有:
#minix Linux最早使用的文件系统。
#ext2 Linux目前的常用文件系统。
#msdos MS-DOS 的 FAT。
#vfat Win85/98 的 VFAT。
#nfs 网络文件系统。
#iso9660 CD-ROM光盘的标准文件系统。
#ntfs Windows NT的文件系统。
#hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
#auto 自动检测文件系统。

#-v 执行时显示详细的信息。
#-V 显示版本信息。
#-w 以可读写模式加载设备,默认设置。

###简单用法:
#fat32的分区
mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom (mount -t
vfat -o iocharset=cp936 /dev/hda7 /mnt/cdrom)
#ntfs的分区
mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom
#iso文件
mount -o loop /abc.iso /mnt/cdrom
#软盘
mount /dev/fd0 /mnt/floppy
#USB闪存
mount /dev/sda1 /mnt/cdrom 说明: /mnt/cdrom 目录必须存在
#所有/etc/fstab内容
mount -a
#可以指定文件格式”-t 格式”, 格式可以为vfat, ext2, ext3等.
#镜像文件:
mount fileName mountPoint -o
#loop,fileName是镜像文件名(*.iso,*.img),其它的不用说了,跟上面一样。
#用例:如我有一个a.iso光盘镜像文件,
mount a.iso a -o loop #这样进入目录a你就能浏览a.iso的内容了,*.img文件的用法一样。
#显示中文方面,如果是fedora core 1 的话,用utf8更好
mount -o iocharset=uft8 /dev/hda1 /mnt/c
mount -o iocharset=uft8 /dev/sda1 /mnt/usb
mount -t smbfs //ip_addr/share/dir /mnt/smb/share -o
iocharset=uft8,username=name, password=passwd

#开机就mount上windows下的分区
#自动将windows的d盘挂到/mnt/d上,用gedit打开/etc/fstab
vi /etc/fstab
#加入以下一行
/dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0
#注意,先得手工建立一个/mnt/d目录
mkdir /mnt/d
#这样每次开机后就可以自动挂在分区
/dev/sda6 /mnt/E ntfs iocharset=utf8,umask=0 0 0
/dev/sda7 /mnt/F ntfs iocharset=utf8,umask=0 0 0
/dev/sda8 /mnt/G ntfs iocharset=utf8,umask=0 0 0




# 开启支持默认挂载ntfs
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum update;yum install ntfs*


# 启用rdp远程桌面连接
yum groupinstall "X Window System" "GNOME Desktop" -y
systemctl set-default graphical.target
yum install xrdp -y
systemctl start xrdp.service

# 筛选命令 grep、awk
# grep 'my' 筛选出结果中包含'my'的内容
ll | grep 'my'

# awk 进一步筛选 更多用法baidu.com
# awk '{print $2}' 筛选出第2列的内容
ps -ef  | grep 'app' | awk '{print $2}'


###### 防火墙 ########
### 系统级 iptables
#检查设定是否生效(规则优先级是由上到下,上面的会生效后下面的就不生效了,也可理解为上面的生效后覆盖了下面生效的.)
iptables -L -n | grep 端口号
#放行指定8000端口,无需重启服务,直接生效
#-A(Append 添加在原有规则后面)
/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
#放行区域端口 700-800
/sbin/iptables -I INPUT -p tcp --dport 700:800 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 700:800 -j ACCEPT
#保存规则(重启后仍然会丢失数据)
iptables-save
#持久化规则(需要自己安装iptables-persistent)
1)安装iptables-persistent
sudo apt-get install iptables-persistent
2)持久化规则
sudo netfilter-persistent save
sudo netfilter-persistent reload
#重新加载服务
systemctl reload iptables.service

### CentOS中用的多的 firewall-cmd
#查看状态 //running 表示运行
firewall-cmd --state
#查看所有配置
firewall-cmd --list-all
#启用某个服务
firewall-cmd --zone=public --add-service=https #临时
firewall-cmd --permanent --zone=public --add-service=https #永久
#开启某个端口
firewall-cmd --add-port=3128/tcp #自行加入要开放的 Port
firewall-cmd --zone=public --add-port=8080-8081/tcp #临时
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp #永久
#删除某个端口
firewall-cmd --permanent --zone=public --remove-port=81/tcp
#使用命令加载设置 使配置生效
firewall-cmd --reload
#查看开启的端口和服务
firewall-cmd --permanent --zone=public --list-services #服务空格隔开 例如 dhcpv6-client https ss
firewall-cmd --permanent --zone=public --list-ports #端口空格隔开 例如 8080-8081/tcp 8388/tcp 80/tcp
#设置某个ip 访问某个服务,如:ip 192.168.0.4/24 访问 http
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
#删除上面设置的规则
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"

### Ubuntu中用的多的 ufw
#可检查防火墙的状态:
ufw status
#防火墙版本:
ufw version
#开启/关闭防火墙:
ufw enable|disable
#开机启动  并设置关闭所有外部对本机的访问,但本机访问外部正常。
ufw default deny
#要重置UFW,只需输入以下命令:
ufw reset
#打开或关闭某个端口,例如:
sudo ufw allow smtp #允许所有的外部IP访问本机的25/tcp (smtp)端口
sudo ufw allow 22/tcp #允许所有的外部IP访问本机的22/tcp (ssh)端口
sudo ufw allow 53 #允许外部访问53端口(tcp/udp)
sudo ufw allow from 192.168.1.100 #允许此IP访问所有的本机端口
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
sudo ufw deny smtp #禁止外部访问smtp服务
sudo ufw delete allow smtp #删除上面建立的某条规则
##UFW 使用范例:
#允许 53 端口
ufw allow 53
#禁用 53 端口
ufw delete allow 53
#允许 80 端口
ufw allow 80/tcp
#禁用 80 端口
ufw delete allow 80/tcp
#允许 smtp 端口
ufw allow smtp
#删除 smtp 端口的许可
ufw delete allow smtp
#允许某特定 IP
ufw allow from 192.168.254.254
#删除上面的规则
ufw delete allow from 192.168.254.254

压缩/解压缩

# 压缩
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar -cZf jpg.tar.Z *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
###zip压缩
# -q 不显示指令执行过程。
# -r 递归处理,将指定目录下的所有文件和子目录一并处理。
# 将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r html.zip /home/html
# 如果在我们在 /home/html 目录下,可以执行以下命令:
zip -q -r html.zip *
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

# 解压
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2   //解压 tar.bz2
tar -xZvf file.tar.Z   //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
# -d 从压缩文件内删除指定的文件。
# -v 显示指令执行过程或显示版本信息。
# 从压缩文件 cp.zip 中删除文件 a.c
zip -dv cp.zip a.c

总结
# 1、*.tar 用 tar -xvf 解压
# 2、*.gz 用 gzip -d或者gunzip 解压
# 3、*.tar.gz和*.tgz 用 tar -xzf 解压
# 4、*.bz2 用 bzip2 -d或者用bunzip2 解压
# 5、*.tar.bz2用tar -xjf 解压
# 6、*.Z 用 uncompress 解压
# 7、*.tar.Z 用tar -xZf 解压
# 8、*.rar 用 unrar e解压
# 9、*.zip 用 unzip 解压

# 命令参数说明
tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-t是解开的意思

Java 诊断工具

#查看java进程
jps



##Arthas 阿尔萨斯
#Arthas能解决什么问题?
#让我们来看下 Arthas 的官方解释。
#当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
#1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
#2、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
#3、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
#4、线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
#5、是否有一个全局视角来查看系统的运行状况?
#6、有什么办法可以监控到JVM的实时运行状态?

### 快速安装
#官方推荐使用 arthas-boot 进行安装,非常方便,以下是基于 Linux 系统环境进行演示,一般解决线上问题也是基于 Linux 环境。

## 第一步:下载
#在任何目录下载 arthas-boot 这个包。
wget https://alibaba.github.io/arthas/arthas-boot.jar

## 第一步:下载
#在任何目录下载 arthas-boot 这个包。
wget https://alibaba.github.io/arthas/arthas-boot.jar

## 第三步:选择进程
#运行 arthas-boot 后,控制台会显示所有 Java 进程,选择一个你需要诊断的进程。
#输入序号1,回车,Arthas会附到目标进程上,并输出日志:
#至此,安装、启动完成。
#更多其他安装方式见:https://alibaba.github.io/arthas/install-detail.html

### 实战使用
#启动完成后,当前光标会进入 arthas 的控制台,接受各种操作命令。

## 1.dashboard
#显示当前系统的实时数据面板,按 ctrl+c 即可退出。
dashboard

## 2.thread
#查看当前 JVM 的线程堆栈信息。
#thread id, 显示指定线程的运行堆栈:
thread 20
#显示当前最忙的前N个线程并打印堆栈:
thread -n 3

## 3.sc
#查看 JVM 已加载的类详细信息。
sc -d *Test

## 4.sm
#查看已加载类的方法信息。
sm -d cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication main

## 5.jad
#反编译指定已加载类的源代码。
jad cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication

## 6.trace
#显示方法内部调用路径,非实时返回的命令并输出方法路径上的总耗时,以及的每个节点上的详细耗时。
# -j:表示跳过 JDK 中的方法路径。
trace -j cn.javastack.springbootbestpractice.web.JsonTest getUserInfo

## 7.monitor
#对某个方法的调用进行定时监控。
# -c 5:表示每5秒统计一次,统计周期,默认值为120秒。
# 监控维度说明:
#     监控项	                说明
#     timestamp	           时间戳
#     class	               类名
#     method	             方法名
#     total	               调用次数
#     success	             成功次数
#     fail	               失败次数
#     rt	                 平均响应时间
#     fail-rate	           失败率
monitor cn.javastack.springbootbestpractice.web.JsonTest getUserInfo -c 5

## 8.watch
#观测方法执行数据,能方便的观察到指定方法的调用情况,如:返回值、抛出异常、入参等。
#监控的是一个方法的入参情况,在方法执行前监控:-b,遍历深度:-x 2。
watch cn.javastack.springbootbestpractice.web.JsonTest getUserInfo ‘{params, returnObj}’ -x 2 -b

## 9.quit/exit
#退出当前 Arthas。
#这个命令仅退出当前连接的客户端,附到目标进程上的 Arthas 会继续运行,端口不会关闭,下次连接时可以直接连接使用。

## 10.shutdown
#关闭 Arthas 服务端,退出所有 Arthas 客户端。
#以上演示了 10 个命令的基本使用,各种命令的使用详情可以在命令带 --help 进行查阅。

### 总结下来,使用 Arthas 可以很方便的诊断一个 Java 应用程序,
#如:系统数据面板、JVM实时运行状态、类加载情况、监控方法执行情况、显示方法执行路径等。
#Arthas这些实用的功能确实可以帮助我们解决一些常见的线上问题,也能独立于应用程序代码,
#但仅局限于在一个 JVM 进程内,如果是分布式系统,Arthas就有点难了。
#更多其他命令请参考:https://alibaba.github.io/arthas/commands.html

查看运行进程所在目录

在 linux 下查看进程用

ps -ef | grep XXX

通过 ps 及 top 命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。这时,我们需要通过以下的方法来查看进程的详细信息:
Linux 在启动一个进程时,系统会在/proc 下创建一个以 PID 命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为 exe 的文件即记录了绝对路径,通过 ll 或 ls –l 命令即可查看。

ll / proc / PID;

cwd 符号链接的是进程运行目录;
exe 符号连接就是执行程序的绝对路径;
cmdline 就是程序运行时输入的命令行命令;
environ 记录了进程运行时的环境变量;
fd 目录下是进程打开或使用的文件的符号连接

Linux 查看文件指定行内容

1、tail date.log         输出文件末尾的内容,默认 10 行

tail -20 date.log     输出最后 20 行的内容

tail -n -20 date.log   输出倒数第 20 行到文件末尾的内容

tail -n +20 date.log   输出第 20 行到文件末尾的内容

tail -f date.log       实时监控文件内容增加,默认 10 行。

2、head date.log       输出文件开头的内容,默认 10 行

head -15 date.log   输出开头 15 行的内容

head -n +15 date.log 输出开头到第 15 行的内容

head -n -15 date.log 输出开头到倒数第 15 行的内容

3、sed -n “开始行,结束行p“ 文件名

sed -n ‘70,75p’ date.log       输出第 70 行到第 75 行的内容

sed -n ‘6p;260,400p; ‘ 文件名   输出第 6 行 和 260 到 400 行

sed -n 5p 文件名             输出第 5 行

tail 和 head 加上 -n 参数后 都代表输出到指定行数,tail 是指定行数到结尾,head 是开头到指定行数

+数字 代表整数第几行, -数字代表倒数第几行

22 款终端生产力工具,效率飞起!

原文地址:https://mp.weixin.qq.com/s/ZzR-BzEwDLAkmAUxwj1szg

fish shell ## 款易于上手的终端shell starship--款强大的shell提示工具
z ## 一个快速切换文件路径的命令工具
fzf ## 一款好用的模糊查找工具
fd ## 升级版的find 查找工具
ripgrep ## like grep but better 升级版的grep工具
htop and glances ## 一款给力的系统监控工具
virtualenv and virtualfish ## Python虚拟环境管理工具
pyenv,nodenv,and rbenv ## 一款对Python,Nodel以及Ruby进行不同版本管理的工具
pipx  ## 一款Python依赖管理以及环境管理工具
ctop and lazydocker ## 一款给力的Docker监控工具
homebrew ## 一款MacoS下的软件包管理工具
ascinema ## 一款终端会话记录工具,支持从动画中进行拷贝
colordiff and diff-so-fancy  ## 升级版的diff工具
tree ## 一款用于展示目录树状结构的命令工具
bat ## 一款升级版的cat工具
httpie ## 一款升级版的curl工具
tldr ## Too long,Don't read,简化版的man pages查看工具。
exa ## 一款升级版的ls命令工具
litecli and pgcli ## 升级版的sqlite3和psql数据库连接工具
mas ## App Store的命令行工具
ncdu ## 一款磁盘使用分析的命令行工具

image.png


文章作者: 慕书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 慕书 !
评论
  目录