linux 相关问题
一 Linux 哲学思想
1.Linux 是怎样诞生的?
linus 的大学作业
2.Linux中的软件在开发时通常遵循哪些原则?
即linux准则
使用小写字母,尽量保持简短
沉默是金,没有消息就是好消息
并行思考
寻找90%的解决方案:允许不完美
更坏就是更好:包容
层次化思考:/ 目录结构 思路更加清晰
K.I.S.S 简单又傻瓜
3.Linux 中的软件有什么共同特征?
linux哲学
小即是美
让每个程序只做好一件事
尽快建立原型 (快速完成,先跑的对,再跑的好)
可移植性比效率更重要
使用纯文本文件存储数据(易于阅读,通用)
重复利用软件杠杆效应(软件与软件组合)
避免强制性用户界面(利于自动化)
让每一个程序都成为过滤器(即管道,重复实现组合)
二 Linux基础知识
4.Linux 中的文件是怎样组织存放的?
通过文件系统,如ext2、ext3、ext4等
5.Linux 系统的启动流程是怎样的?
①BIOS (基本输入输出系统) 检查硬件,读取主启动磁盘MBR区的引导加载程序(Boot Loader)并执行,显示给用户一个选择界面。
②用户选择要启动的系统,Boot Loader 通过initrd(初始RAM磁盘) 在内存中建立一个供内核使用的临时文件系统,然后由内核程序接管后续启动流程。
③内核开始初始化系统中的各部分硬件。
④启动/sbin/init 进程
⑤ /sbin/init 进程调用 /etc/rc.d/rc.sysinit 脚本,完成设置环境变量,交换分区,初始化系统时钟等工作。
⑥ /sbin/init 调用 /etc/inittab (配置文件) ,执行相应运行级别下的程序脚本启动或杀掉相应进程(这里可以设置程序自动启动)
⑦各启动脚本执行完毕后,/sbin/init 按 /etc/inittab(配置文件) 中的配置启动相应的控制台交互界面,提示用户登录
6.Linux 中的运行级别是怎么回事?怎样切换运行级别?
① 运行级别
运行级别就是操作系统当前正在运行的功能级别.
它让一些程序在一个级别启动,而另外一个级别的时候不启动。
Linux下的7个运行级别:
0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
2:多用户状态,没有NFS支持。
3:完整的多用户模式,有NFS,登陆后进入控制台命令行模式。
4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5:X11控制台,登陆后进入图形GUI模式,XWindow系统。
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。运行init6机器就会重启
② 查询级别:runlevel
③ 切换界别:如 init 3
7.超级管理员的密码忘记了怎么办?
启动到GRUB时按e进入编辑模式,在kernel 那行后面加个 1,然后按b 启动进入单用户模式,用命令 passwd;修改root密码 .
即进入单用户模式进行修改密码.
8.怎样让一个命令在Linux启动时自动执行?
① /etc/rc.d/rc.local 中 写启动命令
② /etc/rc.d/init.d/* 写 shell 脚本,然后在 /etc/rc*.d 中建立软连接
③使用chkconfig 工具,如chkconfig — level 2345 auditd on.
9.Linux 中的文件权限是怎样设定的?文件和目录各有哪些可设置的权限?
①文件权限情况
-rwx r-x r-xwei
4+2+1
4+0+1
4+0+1
755
user 文件所有者
group 所属用户组
others 其他人
read 4 读
write 2 写
execute 1 执行
②设置权限
chmod 777 文件或目录
-R:递归修改指定目录下所有子项的权限
10.什么是软链接?什么是硬链接?它们有什么作用?
【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
【软连接】另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
区别:
硬链接类似快照备份;软链接类似快捷方式。
1)默认不带参数情况下,ln命令创建的是硬链接。
2)硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同。
3)ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到。
4)删除软链接文件,对源文件及硬链接文件无任何影响;
5)删除文件的硬链接文件,对源文件及软链接文件无任何影响;
6)删除链接文件的原文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
7)同时删除原文件及其硬链接文件,整个文件才会被真正的删除。
8)很多硬件设备中的快照功能,使用的就类似硬链接的原理。
9)软连接可以跨文件系统,硬链接不可以跨文件系统。
三 Linux的日常使用
11.Linux 中的小工具忘记了参数怎么办?怎样获取帮助?
linux 查看命令帮助文档
man
info:GNU 项目推荐的新一代文档格式,功能更强
命令 — — helf
12.Linux 中怎样查找文件?怎样在文件中查找特定的内容?
①查找文件:
find / -name chuankun.php - print (默认)
find . -type f 查找本目录下所有的文件
find . -type d 查找本目录下所有的目录
find ./ -name “chuankun.php” -exec php {} ;
find [路径] [选项] [查找规则] [动作]
which 查找环境变量PATH 下的可执行文件及别名
whereis 查找系统常见目录中的可执行文件、文档、源代码、配置文件等
locate 通过索引数据库查找文件 查找速度快
②查找特定内容
grep 查找文件内容,输出匹配的行
grep [选项] 正则表达式 [文件]
grep -cP ‘bot|spider’ ./access.log
查询日志文件中出现bot或spider关键词的行数
-c 输出匹配到的行数
-P 使用正则
-E 更强大的正则
13.Linux 中有哪些用于处理文本的小工具?怎样通过管道组合起来使用?
①工具
cat 查看文件内容
head 查看文件头部
tail 查看文件尾部
more 分页查看文件内容
less 更强的分页查看文件内容
cut 按列查看文件内容 默认以TAB 分割
cut -d: -f1 /etc/passwd
-d 指定分隔符
-f 指定输出的字段
sort 对文件内容排序 默认ASCII顺序排序
sort -n -k3 -t: /etc/passwd
-n 按数字排序
-t 指定列的分隔符
-r 倒序排列
sort -t: -k6nr -k3n /etc/passwd
按第6列倒序排列,第3列正序排列
uniq 对文件内容排重, -c 可统计重复行数量
diff 对比文件内容
split 按行、字节等切分并输出文件
wc 字节、单词、行计算
②管道组合
linux 中有三个系统文件描述符: 0 标准输入 1标准输出 2 标准错误输出
管道是linux进程间通信的方式之一
管道像一根供数据流通的单向管道
所有linux程序的标准输出都可以通过管道传递给另一个程序作为标准输入
find ./ -type f -name “*.php” -print0 | xargs -0 wc -l
xargs 从标准输入中构建并执行指定命令
xargs -0 wc -l 从标准输入中读取数据,以\0 (null) 字符分割,再以空格合并,然后传递给wc -l 作为参数并执行
cut -d “ “ -f1 ./access.log | sort | uniq -c | sort -n -r | head -10
14.怎样使用文本工具对日志进行统计分析?
如图:
面试题:需求:分析网站访问日志文件,找出访问量最大的前10个IP地址,降序排列
找出IP,每行1个
cut -d “ “ -f1 ./access.log
去重并计数
uniq -c
排序
sort -n -r
取前10行
head 10
cut -d “ “ -f1 ./access.log | sort | uniq -c | sort -n -r | head -10
linux 命令 简单好用组合性高
15.输入、输出重定向是怎么回事?
怎么保存下来结果,可以用输出重定向
符号 可重定向输出位置
< 符号 重定向输入位置
ls -l > ls_output.log 将标准输出重定向到ls_output.log 文件
ls -l >> ls_append.log 将标准输出重定向 追加到 ls_append.log 文件
ls -l 1> ls_output.log 2> ls_error.log 将标准输出重定向ls_output.log 标准错误输出重定向到 ls_error.log 文件
ls -l 1> ls_out.log 2> &1 标准错误输出重定向和标准输出地方一样
more < xxx.txt 输入重定向
不想要重定向的文件:
删除 或者 > /dev/null 可以重定向到黑洞文件 (相当于系统定义的一个空文件)
16.vim 编辑器怎样使用?
根据需求,看相关文档即可
四 Linux 系统管理
17.Linux 中有哪些安装软件的方式?怎样实现编译安装?
①几种方式
源码包安装
rpm包安装
yum源安装
②编译安装
./configure 配置
make 编译
make install 安装
18.怎样启动、停止、重启一个系统服务?
利用service+服务名称+start/stop/restart对服务进行启动,停止和重启
(1)一种是可以使用service脚本来调度,如:
service 服务名 start
service 服务名 stop
service 服务名 restart
(2)一种是直接执行某个服务自己的管理脚本,以vpnagetd服务为例
/etc/init.d/vpnagentd start
/etc/init.d/vpnagentd stop
/etc/init.d/vpnagentd restart
即用service 或 用服务自己的管理脚本 在 /etc/init.d 里
19.怎样查看当前正在运行的进程?
ps 命令 显示当前进程
-ef 显示带启动命令行的进程信息
-u root 显示某用户的进程
-A 显示全部进程
-ejH 显示进程树
20.怎样结束一个进程?
kill 命令 : 向进程发送信号,常用于终止某进程
kill -s PID
-s 指定信号
-l 所有信号标识列表
kill -9 PID 可用于强制退出某进程
kill -9 -1 把当前登录界面的所有进程都kill掉 慎用
killall 可用于通过进程名称发送信号
21.怎样查看当前系统中登录了哪些用户?
①w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括:
- 用户名称
- 用户的机器名称或tty号
- 远程主机地址
- 用户登录系统的时间
- 空闲时间(作用不大)
- 附加到tty(终端)的进程所用的时间(JCPU时间)
- 当前进程所用时间(PCPU时间)
- 用户当前正在使用的命令
w命令还可以使用以下选项 - -h忽略头文件信息
- -u显示结果的加载时间
- -s不显示JCPU, PCPU, 登录时间
②使用who命令查看(登录)用户名称及所启动的进程
who命令用于列举出当前已登录系统的用户名称。其输出为:用户名、tty号、时间日期、主机地址。
22.怎样查看当前系统的负载情况?怎样确定系统是否已满负荷运行?
top 命令 : 显示系统进程资源占用情况
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
常用操作:
P 按CPU 使用量排列
M 按内存使用量排列
h 显示帮助
q 退出
1 多CPU 显示
k 杀死进程
r 设置进程nice 级别
内容:
load average: 0.00, 0.03 0.05
平均负载: 最近1分钟,最近5分钟,最近15分钟
load < 1 系统空余资源丰富
load=1 利用充分
load>1 系统超载
多核 最佳状态为 cpu 数量 x 0.8
23.怎样使一个命令在每周一三五早8点-10点每隔五分钟执行一次?
使用crontab:让命令自动定时运行
五 shell编程
1.什么是Shell?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言
2.什么是Shell脚本?怎样让一个脚本文件变成可以直接执行的软件?
Shell 脚本(shell script),是一种为 shell 编写的脚本程序
chmod +x 文件名
3.怎样定义Shell变量?
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="runoob.com"
4.怎样给一个Shell脚本传递命令参数?怎样接受、解析这些参数?
①参数直接跟在脚本名称后边 ./test.sh 1 2
②与参数相关的变量
$1, $2, …$n 第n个参数
$* 以IFS 分隔的所有参数
$@ 以空格分隔的所有参数
$# 参数个数
5.Shell 中怎样捕获一个命令的输出结果?
第一种方法:
output=echo "123"
echo $output
第二种方法:
output=$(echo "123")
echo $output
6.命令的返回状态码是什么东西?有什么作用?怎样查看?
①linux命令执行后无论成功与否都有一个返回值,该值即为返回状态码。
如果为 0,则表示命令执行成功,其它值则表示错误,具体值如下:
0 命令成功结束
1 通用未知错误
2 误用shell命令
126 命令不可执行
127 没找到命令
128 无效退出参数
128+x Linux 信号x的严重错误
130 Linux 信号2 的严重错误,即命令通过SIGINT(Ctrl+C)终止
255 退出状态码越界
②作用即为判断linux命令的执行情况
③Linux 使用$? 变量保存上个执行的命令的退出状态码。你可以在要查看的命令之后立即查看或使用$?变量。它的值会变成shell中执行的最后一条命令的退出状态码。
7.怎样定义Shell函数?函数怎样传递参数?怎样返回数值?
①func() {}
②funWithParam 1 2 3 4 5 6 7 8 9 34 73
③通过return 命令可以让函数返回数字值,常用于表示函数是否成功。
如果返回字符串值,则需要在函数中echo,然后函数外使用 $(func) 捕获。或者将字符串保存在一个变量中,函数执行完毕后读取该变量
如果函数没有使用return 指定返回值,则函数返回值为最后一条命令的退出码( $? 捕获返回值)
8.Shell 中怎样进行数学计算?
原生bash不支持简单的数学运算,但是可以通过其他命令来实现
例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作
val=expr $a + $b
echo "a + b : $val"
val=expr $a - $b
echo "a - b : $val"
val=expr $a \* $b
echo "a * b : $val"
val=expr $b / $a
echo "b / a : $val"
val=expr $b % $a
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
9.Shell 中怎样处理字符串?
①字符串截取
${变量名:起始位置:长度}
echo ${id:0:7}
②字符串长度
echo ${#id}
③字符串替换:只替换第一个子串 (格式:格式:${变量名/old/new})
echo ${id/3/aa}
等等
https://blog.51cto.com/11483827/2363643?source=dra
10.一个Shell脚本中怎样包含其他脚本?
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
注意:被包含的文件 test1.sh 不需要可执行权限。
六 AWK & SED
1.AWK是什么?
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
2.AWK中有哪些特殊变量?各有什么含义?
3.怎样通过AWK对一个文本文件按列拆分?
4.怎样使用AWK统计一个WEB访问日志中发起POST提交最多的IP地址和提交次数?
5.SED是什么?怎样通过SED实现对文本的查找、替换?
SED是一种非交互式的流编辑器,利用脚本来处理文本文件。