零散知识点
-
Linux系统中在给定文件中查找与设定条件相符字符串的命令为?
grep
grep:查找文件内的内容 gzip:压缩文件,文件经压缩后会增加.gz扩展名 find:在指定目录下查找文件 sort:排序
-
linux内核锁有哪些?
Linux的内核锁主要是自旋锁、顺序锁和信号量。
- 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
- spin_lock自旋锁对于临界区是不做区分的,而读写锁是对临界区做读写区分,并且度进程进入临界区的几率比较大,因为写进程进入时需要等待读进程退出临界区。而有没有一种方法,可以保护写进程的优先权,使得写进程可以更快的获得锁? 答案是有的,就是顺序锁。顺序锁的设计思想是:对某一个共享数据读取的时候不加锁,写的时候加锁。同时为了保证读取的过程中因为写进程修改了共享区的数据,导致读进程读取数据错误。在读取者和写入者之间引入了一个整形变量sequence,读取者在读取之前读取sequence, 读取之后再次读取此值,如果不相同,则说明本次读取操作过程中数据发生了更新,需要重新读取。而对于写进程在写入数据的时候就需要更新sequence的值。
- **Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。**这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务(优先级最高的任务)将被唤醒,从而便可以获得这个信号量。信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。
-
在RHEL5系统中,下面关于shell环境变量配置文件的描述,正确的是( )
a.用户登录系统时,bash首先执行/etc/profile配置文件和/etc/profile.d/目录下的配置文件,这些配置文件对所有用户都有效 b.用户登录系统时,bash首先执行.bash_profile文件和.bashrc文件,这些配置文件对所有用户都有效 c.用户主目录下的.bashrc设置为每次登录时执行,而.bash_profile则为每次打开新的终端时执行 d.执行用户主目录下的环境变量配置文件时,不可以重复设置用户登录时配置文件中已经设置的选项
- /ect/profile
- 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从 /etc/profile.d 目录的配置文件中搜集shell的设置.
- /etc/bashrc
- 为每一个 运行bash shell 的用户执行此文件.当bash shell被打开时,该文件被读取.
- ~/.bash_profile
- 每个用户都可使用该文件输入 专用于 自己使用的shell信息, 当用户登录时,该文件仅仅执行一次 !默认情况下,他设置一些环境变量,执行~/.bashrc文件.
- ~/.bashrc
- 该文件包含专用于用户的bash shell的bash信息 ,当登录时以及每次打开新的shell时,该该文件被读取 .
- ~/.bash_logout
- 当每次退出系统(退出bash shell)时,执行该文件.
- /ect/profile
-
为了将当前目录下的归档文件 myftp.tgz 解压缩到 /tmp 目录下,用户可以使用命令()
-x:extract files from an archive 即从归档文件中释放文件;
-v:verbosely list files processed 即详细列出要处理的文件;
-z:filter the archive through gzip 即通过gzip解压文件;
-f:use archive file or device ARCHIVE 即使用档案文件或设备;
通常情况下解压 .tar.gz 和 .tgz 等格式的归档文件就可以直接使用 tar xvzf;
因为要解压到指定目录下,所以还应在待解压文件名后加上 -C(change to directory)参数。 -
linux 启动流程
1,BIOS加电自检;
2,从硬盘0柱面 0磁道 第一扇区读512字节的MBR主引导记录;
3,运行引导程序Grub并根据其配置加载kernel镜像后初始化;
4,根据/etc/inittab中系统初始化配置执行/etc/rc.sysinit脚本;
5,根据第3步读到的runlevel值启动对应服务;
6,运行/etc/rc.local;
7,生成终端待用户登录。
-
在Linux系统中,有关线程说法正确的是( )
线程是程序的多个顺序的流动态执行 线程有自己独立的地址空间 线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 线程是系统进行资源分配和调度的一个独立单位
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,一个进程中包含多个线程。是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位
进程有独立的地址空间,线程没有。线程是共享进程的地址空间,因此B错误
进程是 操作系统进行资源分配和调度的一个独立单位,而线程只是CPU调度和分派的基本单位,因此D错误
-
哪些命令可以查看当前系统的启动时间()
- w,查看当前登录到系统中的用户,并查看该用户正在运行的进程
- top,查看Linux中的资源信息,第一行开始部分显示了系统当前时间,并显示已经运行了多长时间,两者相减就是系统启动时间
- uptime,查看系统启动时间
- who -b,查看登录到系统中的用户什么时候登录的
所以准确来说,top 计算得到的和 uptime 得到的差不了多少,如果系统只是启动但是没有任何用户登录到系统,那么 w 和 who -b 就没有用。
-
在linux编程中,哪个TCP的套接字选项与nagle算法的开启和关闭有关?
TCP_NODELAY
Nagle算法的规则:
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
Nagle算法只允许一个未被ACK的包存在于网络,它并不管包的大小,因此它事实上就是一个扩展的停-等协议,只不过它是基于包停-等的,而不是基于字节停-等的。Nagle算法完全由TCP协议的ACK机制决定,这会带来一些问题,比如如果对端ACK回复很快的话,Nagle事实上不会拼接太多的数据包,虽然避免了网络拥塞,网络总体的利用率依然很低。
Nagle算法是silly window syndrome(SWS)预防算法的一个半集。SWS算法预防发送少量的数据,Nagle算法是其在发送方的实现,而接收方要做的是不要通告缓冲空间的很小增长,不通知小窗口,除非缓冲区空间有显著的增长。这里显著的增长定义为完全大小的段(MSS)或增长到大于最大窗口的一半。
注意:BSD的实现是允许在空闲链接上发送大的写操作剩下的最后的小段,也就是说,当超过1个MSS数据发送时,内核先依次发送完n个MSS的数据包,然后再发送尾部的小数据包,其间不再延时等待。(假设网络不阻塞且接收窗口足够大)举个例子,比如之前的blog中的实验,一开始client端调用socket的write操作将一个int型数据(称为A块)写入到网络中,由于此时连接是空闲的(也就是说还没有未被确认的小段),因此这个int型数据会被马上发送到server端,接着,client端又调用write操作写入‘\r\n’(简称B块),这个时候,A块的ACK没有返回,所以可以认为已经存在了一个未被确认的小段,所以B块没有立即被发送,一直等待A块的ACK收到(大概40ms之后),B块才被发送。整个过程如图所示:
这里还隐藏了一个问题,就是A块数据的ACK为什么40ms之后才收到?这是因为TCP/IP中不仅仅有nagle算法,还有一个TCP确认延迟机制 。当Server端收到数据之后,它并不会马上向client端发送ACK,而是会将ACK的发送延迟一段时间(假设为t),它希望在t时间内server端会向client端发送应答数据,这样ACK就能够和应答数据一起发送,就像是应答数据捎带着ACK过去。在我之前的时间中,t大概就是40ms。这就解释了为什么’\r\n’(B块)总是在A块之后40ms才发出。
当然,TCP确认延迟40ms并不是一直不变的,TCP连接的延迟确认时间一般初始化为最小值40ms,随后根据连接的重传超时时间(RTO)、上次收到数据包与本次接收数据包的时间间隔等参数进行不断调整。另外可以通过设置TCP_QUICKACK选项来取消确认延迟。
linux命令
1. 使⽤两种命令创建⼀个⽂件?
- touch a.txt
- vi a.txt
- mkdir abcd. cat > a.txt 建⽴⼀⽂件,然后把接下来的键盘输⼊写⼊⽂件,直到按Ctrl+D为⽌
2. 硬链接和软连接的区别?
-
a. 硬链接:
1、⽂件有相同的 inode 及 data block;
2、只能对已存在的⽂件进⾏创建;
3、不能交叉⽂件系统进⾏硬链接的创建;
4、不能对⽬录进⾏创建,只可对⽂件创建;
5、删除⼀个硬链接⽂件并不影响其他有相同 inode 号的⽂件。
-
b. 软链接:
1、软链接有⾃⼰的⽂件属性及权限等;
2、可对不存在的⽂件或⽬录创建软链接;
3、软链接可交叉⽂件系统;
4、软链接可对⽂件或⽬录创建;
5、创建软链接时,链接计数 i_nlink 不会增加;
6、删除软链接并不影响被指向的⽂件,但若被指向的原⽂件被删除,则相关软连接被称为死链接(即 danglinglink,若被指向路径⽂件被重新创建,死链接可恢复为正常的软链接)。
3.linux常用命令有哪些
#查找关闭端口进程
netstat -nlp | grep :3306 kill pid
#删除文件
rm -rf
#解压
tar -zxvf file.tar.gz
# 创建文件
touch filename
cat > filename
#修改文件
vi vim
4.怎么查看一个java线程的资源耗用
linux下,所有的java内部线程,其实都对应了一个进程id,linux上的jvm将java程序中的线程映射为操作系统进程
- jps -lvm 或 ps -ef|grep java 查看当前机器上运行的java应用进程
- top -Hp pid 可以查看java所有线程资源的耗用
- jstack Java应⽤进程ID | grep 线程ID的16进制
-
load过高的可能性有哪些
cpu load的飙升,一方面可能和full gc的次数增大有关,一方面可能和死循环有关系
-
/etc/hosts 文件有什么作用?
在当前主机给ip设置别名,通过该别名可以访问到该ip地址,通过别名、ip访问的效果是⼀样的
-
如何快速的将⼀个⽂本中的"abc"转换成"xyz"?
vim file 输入 :%s/abc/xyz/g
-
如何在log⽂件中搜索找出error的⽇志?
cat xx.log|grep error
-
发现硬盘空间不够,如何快速找出占⽤空间最⼤的⽂件?
find -type f -size +100m| xargs du -h |sort -nr
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
du -h 查看文件大小
-
获取上一条命令执行的返回码
- $? 最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行,如果这个变量的值为非0(具体是哪个数,由命令自己决定),则证明上一个命令执行不正确。
- $0 脚本启动名(包括路径)
- $n 第n个参数,n=1,2,…9
- $* 所有参数列表(不包括脚本本身)
- $@ 所有参数列表(独立字符串)
- $# 参数个数(不包括脚本本身)
-
- $? 执行上一个指令的返回值
-
Java服务端问题排查