Linux韩顺平
Linux是内核
主要发行版:Ubuntu、Redhat、CentOS
前置准备:
-
下载安装VMWare15.5
-
下载安装虚拟机CentOS7.6(GNOME桌面 选 开发工具、传统X Windows系统的兼容性、兼容性程序库)
VMware部分
- 虚拟机克隆
- 虚拟机快照
- 虚拟机迁移:直接拷贝虚拟机的文件夹即可
- 虚拟机删除:在VMware移除,再删除虚拟机的文件夹
安装vmtools

设置共享文件夹

linux目录

远程登录Linux和远程传输(下载安装在Windows主机上)
-
前提:主机和虚拟机能够ping通
-
Xshell6:远程登录Linux工具
-
Xftp6:远程上传下载工具
vim快捷键
一般模式
复制yy,多行复制5yy,粘贴p
删除dd,多行删除5dd
搜索/
首行shift+g,尾行gg,第5行5 shift+g
撤销u
编辑模式
命令模式
行号set nu,取消行号set nonu
shutdown -h now 立刻关机
shutdown -h 1 1分钟后关机
reboot 重启
sync 把内存的数据写入到磁盘(建议关机重启前执行)
id jack 查看用户jack信息
useradd jack 创建新用户
useradd -d /home/test jack 创建新用户jack,同时将test文件夹指定为家目录
userdel jack 删除jack用户,但保留家目录
userdel -r jack 删除jack用户和家目录
passwd jack 给jack用户设置密码
groupadd staff 创建新组
groupdel staff 删除组
usermod -g manager jack 修改用户的组
useradd -g staff jack 创建用户的同时指定组
运行级别
0:单用户(找回丢失密码)
3:命令行界面
5:图形界面
init 3:切换级别
multi-user.target:默认级别3(systemctl set-default multi-user.target)
graphical.target:默认级别5
systemctl get-default:查询当前运行级别
文件目录命令
pwd 当前目录的绝对路径
ls 搜索文件
-a 所有文件
-l 文件的详细信息
cd 切换目录
cd ~ 回到当前用户的家目录
cd .. 回到上一级
mkdir 创建目录
mkdir cat
-p 创建多级目录 mkdir -p /home/animal/dog
touch 创建文件
touch a.txt
touch {a,b,c,d}.txt 一次创建多个类似文件
rm 删除
删除文件 rm a.txt
-r 删除目录 rm -r /home/animal
-f 强制删除不提示 rm -rf /home(删库跑路)
cp 拷贝
cp 源文件 目标文件
cp -r 源目录 目标目录
cp \cp -r 源目录 目标目录 强制覆盖,不提醒
mv 移动文件目录和文件重命名
mv /home/a.txt /home/jack/a.txt 移动文件
mv a.txt b.txt 重命名
cat 查看文件(可以配合管道符|)
-n 显示行号
more 可以配合cat,也可以单独使用来查看文件
less 用来查看文件,跟more差不多,是动态加载文件的,适合用来查看大型文件
/ 搜索字符
echo 输出内容到控制台
echo "hello world~"
echo $HOSTNAME 输出环境变量
head 输出文件头部内容
head -n 5 a.txt 输出前5行
tail 输出文件尾部内容
tail -n 5 a.txt
-f 实时监控文件的变化 tail -f a.txt
> 重定向 >>追加
ln 软链接
ln -s 源文件 链接文件 ln -s root /home/myroot
history 查看历史命令
history 10 查看最近10条指令
date 显示当前日期
date 当前时间
date "+%Y-%m-%d" 当前年月日
date -s "2022-10-12 20:20:20" 设置系统时间
cal 查看日历
cal 2020 查看一年的日历
find 搜索目录及其子目录
find /home -name *.txt 按文件名查找
find /home -user root 按用户查找
find /home -size +200M 按文件大小查找(+大于 -小于 =等于)
locate 定位文件的路径(定时更新locate数据库)
updatedb 先创建locate数据库
locate a.txt
grep和管道符|
-n 显示行号
-i 忽略大小写
cat /home/a.txt | grep -ni hello
tar 打包
tar zcvf ab.tar.gz a.txt b.txt 打包压缩
tar zxvf ab.tar.gz -C /home/tmp 解压解包到指定位置
组
chown 修改文件所有者
chown 用户名 文件名 chown jack a.txt
chown -R 用户名 目录名 chown -R jack /home/test 把目录下所有文件的所有者改为jack
chgrp 修改文件所在组
chgrp 组名 文件名 chgrp root a.txt
chgrp -R 组名 目录名 chgrp -R staff /home/test 将test目录下的所有文件和目录的所有组都改为staff
组
groupadd staff
groupddel staff
用户
useradd jack
userdel jack
useradd -g staff jack 创建用户并将其添加到指定组
usermod -g staff jack 修改用户的组
权限
r=4 w=2 x=1
chmod 751 文件/目录名(PS:目录权限,test组用户A要修改test组用户B家目录下的文件,得先拥有B家目录的读写权限) chmod 751 /home/a.txt
文件的rwxx权限
r:查看文件内容
w:修改文件内容,但不能删除文件
x:执行文件
目录的rwx权限
r:可以查看目录有什么文件
w:可以添加删除文件
x:可以进入目录,修改已有文件的内容
定时任务调度
可以定时执行单条命令,也可以将多条命令写到shell脚本,然后定时执行脚本(执行脚本是要注意脚本有没有执行权限)
crontab
-e 编辑crontab定时任务
-l 查询定时任务
-r 删除当前用户的所有定时任务
service cron restart 重启任务调度
编辑
* * * * * 从第一个到第四个*分别是分时日月,第五个*是星期几
, 代表不连续时间
- 代表连续时间范围
*/10 代表每隔多久
*/10 4 * * * ll >> home/to.txt 每天4点钟时每隔10分钟执行一次命令
0 5 1,15 * * ll >> home/to.txt 每月的1号和15号的5点整执行命令
50 5 * * 1-5 ll >> home/to.txt 每周一到周五的5点50分执行命令
一次性定时任务
at 时间
ps -ef | grep atd 先检查atd是否在运行
at 时间 at now + 5 hours 5小时后执行(minutes、days、weeks)
at 04:00 2022-12-12 指定时间
at 5pm tomorrow
Ctrl+d 结束输入
atq 查询所有任务
atq 编号 删除某个任务
Linux分区
lsblk 查询挂载的情况
-f 查询详细信息
添加挂载硬盘和新增分区
- 虚拟机添加硬盘
- 分区
- fdisk /dev/sdb(看是第几个磁盘)
- m 显示命令列表
- n 新增分区(P是主分区,e是扩展分区)
- w 写入并退出
- d 删除分区
- q 不保存退出
- fdisk /dev/sdb(看是第几个磁盘)
- 格式化
- mkfs -t ext4 /dev/sdb1 格式化命令,而ext4是分区类型
- 挂载
- mount /dev/sdb1 /home 挂载在home目录下
- 卸载
- umount /dev/sdb1 卸载命令
- 设置自动挂载
- vim /etc/fstab 修改这个设备文件(好像不能自动挂载在/根目录下,手动就可以)
df -h 查询磁盘使用情况
ls -l /home | grep "^-" | wc -l 显示home下文件的个数
tree /home 以树状显示目录,tree指令要安装:yum install tree
修改静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改内容:
BOOTPROTO=static
IPADDR=192.168.200.130
GATEWAY=192.168.200.2
DNS1=192.168.200.2
ens-33文件解析

主机名
hostname 查询主机名
vim /etc/hostname 修改主机名
通过hosts映射ping通
- Windows主机
修改C:\Windows\System32\drivers\etc\hosts文件指明ip地址和主机名的映射关系
192.169.2.1 xiaoming
- Linux机器
修改 /etc/hosts 文件指明
192.168.2.130 admin
hosts是记录ip和hostname(主机名)的映射
DNS是记录域名和ip映射的分布式数据库
进程
ps 查看系统进程 ps -aux
-a 所有进程
-u 当前用户的进程信息
-x 后台运行的进程
ps -ef 全格式显示所有进程信息(PID进程号,PPID父进程号)
pstree 以树状显示进程 pstree -pu
-p 显示进程号
-u 显示进程所属用户
动态监控进程
top
-d 秒数 每隔几秒更新,默认是3秒
-i 不显示闲置或僵死的进程
-p 指定进程ID来监控某个进程的状态
P按cpu使用率排序,M按内存使用率排序,N按PID排序,q退出top,u查看某用户的进程,k杀死进程
杀死进程
kill 进程号 kill 11421
killall 进程名(杀死所有相关的进程,包括子进程) killall gedit 杀死记事本
kill -9 进程号 (强制杀死进程)
服务(Service)管理
管理服务状态(临时的): systemctl [start|stop|reload|status] 服务名
查看systemctl指令:/usr/lib/systemd/system
查看所有服务的开机启动状态 systemctl list-unit-files
设置服务开机启动(永久的) systemctl enable 服务名
关闭服务开机启动(永久的) systemctl disable 服务名
查询某个服务是否开启自启动 systemctl is-enable 服务名
打开关闭指定端口
打开端口:filewall-cmd --permanent --add -port=端口号/协议
关闭端口:filewall-cmd --permanent --remove -port=端口号/协议
重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口号/协议
监控网络状态
netstat
-an 按一定顺序排列输出
-p 显示哪个进程在调用
rpm包(本地安装包)
查询已安装的安装包:rpm -qa | grep firefox
查询软件包是否安装:rpm -q firefox
查询软件包信息:rpm -qi firefox
删除rpm包:rpm -e firefox
强制删除rpm包:rpm -e --nodeps firefox
安装rpm包:rpm -ivh rpm安装包(在挂载光盘的packages里)
i:install 参数说明
v:verbose 提示
h:hash 进度条
yum(外网安装)
查询yum服务器是否有需要的软件:yum list | grep firefox
下载安装软件:yum install firefox
Linux备份与恢复
yum -y install dump
yum install restore
备份
dump
-c[0 - 9]:备份的层级,0为最完整备份,会备份所有文件。若指定0以上的层级,则备份上一次备份以来修改或新增的文件,到9之后,可以再次轮替。
-f:指定备份后的文件名
-j:调用bz2压缩,让文件更小
-u:备份完毕后,在etc/dumpdares中记录备份的文件系统,层级,日期和时间
dump -0uj -f /opt/boot/back0.bz2 /boot/ 备份/boot分区
dump -1uj -f /opt/boot/back1.bz2 /boot/ 增量备份/boot分区(备份文件或目录时不支持增量备份)
dump -W 查看最后一次备份的信息
cat /etc/dumpdates 查看所有备份的时间
恢复
restore [模式选项] [选项]
模式选项
-C:对比模式,将备份文件和系统已存在文件进行对比
-i:交互模式,在进行还原操作时,restore指令将依序询问用户
-r:还原模式,如果有增量备份要依次恢复增量备份文件
-t:查看模式,查看备份文件中有哪些文件
选项
-f:从指定的文件中读取备份数据,进行还原操作
restore -C -f boot.back1.bz2
restore -t -f boot.back1.bz2
restore -r -f boot.back0.bz2;restore -C -f boot.back1.bz2
面试题
题目1:分析日志 .log(访问量),将各个 ip 地址截取,并统计出现次数,并按从大到小排序(腾 讯)
cut指令:按 / 进行划分,取第三段
关于uniq -c 统计:uniq -c只统计相邻行的重复情况,所以要先进行排序
sort -nr:按从大到小进行排序
题目2:统计连接到服务器的各个 ip 情况,并按连接数从大到小排序 (腾讯)
netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr
也可以这样写:
netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr
cut指令不能分割空格,awk可以。
awk -F " " '{print ¥5}' 按空格分割,取第五段
uniq -c:统计有几个ip
问题3:如忘记了mysql5.7 数据库的 ROOT 用户的密码,如何找回? (滴滴)
-
vim etc/mysql.cnf
-
添加一条命令用于跳过权限表
skip-grant-tables
-
重启服务:service mysqld restart
-
mysql -u root -p,输入空密码即可进入
-
改密码:
- use mysql; 进入mysql数据库
- use user; 进入user表
- update user set authentication_string=password("mima") where user="root"; 修改表中的authentication_string字段
-
flush privileges; 刷新权限
-
vim /etc/mysql.cnf 把skip-grant-tables注释掉
-
service mysqld restart
-
mysql -u root -p mima 使用root用户进入mysql
题目4:统计 ip 访问情况,要求分析 nginx 访问日志(access.log),找出访问页面数 量在前 2 位的 ip(美团)
cat access.log | awk -F " " '{print $1}' | sort | uniq -c | sort -nr | head -2
题目5:使用 tcpdump 监听本机, 将来自 ip 192.168.200.1,tcp 端口为 22 的数据,保存输出到 tcpdump.log , 用做将来数据分析(美团)
tcpdump -i ens33 host 192.168.200.1 and port 22 >> tcpdump.log
ens33 监听的网络设备
题目6:常用的Nginx模块,用来做什么(头条)
rewrite模块:实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module:模块实现代理
mgx_http_upstream_module:模块实现定义后端服务器列表
ngx_cache_purge:实现缓存清理功能
题目7:如果你是系统管理员,在进行 Linux 系统权限划分时,应考虑哪些因素?(腾讯)

-
注意权限分离,linux系统权限和数据库权限不要在同一部门
-
权限最小原则(即:在满足使用的情况下最少优先)
-
减少使用root用户,尽量使用普通用户+sudo提权进行日常操作
-
重要的文件系统,比如/etc/pwasswd, /etc/sudoers等,日常建议使用chatter(change attribute)锁定,需要操作时再解锁。
chatter锁定:chatter +i /etc/passwd
chatter解锁:chatter -i /etc/passwd
锁定后还可以把chatter命令改名并移到其他地方:
mv /opt/ca /usr/bin/chatter 移到opt目录下并改名ca
-
可以使用chkrootkit检测rootkit脚本(rootkit是入侵者工具,在不察觉的情况下建立入侵系统途径)
题目8:
题目9:列举 Linux 高级命令,至少 6 个(百度)
netstat 网络状态监控
top 系统运行状态
find 查找
ps -aux 查看运行进程
chkconfig 查看服务启动状态
systemctl 管理系统服务器
题目10:Linux 查看内存、io 读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)
查看内存:top
io读写:iotop
磁盘存储:df -h
端口占用:netstat -tunlp
进程查看:ps -aux
题目11:使用 Linux 命令计算 t2.txt 第二列的和并输出 (美团)
张三 40
李四 50
王五 60
cat t2.txt | awk -F " " '{sum +=$2}END{print sum}'
题目12:Shell 脚本里如何检查一个文件是否存在?并给出提示(百度)
if [ -f 文件名 ] then echo "存在" else echo "不存在" fi
题目13:用 shell 写一个脚本,对文本 t3.txt 中无序的一列数字排序, 并将总和输出(百度)
题目14:请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符 “cat” 的文件名称(金山)
grep -r "cat" /home | cut -d ":" -f 1
题目15:请写出统计/home 目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展)
find /home -name "* . *" | wc -l 统计所有文件的个数
find /home -name "* . *" |xargs wc -l 统计所有文件总行数
题目16:列出你了解的web 服务器负载架构(滴滴)
Nginx
Haproxy
Keepalived
LVS
题目17:每天晚上 10 点 30 分,打包站点目录/var/spool/mail 备份到/home 目录下(每次备份 按时间生成不同的备份包 比如按照 年月日时分秒)(滴滴)
思路:写个shell脚本,然后给crontab定时执行
shell脚本mail.sh:
cd /var/spool && /bin/tar zcf /home/mail -'date "+%Y-%m-%d"'.tar.gz mail
mail.sh文件增加执行权限
crontab -e:
30 22 * * * /opt/mail.sh
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库