Linux
阅读提示
建议先看题目目录,再按“概念 -> 原理 -> 场景 -> 优化”顺序复习。
每题先讲结论,再补关键机制和项目实践,回答会更稳。
1、绝对路径用什么符号表示?当前目录、上层目录用什么表示? 主目录用什么表示? 切换目录用什么命令? (了解)
- 绝对路径: 如
/etc/init.d - 当前目录和上层目录:
./../ - 主目录:
~/ - 切换目录:
cd
2、 怎么查看当前进程?怎么执行退出?怎么查看当前路径?
- 查看当前进程:
ps ps -l列出与本次登录有关的进程信息;ps -aux查询内存中进程信息;ps -aux | grep *查询*进程的详细信息;top查看内存中进程的动态信息;kill -9 pid杀死进程。- 执行退出:
exit - 查看当前路径:
pwd
3、查看文件有哪些命令?
vi 文件名#编辑方式查看,可修改cat 文件名#显示全部文件内容more 文件名#分页显示文件内容less 文件名#与more相似,更好的是可以往前翻页tail 文件名#仅查看尾部,还可以指定行数head 文件名#仅查看头部,还可以指定行数
4、列举几个常用的Linux命令
ls: 列出当前目录下的文件和子目录信息。- 使用方式:
ls [-options] [file/directory] - 示例:
ls /home/user列出/home/user目录下的所有文件信息。 cd: 切换当前工作目录。- 使用方式:
cd [directory] - 示例:
cd Documents切换到Documents目录,使用cd ..返回上一级目录。 pwd: 显示当前工作目录的绝对路径。- 使用方式:
pwd mkdir: 创建新的目录。- 使用方式:
mkdir [directory] - 示例:
mkdir javacn创建 “javacn” 文件夹。 touch: 创建新文件或者更新已存在文件的时间戳。- 使用方式:
touch [file] - 示例:
touch newfile.txt rm: 删除指定的文件或目录。- 使用方式:
rm [-options] file/directory - 示例:
rm file.txt(删除单个文件)、rm -r directory(递归删除目录及其内容)。 cp: 复制文件或目录。- 使用方式:
cp [-options] source destination - 示例:
cp file1.txt file2.txt(复制文件)、cp -r dir1 dir2(复制目录) mv: 移动或重命名文件或目录。- 使用方式:
mv [-options] source destination - 示例:
mv file.txt newfile.txt(重命名文件)、mv file.txt /dir/(移动文件到指定目录)。 find: 在指定目录下查找满足条件的文件。- 使用方式:
find [path] [expression] - 示例:
find . -name "*.txt"在当前目录及其子目录下查找扩展名为.txt的文件。 grep: 搜索文件中匹配特定模式的行。- 使用方式:
grep [options] pattern file(s) - 示例:
grep "hello" file.txt在file.txt中查找包含 “hello” 的行。
5、你平时是怎么查看日志的?
- Linux查看日志的命令有多种:
tail、cat、tac、head、echo等,本文只介绍几种常用的方法 1、tail- 最常用的一种查看方式 命令格式:
tail[必要参数][选择参数][文件] -f循环读取-q不显示处理信息-v显示详细的处理信息-c<数目>显示的字节数-n<行数>显示行数-q, --quiet, --silent从不输出给出文件名的首部-s, --sleep-interval=S与-f合用,表示在每次反复的间隔休眠S秒- 例如:
tail -n 10 test.log查询日志尾部最后10行的日志;tail -n +10 test.log查询10行之后的所有日志;tail -fn 10 test.log循环实时查看最后1000行记录(最常用的)
一般还会配合着 grep 搜索用,例如:
tail -fn 1000 test.log | grep '关键字'
如果一次性查询的数据量太大,可以进行翻页查看,例如:
tail -n 4700 aa.log |more -1000可以进行多屏显示(ctrl + f或者 空格键可以快捷键)2、head跟
tail是相反的head是看前多少行日志head -n 10 test.log查询日志文件中的头10行日志;head -n -10 test.log查询日志文件除了最后10行的其他所有日志;head其他参数参考tail3、catcat是由第一行到最后一行连续显示在屏幕上一次显示整个文件 :
$ cat filename从键盘创建一个文件 :
$cat > filename将几个文件合并为一个文件:
$cat file1 file2 > file只能创建新文件,不能编辑已有文件将一个日志文件的内容追加到另外一个 :
$cat -n textfile1 > textfile2清空一个日志文件:
$cat : >textfile2注意:
>意思是创建,>>是追加。千万不要弄混了。cat其他参数参考tail4、moremore命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。more命令从前向后读取文件,因此在启动时就加载整个文件。该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:
--More--(XX%)more的语法:more 文件名Enter向下n行,需要定义,默认为1行Ctrl f向下滚动一屏空格键 向下滚动一屏
Ctrl b返回上一屏=输出当前行的行号:f输出文件名和当前行的行号v调用vi编辑器!命令调用Shell,并执行命令q退出more5、sed这个命令可以查找日志文件特定的一段 , 根据时间的一个范围查询,可以按照行号和时间范围查询
按照行号
sed -n '5,10p' filename这样你就可以只查看文件的第5行到第10行。按照时间段
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log6、lessless命令在查询日志时,一般流程是这样的less log.logshift + G命令到文件尾部 然后输入?加上你要搜索的关键字例如?1213按
n向上查找关键字shift+n反向查找关键字less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且less在查看之前不会加载整个文件。less log2013.log查看文件ps -ef | lessps查看进程信息并通过less分页显示history | less查看命令历史使用记录并通过less分页显示less log2013.log log2014.log浏览多个文件常用命令参数:
-b <缓冲区大小>设置缓冲区的大小-g只标志最后搜索的关键词-i忽略搜索时的大小写-m显示类似more命令的百分比-N显示每行的行号-o <文件名>将less输出的内容在指定文件中保存起来-Q不使用警告音-s显示连续空行为一行/字符串:向下搜索"字符串"的功能?字符串:向上搜索"字符串"的功能n:重复前一个搜索(与/或?有关)N:反向重复前一个搜索(与/或?有关)b向后翻一页h显示帮助界面q退出less命令
一般本人查日志配合应用的其他命令
history// 所有的历史记录history | grep XXX// 历史记录中包含某些指令的记录history | more// 分页查看记录history -c// 清空所有的历史记录!!重复执行上一个命令- 查询出来记录后选中 :
!323
6、Linux上如何查询某个端口是否被占用?
- 使用
netstat命令: netstat -tuln | grep <端口号>- 这个命令会列出当前正在运行的所有TCP和UDP端口,并过滤出指定端口是否被占用。如果端口被占用,会显示对应的PID和程序名称。
- 使用
ps命令结合grep命令: ps -aux | grep <端口号>- 这个命令会列出所有正在运行的进程,并过滤出包含指定端口号的进程信息。通过查看对应的PID和程序名称,可以判断该端口是否被占用。
7、实际工作中如何排查CPU飙升问题?
- 使用系统监控工具:首先,我们可以使用系统监控工具,如
top命令,来查看所有进程占系统CPU的排序。这样可以帮助我们快速定位到占用CPU资源最多的进程 - 查看具体进程的CPU占用情况:接着,我们可以执行
top -Hp 进程号命令,查看该进程下的所有线程占CPU的情况 - 查看耗CPU的线程:然后,我们可以执行
printf "%x\n 线程号"命令,把线程号转成16进制,以便在后续查看线程堆栈信息 - 查看线程堆栈信息:我们可以执行
jstack 进程号 | grep 线程ID命令,查找某进程下线程ID(jstack堆栈信息中的nid)的线程状态 - 查看GC情况:我们还可以执行
jstat -gcutil 进程号 统计间隔毫秒 统计次数命令,查看某进程GC持续变化情况 - 查看进程的堆内存情况:我们可以执行
jmap -heap 进程ID命令,查看一下进程的堆内从是不是要溢出了 - 导出内存heap到文件中:最后,我们可以执行
jmap -dump:format=b,file=filename 进程ID命令,导出某进程下内存heap输出到文件中
8、场景题:项目本地能运行,发布到Linux后运行不了,可能是什么原因?该如何解决?
- 环境差异:本地环境和服务器环境可能存在差异,例如Java版本、系统环境变量、依赖库等。解决方法是确保服务器环境和本地环境尽可能一致
- 权限问题:可能是Linux服务器上的文件权限或者防火墙设置导致的。解决方法是检查并修改相关的权限设置
- 依赖问题:可能是项目依赖的库在服务器上不存在或版本不匹配。解决方法是检查项目的依赖,并确保它们在服务器上正确地被安装和配置
- 配置问题:可能是配置文件中的路径、数据库连接信息等在服务器上不适用。解决方法是检查并修改配置文件,确保它们在服务器环境中是正确的
8、什么是零拷贝技术?它有哪些使用场景?
- 零拷贝技术是一种优化数据传输的方法,它通过最小化数据在内存中的拷贝次数来提高数据传输的效率和性能。通常,在数据传输过程中,数据需要从一个缓冲区(如内核缓冲区)拷贝到另一个缓冲区(如用户空间缓冲区),然后再传输到目标位置。而零拷贝技术的目标是尽可能减少或消除这些拷贝操作,从而降低系统开销和提高性能。零拷贝技术的使用场景包括但不限于以下几种:
- 网络数据传输:在网络传输过程中,零拷贝技术可以避免数据在内核空间和用户空间之间的拷贝,从而提高网络数据传输的效率。常见的应用包括高性能网络服务器、网络流媒体服务等
- 文件传输:在文件传输过程中,零拷贝技术可以减少数据在文件系统缓存和用户空间缓冲区之间的拷贝次数,提高文件传输的效率。例如,在文件系统中实现零拷贝的技术可以加速文件的读取和写入操作
- 内存映射文件:内存映射文件是一种将文件映射到进程地址空间的技术,可以让应用程序直接操作文件而无需进行显式的读写操作。零拷贝技术可以用于内存映射文件的实现,从而提高文件的访问速度和效率
- 数据库系统:在数据库系统中,零拷贝技术可以用于加速数据的读取和写入操作,提高数据库的性能和吞吐量。例如,通过将数据库缓存直接映射到内存中,可以避免数据在内存和数据库之间的拷贝操作
9、Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?(了解)
- Liunx 调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态 优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用 CPU 资源,导致其他进程不能占有 CPU, 所以引用动态优先级概念
