系统相关的限制参数
cat /proc/sys/fs/file-max -> 1606896 系统的总句柄数
Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不用修改,除非打开的文件句柄数超过此值。
一定要大于等于/etc/security/limits.conf所设置的soft nofile和soft nofile值
* soft nofile 32768
* hard nofile 65536
修改方式: 1. echo 1048576 > /proc/sys/fs/file-max 系统重启后消失
2. 修改/etc/sysctl.conf fs.file-max = 1048576 执行sysctl -p ,重启不会消失
超过该阈值的时候 通过dmesg 显示[warn] socket: Too many open files in system
最简单的samba配置:
启动和停止samba服务 systemctl start/stop/restart/status/enable smb
无密码访问 map to guest = Bad User
默认格式
[shiyuefeng]
comment = shiyeufeng
path = /home/shiyuefeng
public = yes
writeable = yes
create mode = 0644
force create mode = 0644
directory mode = 0755
force directory mode = 0755
tcp的连接数的问题
tcp_mem(3个INTEGER变量):low, pressure, high
low: 当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
high: 允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP: too many of orphaned sockets”。
cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4161536
默认值为87380 bit ≈ 86K,最小为4096bit=4K,最大值为4064K。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
cat /proc/sys/net/ipv4/tcp_mem
932448 1243264 1864896
net.ipv4.tcp_mem 则是配置tcp的内存大小,其单位是页,而不是字节 ,1页等于4096字节!
根据当前tcp_mem最大内存页面数是1864896,当内存为(1864896*4)/1024K = 7284.75M时,系统将无法为新的socket连接分配内存,即TCP连接将被拒绝。
为了节省内存,设置tcp读、写缓冲区都为4K大小,tcp_mem三个值分别为3G 8G 16G,tcp_rmem和tcp_wmem最大值也是16G。
echo "net.ipv4.tcp_mem = 786432 2097152 3145728" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 4096 16777216">> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 4096 16777216">> /etc/sysctl.conf
cat /proc/sys/net/ipv4/ip_local_port_range 端口限制
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
cat /proc/net/sockstat 查看当前的socket 连接数状态
cat /proc/net/sockstat
sockets: used 390 已使用的所有协议套接字总量
TCP: inuse 9 orphan 0 tw 19 alloc 13 mem 3
UDP: inuse 4 mem 1
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
TCP: inuse: 正在使用(正在侦听)的TCP套接字数量
TCP: orphan: 无主(不属于任何进程)的TCP连接数(无用、待销毁的TCP socket数)
TCP: tw: 等待关闭的TCP连接数。其值等于netstat –ant | grep TIME_WAIT | wc –l
TCP:alloc: 已分配(已建立、已申请到sk_buff)的TCP套接字数量。其值等于netstat –ant | grep ^tcp | wc –l
TCP:mem: 代表消耗的内存,单位是PAGE SIZE,一般为4KB ,内核处缓存用户没有及时收取到用户空间的tcp数据所消耗的内存大小。
UDP:inuse: 正在使用的UDP套接字数量
RAW:
FRAG:使用的IP段数量
sysctl -a 显示在/proc/sys目录中的内核参数
sysctl -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
??? 哪个才是当前系统的打开文件数量
[root@HikvisionOS ~]# lsof |wc -l
4219
[root@HikvisionOS ~]# sysctl -a | grep file
fs.file-max = 1606896
fs.file-nr = 1504 0 1606896
fs.xfs.filestream_centisecs = 3000
scp -r ../TVMS/ [email protected]:/home/shiyuefeng Linux 服务器之间拷贝文件 -r 表示的是拷贝目录
ulimit -n,仅仅设置当前shell以及由它启动的进程的资源限制
ps -eo pid,lstart,etime | grep 18672 查看某个进程运行了多久
top 相关命令:
c 查看全路径
C cpu排序
M 内存排序
1 显示多少CPU
查看内存相关状态
vmstat -w 5 每个五秒查询一次
查看磁盘io相关状态
iostat -x 2 3 每隔2秒查询一次 查询三次
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
rKB/s:每秒向设备发出的读取请求的数量
wKB/s:每秒向设备发出的写入请求的数目
iostat -d - 1 10 #查看TPS和吞吐量信息
tps:该设备每秒的传输次数。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备读取的数据量;
kB_wrtn/s:每秒向设备写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;。
Vim的相关操作
/dag 可以高亮显示dag字段
* 跳转到光标所在字符的下一个匹配处
# 跳转到光标所在字符的上一个匹配处
u 撤销操作
vi -b 11.cpp 二进制打开文件(主要存在些乱码换行符的情况,linux 默认unicode)
:%s/^M//g 当出现换行符错误的时候进行该操作(原理就是替换操作), ^M = ctrl + v + ctrl + m
gg -> 文件头 G -> 文件尾
ctags -R * 设置ctags的索引
vi -t main 打开相应的函数
:ta main 可以转到相应的函数(跨文件) ctrl+t 可以返回
在相应的函数上面 :ctrl+] 可以进行函数跳转 ctrl+o 返回原来的地方
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
脚本执行报错不显示
rm /etc/init.d/dag > /dev/null 2>&1显示错误的话 不显示
查看系统的最大线程限制
cat /proc/sys/kernel/threads-max
查看当前系统下的线程总数
pstree -p | wc -l
查看进程下的所有线程数量
ps -eLf|grep pid|wc -l
查看动态库的依赖库文件
nm –D libtest.so [直接显示相关的库]
ldd -r libtest.so [检查相关的符号是否存在]
在linux下挂在windows下的更新目录
yum install cifs* -y
mount.cifs //10.20.139.86/Dcdag3.0 /home/shiyuefeng -o user=shiyuefeng,password=******
umount /mnt/APP
检查文件系统磁盘占用情况
df -h
检查磁盘空间占用情况:
du -h --max-depth=1 只显示一级目录
du -h * --max-depth=1 显示所有的目录大小
增加文件的权限
chmod -R 777 *
查看linux的core文件的生成路径
cat /proc/sys/kernel/core_pattern
测试利用kill -6 pid能够core文件。
gdb 相关操作
选择动态库的路径信息:
1.set solib-search-path /group/DcdagBuild/DC_DAG_SERVER_Linux_x64_20171129
2.info sharedlibrary
显示所有的线程堆栈
thread apply all bt
调试到该函数体执行结束
finish
手动生成dmp
gdb -p pid ;generate-core-file 也可以直接gcore pid -o dag.core
指定运行到哪里暂停
until main.cpp:1523
查看进程的内存映射,可以查看加载的动态库
info proc mapping
条件断点
b MutexTest.cpp:57 if tmp == 10
查看对应的内存
x /20x 0x7ffea6f48d68 (x是以16进制显示,也可以s,以字符串的形式显示)
b表示单字节,h表示双字节,w表示四字 节,g表示八字节。
查看对应的汇编代码
x /10i thread
设置断点
b main.cpp:12 / b CTest:add
调试dmp
gdb -c dag.core /usr/local/DAG/dag
单线程调试
set scheduler-locking= on
宏调试
编译选项g3 使用info macro DEBUG进行查看
基本寄存器信息
X86
%esp:堆栈顶部
%ebp:当前堆栈帧
%eip:指令指针
X64
%rsp:堆栈顶部
%rbp:当前堆栈帧
%rip:指令指针
查看函数指正对应的详细信息
info symbol 0x00007f4eca9119ce
查找相关的函数符号等
info functions SNMP
打开数组显示,每个元素占一行
set print array on
show print array on
设置数组的,如果你的数组太大了,那么就可以指定一个来指定数据显示的最大长度,当到达这个长度时,GDB就不再往下显示了。如果设置为0,则表示不限制
set print elements
show print elements
设置显示结构体时,是否显式其内的联合体数据
set print union
show print union
GDB显示结构体时会比较漂亮
set print pretty on
设置dmp的core
bit0: 私有匿名
bit1: 共享匿名
bit2: 有底层文件的私有映射
bit3: 有底层文件共享映射
bit4: ELF头
bit5: 私有大尺寸页
bit6: 共享大尺寸页
cat /proc/505/coredump_filter
cat /proc/self/coredump_filter 这边就是默认的参数设置
gdb执行shell
shell 命令行:shell ls
查看变量的类型
whatis reqinfo
iptables 防火墙设置
iptables -L -n
iptables -A INPUT -s 10.33.43.53 -p tcp -j DROP
iptables -A OUTPUT -d 10.33.43.53 -p tcp -j DROP
iptables -D OUTPUT -d 10.33.43.53 -p tcp -j DROP
systemctl stop firewalld #停止firewall
systemctl disable firewalld #禁止firewall开机启动
systemctl status firewalld #查看防火墙的状态
firewall-cmd --list-all --zone=public #查看防火墙规则
firewall-cmd --permanent --zone=trusted --remove-source=10.20.139.19 |--add-port=80/tcp
firewall-cmd --get-active-zones
iptables -I INPUT -s 123.44.55.66 -j DROP
yum list | grep iptables #查看yum源是否有iptables的安装包
yum的镜像源设置 /etc/yum.repos.d/CentOS-Base.repo
查看centos的各种版本
cat /proc/version
cat /etc/redhat-release
strace的使用
strace -f -t -o configure-strace.txt -e trace=all ./dag [-p 10245]
可以自动的尝试出密码
hydra -L user.txt -P passwd.txt -t 16 -e ns 10.33.43.13 ssh
hydra -l administrator -P pass.txt 10.36.16.18 smb
查看静态库里面包含的信息
ar -t libevent.a
addr2line -e test1 400506
who-u 查看当前有多少登陆的用户
pkill -kill -t pts/0 剔出相应的用户
给定一个Linux下的so或可执行文件,怎样感知其中预设的rpath信息?
objdump -x binary-or-library | grep RPATH
nc用法
-l 使用监听模式
-p 通信端口
-k 重复接受某个端口上的连接 必须和-l一起使用
-u 使用UDP传输协议。
绑定5001的tcp服务器端口
nc -kl 5001
nc 10.20.139.19 60000
nethogs 可以查看网络带宽顺序
iotop -o -d 1 每隔1s刷新一次 -o代表只显示有io的进程
也可以iotop -p pid 查看某个进程的io
nmap -sP 10.14.84.117-125 ping扫描
nmap -P0 10.14.84.117-125 禁ping扫描 可以在目标主机禁ping的情况下使用
nmap默认使用tcp ack 和icmp对目标进行是否存活的响应,当防火墙存在的时候 可以使用tcp syn ping 扫描来进行判断
nmap -PS 10.14.84.117-125
nmap -PA 10.14.84.117-125 默认就是ack扫描 -PA 和-PS 可以同时使用 ,既发送syn也发送ack
-oN tt.txt 指定输出文件
指定扫描端口 nmap -p 2-200 10.33.43.84
检测操作系统 nmap -0 10.33.13.12
valgrind --tool=memcheck --track-fds=yes --leak-check=full --error-limit=no --track-origins=yes --log-file = a.log ./a.out
--vgdb=yes 当出现错误,valgrind会自动启动调试器