面试八股文 linux 篇 持续更新~

linux

linux设置最大连接数

  • 最大文件打开数限制

    1、vim /etc/security/limits.conf

    * soft nofile 64000
    * hard nofile 64000

    2、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免密登录

免密登录原理如下 图片来自于网络

https://img-blog.csdn.net/20160319193556260

图解,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,正则表达式

(正则表达式中 ? * + 的区别)

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想骑车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值