Linux面试

286 阅读10分钟

1.查看端口占用

查看进程pid 
lsof -i:8080:根据端口查看进程pid

2.查看主机名 存在文件etc/hostname中
hostname

3.用户按照uid划分,uid 为0的是系统管理员,一般取名为root,1-1000是 系统用户,往后的是普通用户,用useradd命令创建的都在这个范围内,uid为0的用户拥有所有权限,包括各种修改系统设置的权利,linux中一切皆文件,也就是uid为0的用户可以进入这个系统配置文件并修改保存,按照uid划分,用户的权限基本就确定了,但是还是可以用一些命令提权,比如suid可以让使用命令时候的用户暂时变成命令所属者的身份去执行,sgid就是让用户拥有命令所属组的权限 su - 用户 可以从现在的身份变成后面一个身份,如果是转换成root,一般要输入root密码

4.passwd命令可以修改密码,root可以修改所有用户的密码,其他只能改自己的

5.文件目录 etc 放配置文件,/usr/local 放用户自己下载的软件,dev下面是设备文件 系统的硬盘名字一般为/dev/sda,以此类推,一共可以有16个硬盘。硬盘上要分区,如/dev/sda1,第一个分区,硬盘要先分区,然后格式化,最后挂载到一个已知的目录上才能通过这个目录看硬盘里面的内容,分区就是比如一个20G的硬盘分2G给一个分区,格式化就是这个分区确定是什么文件格式,这样系统才能正确的去读取他的内容,因为不同文件系统存储数据的策略和方式不同,就是inode节点连接之类的,挂载就是在一个媒介去展露硬盘内的内容,比如通过各种目录访问文件信息

6.软连接硬链接

touch f1          #创建一个测试文件f1
ln f1 f2          #创建f1的一个硬连接文件f2
ln -s f1 f3       #创建f1的一个符号连接文件f3
ls -li            # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,
然而符号连接文件的inode节点不同(在Linux的文件系统中,保存在磁盘分区中的文件
不管是什么类型都给它分配一个编号,称为索引节点号)

软连接就相当于C中的指针,指向他链接的文件,如果他链接的文件显式删除了(rm -f file),那么指向他的指针会报错,即软链接也找不到文件了 硬链接像是引用计数指针,每增加一个硬链接,node数加1,只有node为0的时候才会真正删除文件,其他时候只是删除了从这个连接访问文件的能力

7.远程传输文件scp scp [参数] [原路径] [目标路径]将原路径文件复制到目标路径 scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ 从远程主机复制文件

8.screen 可以创建多个命令行窗口 screen -S PHP 创建一个叫PHP的会话 screen -r PHP 恢复一个叫PHP的会话 screen -ls 查看已经创建的会话 exit 退出会话 Ctrl + a,d #暂离当前会话

9.查看系统负载 w uptime load average后面的三个数是1,5,15,分钟内的平均负载

10.ps

ps -aux 列出目前所有的正在内存当中的程序
ps -ef   显示所有进程信息,连同命令行,会把命令信息打印出来

11.nestat

netstat -anp | grep 1883 找到运行在指定端口的进程
-a或–all 显示所有连线中的Socket
-n或–numeric 直接使用IP地址,而不通过域名服务器
-p或–programs 显示正在使用Socket的程序识别码和程序名称即进程号

12.top

[root@TG1704 log]# top

top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35

Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie

Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st

Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers

Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                

28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java                                                                   

18249 root      18   0 3201m 1.9g  11m S 35.9  6.0 569:39.41 java                                                                   

 2808 root      25   0 3333m 1.0g  11m S 24.3  3.1 526:51.85 java  
task 205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个
5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比

13.sar sar -u cpu利用率 若%iowait 的值过高,表示硬盘存在I/O瓶颈 sar -r 内存利用率

14.设置DNS修改那个文件
/etc/resolv.conf

15.想在Linux命令行下访问某个网站,并且该网站域名还没有解析,如何做?

答:在/etc/hosts文件中增加一条从该网站域名到其IP的解析记录即可

16.grep文本搜索
grep test *file 查找后缀名为file的文件里面test字符串 输出大致如下

testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行

grep -r update /etc/acpi 递归的方式查找文件目录下字符串update grep -v test *test* 反向查找文件名中包含test文件内部不包含test字符串 grep -n test file 文件名为file的文件中找test字符串并标出行号 grep -A 3 -i "example" demo_text 输出成功匹配的行,以及该行之后的三行

17.awk文本处理
awk 动作 文件名 动作是用单引号里面花括号,命令写在里面 awk '{print $0}' demo.txt demo.txt处理文件,大括号里是每行处理动作print $0。$0代表当前行,因此上面命令的执行结果,就是把每一行原样打印出来 $0代表当前行,$1代表当前行第一个字段,以此类推,默认用制表符或空格分割一行中的字段,也可以用参数F设置分隔符 awk -F ':' '{ print $1 }' demo.txt 在demon.txt文件中以冒号作为分隔符打印每行的第一个字段 命令里面还可以用语句或者函数 awk -F: '{printf "%-15s %i\n",$1,$3 > "/dev/stderr"}' /etc/passwd

18.kill 杀死进程
kill -9 pid 彻底杀死某个进程,pid可以用ps找到

19.tar 解压缩
tar -cvzf *.tar.gz file file压缩为xx.tar.bz格式 tar -cvjf *.tar.gz2 file 压缩为xx.tar.bz2格式 tar -xvzf *.tar.gz 解压缩tar.gz格式文件 tar -xvjf *.tar.gz2 解压缩tar.gz2格式的文件 tar -xvf archive_name.tar 解压tar文件 tar -cvf *.tar file 压缩为tar文件

20.chmod 文件权限
读写执行421 chmod u+x 文件所属者拥有执行权限 chmod 741 所属者读写执行,所属组读,普通用户执行

21.查看文件
tail -f file 查看正在改变的日志文件 tail -10 file 文件最后10行 cat file 适合小文件 less file 适合大型文件 /字符串:向下搜索“字符串”的功能 ?字符串:向上搜索“字符串”的功能

22.挂起进程ctrl+z bg+作业号 fg+作业号

假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用
Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1

23.find
find [path...] [expression] path是查找路径,expression常用的有-name -print -exec等

-name 按照文件名查找文件
find . -name "MyProgram.c" 当前目录下找文件,文件名不区分大小写

-mtime -n +n 按照文件的更改时间来查找文件,- n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前
find / -mtime -5 -print 根目录下修改时间5天以内的文件

24.diff
比较两个文件,f1有7行,每行一个a,f2有7行第四行是b
正常格式 diff f1 f2

4c4
< a
---
> b

上下文格式 diff -c f1 f2

*** f1 2012-08-29 16:45:41.000000000 +0800
&emsp;&emsp;--- f2 2012-08-29 16:45:51.000000000 +0800
&emsp;&emsp;***************
&emsp;&emsp;*** 1,7 ****
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp;!a
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp;--- 1,7 ----
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp;!b
&emsp;&emsp; a
&emsp;&emsp; a
&emsp;&emsp; a

合并格式 diff -u f1 f2

--- f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800
@@ -1,7 +1,7 @@
 a
 a
 a
 -a
 +b
 a
 a
 a

25.export
设置环境变量,仅在此次登陆有效
export PATH=$PATH:/home/zhaodw 永久有效,修改profile文件: #vi /etc/profile 在里面加入: export PATH="$PATH:/opt" 这个在我们的机器上是大家共用的,建议不修改这个,只修改自己根路径下的 即第2种方法 2. 修改本id根路径下的.bashrc或.bash_profile文件:

vi /home/zhaodw/.bash_profile

在里面加入: export PATH="$PATH:/opt" 立即生效用source命令 source /etc/profile

30.关机
shutdown

31.定时任务crontab

分 时 日 月 星期 要运行的命令

第1列分钟0~59
第2列小时0~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令
每1分钟执行一次myCommand
* * * * * myCommand
每小时的第3和第15分钟执行
3,15 * * * * myCommand
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand
每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
新增调度任务可用两种方法:
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

查看调度任务
crontab -l //列出当前的所有调度任务
crontab -l -u jp//列出用户jp的所有调度任务

删除任务调度工作
crontab -r //删除所有任务调度工作

32.sed 取文件内容

sed -n np path 
 sed:命令 
 -n:选项 
 np:参数,取第几行内容 
 path:文件路径 
如取/home/xx/Makefile的第7行内容: 
sed -n 7p /home/xx/Makefile
取多行内容: 
sed -n 7,8,20p /home/xx/Makefile  
取1到9行 
Sed -n '1,9p'  filename 

33.输入输出重定向

command >out.file  2>&1 & 
command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2>&1是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行

34.free
这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况 默认情况下free会以字节为单位输出内存的使用量

$ free
             total       used       free     shared    buffers     cached
Mem:       3566408    1580220    1986188          0     203988     902960
-/+ buffers/cache:     473272    3093136
Swap:      4000176          0    4000176

total:物理内存大小,就是机器实际的内存
used:已使用的内存大小,这个值包括了 cached 和buffer和 应用程序实际使用的内存
free:未被使用的内存大小
shared:共享内存大小,是进程间通信的一种方式
buffers:被缓冲区占用的内存大小
cached:被缓存占用的内存大小
-buffers/cache 的内存数:(used - buffers - cached)应用程序实际使用的内存
+buffers/cache 的内存数: (free + buffers + cached)理论上可以被使用的内存

7.swap swap就是用来充当内存的,当内存不够的时候从硬盘中拿出来一块地方做内存用,前提是内存真的用完了,因为硬盘速度肯定不如内存快

12.buffer和cache区别 buffer和cache都是内存中的一块区域,当CPU需要写数据到磁盘时,由于磁盘速度比较慢,所以CPU先把数据存进buffer,然后CPU去执行其他任务,buffer中的数据会定期写入磁盘;当CPU需要从磁盘读入数据时,由于磁盘速度比较慢,可以把即将用到的数据提前存入cache,CPU直接从Cache中拿数据要快的多

1.df 判断磁盘使用情况

1.删除文件

rm -r flie 递归删除目录下所有文件,连同该文件夹

1.ifconfig用于查看网卡信息 ifconfig -a 查看所有网络接口及其状态

1.uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信