常见面试题整理—Linux系统常用操作

1. crontab的使用

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user_a 是指设定指定 user_a 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设 定自己的时程表。

基本格式 :
*  *  *  *  *  command
分 时  日  月  周  命令

第1列表示分钟1~59 每分钟用或者 /1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

常用命令:
添加任务: crontab -e
查看任务: crontab -l
删除任务: crontab-d
使用权限 : 所有使用者

crontab 每分钟、每小时、每天、每周、每月、每年定时执行

每五分钟执行 /5 * * * commond

每小时执行 0 * * * * commond

每天执行 0 0 * * * commond

每周执行 0 0 * * 0 commond

每月执行 0 0 1 * * commond

每年执行 0 0 1 1 * commond

下面通过一些例子直观学习下:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart 

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 

上面的例子表示每星期六的23 : 00 pm重启apache。

* */1 * * *   /usr/local/etc/rc.d/lighttpd restart 

每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 

一月一号的4点重启apache

2.关闭sendmail服务,这里介绍一种不用关闭sendmail服务的方法

vim /etc/profile
将 unset MAILCHECK 加到文件最后
source /etc/profile
(但是试过之后没效果)

3.查找文件内容

查找当前目录下所有文件,将含有’test’的文件列出
grep ‘test’ *

4.查看硬盘的使用情况及文件目录大小命令

查看文件系统各个硬盘大小
df -a 列出所有的文件系统
df -k 以K为单位显示
df -h 以人性化单位显示,可以是b,k,m,g,t..

查看目录的大小
du -sh dirname
-s 仅显示总计
-h 以K、M、G为单位,提高信息的可读性。KB、MB、GB是以1024为换算单 位, -H以1000为换算单位。

例:du -sh /www
查看www文件夹大小

5.screen 命令详解

背景
作为程序员一定会用到linux系统,经常打开多个shell,运行一些需要很长时间才能完成的任务,通常情况下我们都是为每一个这样的任务开一个终端窗口,必须等待它们执行完毕,在此期间不能关掉窗口,否则这个任务就会被杀掉。
简介
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能
常用的screen 命令
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

常用快捷键组合
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a d -> detach,暂时离开当前session,将目前的 screen session丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个screen内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
exit 关闭当前session

6.服务器之间复制文件

scp是securecopy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器
,而且scp传输是加密的,可能会稍微影响一下速度。

一般有6中用法:
1)本地复制远程文件(把远程的文件复制到本地):
scp [email protected]:/val/test/test.tar.gz /val/test/test.tar.gz

2)远程复制本地文件(把本地的文件复制到远程主机上):
scp /val/test.tar.gz [email protected]:/val/test.tar.gz

3)本地复制远程目录(把远程的目录复制到本地;参数 r 递归复制):
scp -r [email protected]:/val/test/ /val/test/

4)远程复制本地目录(把本地的目录复制到远程主机上):
scp -r /val/ [email protected]:/val/

5)本地复制远程文件到指定目录(把远程的文件复制到本地):
scp [email protected]:/val/test/test.tar.gz /val/test/

6)远程复制本地文件到指定目录(把本地的文件复制到远程主机上):
scp /val/test.tar.gz [email protected]:/val/

7.查看CPU 机器型号 内存等信息

系统

uname -a # 查看内核/操作系统/CPU信息
cat /proc/cpuinfo # 查看CPU信息
hostname # 查看计算机名
env # 查看环境变量
lsb_release -a #即可列出所有版本信息
cat /etc/issue #查看版本信息

资源

free -h # 查看内存使用量和交换区使用量
df -h # 查看各分区使用情况
du -sh <目录名> # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载

磁盘和分区

mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区
hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE # 查看启动时IDE设备检测状况

网络

ifconfig # 查看所有网络接口的属性
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息

进程

ps -ef # 查看所有进程
top # 实时显示进程状态

用户

w # 查看活动用户
id <用户名> # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd  #系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务用户

8.关闭防火墙

systemctl stop firewalld.service
关闭开机启动: systemctl disable firewalld.service
查看防火墙状态: systemctl status firewalld.service

9.ssh 远程登陆

ssh [email protected]

10.主机名相关

查看: hostnamectl status
修改: hostnamectl set-hostname “storage_node1”

10.挂载硬盘
mount -t ext3 -o rw /dev/sdb1 /newfile #挂载硬盘
-t 跟磁盘格式 可以省略 系统会自动检测一下
-o 跟挂载方式 rw 可读可写
/newfile 这是硬盘分区挂载的目录,可以随意变换

11.lsof 使用以及修改系统进程打开的文件数限制

该命令用于查看进程或应用程序打开的文件描述符信息
输出信息
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

其中FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,其次数值表示应用 程序的文件描述符,这是打开该文件
时返回的一个整数。
u 表示该 文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W表示该应用程序具有对整个文件
的写 锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到
2, 分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;
或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。

lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g (-p)gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况

lsof -p 进程PID 查看某特定进程打开的文件描述符
lsof -a -p PID -d txt 筛选文件描述符为 txt的记录 参数 -a(and的意思)表示筛选两个参数均满足的记录
lsof /home/test.py 查找打开某个文件的应用程序
lsof |grep 33872 |wc -l 统计某进程打开的文件描述符的数量

查看本次登陆的session其文件描述符的限制
ulimit -n
临时修改文件描述符的限定,可以通过 ulimit。
ulimit -SHn 2048
永久变更需要编辑 /etc/security/limits.conf 文件,添加如下两行:
在/etc/security/limits.conf修改限制的格式如下
domino type item value
参数 描述
domino 是以符号@开头的用户名或组名,*表示所有用户
type 设置为hard or soft
item 指定想限制的资源。如cpu,core nproc or maxlogins
value 是相应的
* hard nofile 4096
* soft nofile 4096

保存退出后重新登录,其最大文件描述符已经被永久更改了

内核参数对文件描述符也有限制,如果设置的值大于内核的限制,也是不行的:
查找file-max的内核参数:
sysctl -a|grep file-max
更改file-max的内核参数:
sysctl -w file-max=65535
Sysctl也是临时的,要想永久生效,可以通过更改sysctl的文件,编辑/etc/sysctl.conf文件,添加或修改以下一行:
fs.file-max=65535
保存退出后使用sysctl -p 命令使其生效

需要注意的是,文件描述符的限制,不局限于这里描述的这些,还可能和进程的启动参数、用户的环境设置有关。当然,如果是进程
BUG造成文件描述符没有及时关闭回收,这增大限制也只是治标,根本上还得修复BUG。
此外,lsof会列出系统中所占用的资源,但是这些资源不一定会占用打开的文件描述符(比如共享内存,信号量,消息队列,内存映射.等
,虽然占用了这些资源,但不占用打开文件号),因此有可能出现cat /proc/sys/fs/file-max 的值小于lsof | wc -l。

cat /proc/sys/fs/nr_open
单个进程可分配的最大文件数
cat /proc/sys/fs/file-max
内核可分配的最大文件数

所有进程打开的文件描述符数不能超过 /proc/sys/fs/file-max
单个进程打开的文件描述符数不能超过 user limit中 nofile的 soft limit
nofile的soft limit不能超过其hard limit
nofile的hard limit不能超过/proc/sys/fs/nr_open

12.修改系统时间

Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。

系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在
BIOS中进行设置。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
Linux中的所有命令(包括函数)都是采用的系统时钟设置。在Linux中,用于时钟查看和设置的命令主要有date、hwclock。

date –s:按字符串方式修改时间
可以只修改日期,不修改时间,输入:

date -s 2007-08-03

只修改时间,输入:

date -s 14:15:00

同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:

date -s   "2007-08-03 14:15:00"

查看硬件时间
hwclock
设置硬件时间
hwclock -set -date=”07/07/06 10:19” (月/日/年 时:分:秒)
硬件时间和系统时间的同步
按照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock命令实现同步。
硬件时钟与系统时钟同步:
hwclock –hctosys (hc代表硬件时间,sys代表系统时间)
系统时钟和硬件时钟同步:(让系统的时间同步到硬件时钟)
hwclock -w ––systohc

13.压缩文件

tar -zcvf /home/sms.tar.gz /sms
tar -zcvf [打包后生成的文件名全路径] [要打包的目录]

zip -q -r sms.zip /home/sms -q 表示安静模式(在压缩的时候不显示指令的执行过程) -r表示递归
zip [参数] [打包后的文件名] [打包的目录路径]

14. 查看是否安装某软件

rpm -qa|grep soft_name

## 15.测试硬盘的IO
硬盘读取速度
time dd if=/var/test of=/dev/null bs=2k
hdparm -T /dev/sda

硬盘写入速度
time dd if=/dev/zero of=/test.dbf bs=8k count=300000
(在 根目录 / 下面会生成临时文件,记得删除)

你可能感兴趣的:(面试知识点)