linux
linux设置最大连接数
-
最大文件打开数限制
1、vim /etc/security/limits.conf
* soft nofile 64000
* hard nofile 640002、vim /etc/profile
ulimit -SHn 64000
** source /etc/profile //生效
-
最大TCP连接数/etc/sysctl.conf的优化
内核参数sysctl.conf的优化
/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要,
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_conntrack_max = 20000
如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。
如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立20000多个TCP客户端连接。
给进程发送信号kill
kill 信号参数 进程PID
其中常见的信号参数(英文横杠加阿拉伯数字)有如下几个,更多的信号信息参考可以用man命令查看手册页(man 7 signal):
-1:这个参数代表SIGHUP信号,作用类似重新启动进程;
-2:这个参数代表SIGINT信号,作用相当于在命令行输入Ctrl+C组合键中断进程的运行;
-9:这个参数代表SIGKILL信号,代表强制中断进程;
-15:这个参数代表SIGTERM信号,表示正常的终止进程;
-17:这个参数代表SIGSTOP信号,相当于在终端输入Ctrl+Z组合键来暂停进程的运行。
vim操作
替换字符
- 😒/vivian/sky/替换当前第一个
- 😒/vivian/sky替换所有行
清空
直接按gg dG
自动拉起程序脚本
while true
do
procnum=` ps -ef|grep "test"|grep -v grep|wc -l`
if [ $procnum -eq 0 ]; then
/home/test&
fi
sleep 30
done
top 进程列表
- 第一行,系统时间、运行时间、登录终端数、系统负载
- 第二行 进程总数,运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数
- 第三行 用户占用资源百分比,系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比
- 第四行 物理内存总量、内存使用量、内存空限量、作为内核缓存的内存量
- 第五行 虚拟内存总量、虚拟内存使用量、虚拟内存空限量、已被提前加载的内存量
ps 进程列表
-
user 进程所有者
-
PID 进程id号
-
%cpu 运算器占用率
-
%MEM 内存占用率
-
VSZ 虚拟内存使用量(单位KB)
-
RSS 占用的固定内存量(单位KB)
-
TTY 所在终端
-
STAT 进程状态
-
START 被启动的时间
-
TIME 实际使用CPU的时间
-
command 命令名称和参数
linux进程状态
-
R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
-
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
-
D磁盘休眠状态(Disk sleep):有时候也叫不可中断睡眠状(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
-
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
-
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态
-
Z僵死状态(Zombies) :进程已经退出了但是资源还没有完全被释放的一种状态。
进程的概念 -
僵尸进程
这里的有一种特殊的状态值得一提,就是僵死状态当子进程退出的时候,如果父进程没有读取到子进程的返回值,这时就进入了僵死状态。
这时就处于一个很尴尬的局面,子进程实际上已经退出了,但是父进程认为它还在执行,所以并没有释放它的资源,所以子进程会一直卡在进程表中,等待父进程读取退出状态代码。
-
孤儿进程
父进程自己退出,子进程没有退出,会被init初始进程接管,负责回收
linux系统的启动过程
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:
- 内核的引导。【首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。读取/boot】
- 运行 init。【init 程序首先是需要读取配置文件 /etc/inittab。】
- 系统初始化。【调用执行了/etc/rc.d/rc.sysinit】
- 建立终端 。
- 用户登录系统。
查看内核版本号和系统版本号
cat /etc/redhat-release
cat /proc/version
基本命令执行过程
cp
cp命令是用来拷贝数据,在cp命令执行过程中:分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联,拷贝数据生成新的文件。
rm
rm命令是删除数据的工具,在rm命令执行过程中;数据链接数递减,从而释放inode号,并且inode号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会马上被删除,但当另一个文件使用数据块时将被会被覆盖。
mv
cp命令和rm命令可以看出来在运行这两种工具时,底层数据都发生了改变,下面我们来谈谈mv命令执行时底层发生了什么:
mv命令是经常用来将数据从一个地方挪到另外一个地方的工具,而mv命令在挪动数据的时候底层工作分为两种情况:
第一种是mv命令的目标和源在相同的文件系统,可以理解为同一分区,mv命令在执行过程中用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,并不影响inode表(除时间戳)或磁盘上的数据位置,也就是说没有数据被移动。
第二种如果目标和源不在一个文件系统,也就是不在一个分区,那么 mv就相当于cp和rm。即改变了inode表的条目,也发生了数据移动。
文件创建时间
在ext4之前的早期文件系统中**(ext、ext2、ext3),文件的元数据不会记录文件的创建时间**,它只会记录访问时间、修改时间、更改时间(状态更改时间)。
Access 是访问时间,文件数据的最后访问时间。例如读文件内容
Modify 是修改时间,文件数据的最后修改时间。例如使用VIM修改文件内容
Change 是状态更改时间,这个跟Modify时间很容易混淆,change time:更改文件的属性便会更新该时间,比如使用chmod命令更改文件属性,例如chmod、chown命令。或者执行其他命令时隐式的附带更改了文件的属性若文件大小等。
ext4查看文件创建时间
-
df -T查看文件所在的分区和格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z0jHEOsi-1658473176823)(https://gitee.com/Leo_Anna/image/raw/master/img//20200917172521.png)]
-
debugfs /dev/vda1 进入分区
-
然后找到文件
-
用stat + 文件 查看crtime
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGiIPxwp-1658473176824)(https://gitee.com/Leo_Anna/image/raw/master/img//20200917172806.png)]
文件夹的rwx
- 目录文件r代表可以读取目录列表
- w代表可以增、删、重命名文件名
- x代表可以进入此目录
ssh免密登录
免密登录原理如下 图片来自于网络
图解,server A免登录到server B:
1.在A上生成公钥私钥。
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
3.Server A向Server B发送一个连接请求。
4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
shell
判断shell中命令执行的成功与失败
shell脚本中判断上一个命令是否执行成功
shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败。
结合if-else语句实现判断上一个命令是否执行成功。
示例如下:
if [ $? -ne 0 ]; then
echo "failed"
else
echo "succeed"
fi
或者:
if [ $? -eq 0 ]; then
echo "succeed"
else
echo "failed"
fi
另外
shell中的比较符号如下:
-eq | 等于 |
---|---|
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
shell内部传参及引用
shell中执行一个命令如何将它的返回值赋给一个变量
判断一个文件或目录是否存在
for和where的结构
shell中如何将一个命令在后台执行
shell中的加法操作
列出你知道的所有方法
awk,sed,正则表达式
(正则表达式中 ? * + 的区别)