文本搜索
grep “&&” name 在文本中搜索带有&&的行,并打印出来。区分大小写
grep -i “&&” name 不区分大小写搜索文本。-i
grep -in “&&” name 打印行,把对应的行也一起打印出来方便我们寻找 -in
grep -c “&&” name 统计带有&&的行数,如果不想打印出来,只想统计行数 -c
grep -o “&&” name 打印&&关键字,如果只想看到关键字 -o
vi 编辑模式进入文本,按下”/“键,这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。
找到相关文字以后:
(1)按下小写n,向下查找
(2)按下大写N,向上查找
退出vi
先按ESC键 跳到命令模式,然后,按 i 就可以编辑输入:
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
q: 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
查看端口号被哪个进程ID占用
sudo netstat -anp |grep 端口号
ps -ef|grep 进程ID 即可查看进程名
查看所有端口号
sudo netstat -nultp
查看进程ID占用哪个端口号
sudo netstat -anp |grep 进程ID
删除开头的 rm -rf /home/myuser/a* 即是在/home/myuser/a开头的所有文件都会被删除*的含义表示任意字符任意长度。
使用df -h命令来查看磁盘空间使用情况
运行java jar包命令
#nohup java -jar -Xmx216m bts-console-0.0.00.01.jar > /dev/null 2>&1 &
查看磁盘空间
df -h
要仅报告指定目录的总大小,而不报告子目录的总大小,请使用以下-s选项: https://www.myfreax.com/du-command-in-linux/amp/
du -sh /var
-a : 列出所有的文件与目录容量,因为默认仅统计目录的容量而已
-h: 以人们较易读的容量格式呈现(G/M/K)显示,自动选择显示的单位大小
-s : 列出总量而已,而不列出每个个别的目录占用容量
-k : 以KB为单位进行显示
-m : 以MB为单位进行显示常用命令参考 查看当前目录大小[plain] du -sh ./
显示n级子目录的磁盘使用情况,比如1级:
du -h --max-depth=1 /var/lib
544K /var/lib/usbutils
4.0K /var/lib/acpi-support
205M /var/lib/apt
2.9G /var/lib
linux服务器查看最近重启时间
last reboot
修改防火墙配置,开放端口
sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9080 -j ACCEPT
sudo service iptables restart
1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
使用命令查使用内存最多进程排行
top
然后按下大写M
查看指定一个java进程的具体的对象数目和占用内存大小,从而定位代码。
jmap -histo:live [pid] | head -n 100
#instance 是对象的实例个数
#bytes 是总占用的字节数
class name 对应的就是 Class 文件里的 class 的标识
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示
查看进程下的线程情况
可以执行ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l 来查具体有多少线程 (不带 |wc -l则详细列出线程)
将PID为9534的堆栈信息打印到jstack.log中,命令:jstack -l 9534 > /home/zheren/jstack.log
查看日志,好多waiting的,具体需要开发查看代码,为何这么多线程等待
此时线程状态大致为以下几种:
java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己。
转十六进制
printf “%x\n” PID
#cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)
检查日志发现那些做了su切换的日志信息。
#grep su /var/log/secure | grep -v sudo
列出谁在使用某个端口
lsof -i :3306
修改/home 文件夹以及下面的所有文件的所属用户为 fan
-R 为递归
sudo chown -R fan /home
配置开机启动项
设置可执行权限
#chmod +x /etc/rc.d/rc.local
然后在/etc/rc.d/rc.local下追加脚本内容
su - 用户名 -c “/app/start.sh”
安装完centos7.6系统,发现系统时间比当前时间晚整整12小时,且时区为EDT(北美东部夏令时间),可以通过执行以下命令把时区改为CST(中国标准时间):
[root@localhost /]# date
Wed Jul 24 02:54:16 EDT 2019
[root@localhost /]# mv /etc/localtime /etc/localtime.bak
[root@localhost /]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@localhost /]# date
CentOS 8系统做了不少更新,例如 nftables代替iptables、dnf代替yum成为默认包管理工具
tcpdump -i eth0 -c 8 -s 0 -w /mnt/sdcard/dhcp.pcap ‘udp and port 67 and port 68’ &
-i 选择网卡
-c 数据包个数
-s 数据包长度,0代表完整数据包
-w 写入文件
DHCP使用67和68端口
&使进程后台运行
查看centos内核版本
cat /proc/version
centos 查看所有运行中的服务ip和端口信息
netstat -tunpl
常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
查看文件大小
du -sh a.txt
sudo tcpdump -i ens192 tcp port 10054 -w /app/log/aw/xm2/temp/b.txt
—sqlserver占用cpu过高
—使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS ‘开始时间’,
[status] AS ‘状态’,
[command] AS ‘命令’,
dest.[text] AS ‘sql语句’,
DB_NAME([database_id]) AS ‘数据库名’,
[blocking_session_id] AS ‘正在阻塞其他会话的会话ID’,
[wait_type] AS ‘等待资源类型’,
[wait_time] AS ‘等待时间’,
[wait_resource] AS ‘等待的资源’,
[reads] AS ‘物理读次数’,
[writes] AS ‘写次数’,
[logical_reads] AS ‘逻辑读次数’,
[row_count] AS ‘返回结果行数’
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.dm_exec_sql_text AS dest
WHERE [session_id]>50 AND DB_NAME(der.[database_id])=‘gposdb’
ORDER BY [cpu_time] DESC
linux学习日记20201022:
#脚本功能是循环获取start.sh的每一行,写入传递文件里面
#!/usr/bin/bash
#将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表,使其只能识别换行符!
IFS=$’\n’
for line in cat /app/start.sh
do
echo $line >> $1
done
linux中分隔符IFS
在linux中IFS是分隔符的意思,linux中变量分两种,全局变量env和局部变量set,set中包含了env的全部变量,我们查看IFS的值发现env | grep IFS为空,而set | grep IFS有值,说明IFS是局部变量,
gl@gl:~$ set | grep ^IFS
IFS=$’ \t\n’
从上面可以看出,IFS是已空格、制表符、换行符来进行分隔的。
/dev/tty表示当前终端
tty是Teletype的缩写,代表各种类型的终端设备.tty1-tty6 是 虚拟终端 的意思,分别代表6个虚拟终端。
而 tty0 就是 当前正在使用的虚拟终端的别名。
如果希望和哪个用户发消息就可以直接 将输出重定向到对应终端即可, 如echo “hello” > /dev/tty1
linux学习日记20201023
linux操作系统利用find 命令查找某个目录位置方式如下:
find /home/ubuntu -type d -name test
repo文件:
local.repo:这个源文件的名字,这个根据实际的使用自己定义
[local]:repositry的名字,必须是独一无二的,不能和其他源文件冲突
name=local:对于[local]的具体描述,这个可以根据具体使用描述
baseurl:这个是非常重要的一环,表明了repositry的地址,支持ftp协议,http协议和file协议;
enabled=0/1:只有两个值,为1时表示repositry可以获取,0表示关闭
gpgcheck=0/1:有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的
gpgkey=url:后面接的是gpgkey的地址,如果前面定义gpgcheck=1的话。
镜像加速
{
“registry-mirrors”: [
“https://registry.cn-hangzhou.aliyuncs.com”
]
}
运行容器,run命令。-i表示交互式操作,-t表示终端 --rm表示退出容器后删除容器,可避免浪费空间。指定bash作为交互接口程序shell
docker run -it --rm ubuntu:14.04 bash
linux学习日记20201025
ls -lh 查看目录下所有文件的属性
ln -s a.txt b.txt 意思是创建a.txt的链接文件b.txt,类似windows里面的快捷方式
echo -e 是把后面的内容里面如\n等当成正则表达式字符
echo -e ${PATH//