Linux韩顺平

Linux是内核

主要发行版:Ubuntu、Redhat、CentOS

前置准备:

  1. 下载安装VMWare15.5

  2. 下载安装虚拟机CentOS7.6(GNOME桌面 选 开发工具、传统X Windows系统的兼容性、兼容性程序库)

    image-20221011163644501

VMware部分

  1. 虚拟机克隆
  2. 虚拟机快照
  3. 虚拟机迁移:直接拷贝虚拟机的文件夹即可
  4. 虚拟机删除:在VMware移除,再删除虚拟机的文件夹

​ 安装vmtools

image-20221011164225094

​ 设置共享文件夹

image-20221011164533795

linux目录

image-20221011170821773

远程登录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 不保存退出
  • 格式化
    • 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文件解析

image-20221014171733788

主机名

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:按从大到小进行排序

image-20221017110859078

题目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

image-20221017105522893

问题3:如忘记了mysql5.7 数据库的 ROOT 用户的密码,如何找回? (滴滴)

  1. vim etc/mysql.cnf

  2. 添加一条命令用于跳过权限表

    skip-grant-tables

    image-20221017111816056
  3. 重启服务:service mysqld restart

  4. mysql -u root -p,输入空密码即可进入

  5. 改密码:

    1. use mysql; 进入mysql数据库
    2. use user; 进入user表
    3. update user set authentication_string=password("mima") where user="root"; 修改表中的authentication_string字段
  6. flush privileges; 刷新权限

  7. vim /etc/mysql.cnf 把skip-grant-tables注释掉

  8. service mysqld restart

  9. 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 系统权限划分时,应考虑哪些因素?(腾讯)

image-20221017132834845
  1. 注意权限分离,linux系统权限和数据库权限不要在同一部门

  2. 权限最小原则(即:在满足使用的情况下最少优先)

  3. 减少使用root用户,尽量使用普通用户+sudo提权进行日常操作

  4. 重要的文件系统,比如/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

  5. 可以使用chkrootkit检测rootkit脚本(rootkit是入侵者工具,在不察觉的情况下建立入侵系统途径)

题目8:

image-20221017133459342

题目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 中无序的一列数字排序, 并将总和输出(百度)

image-20221017150648013

题目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

posted @   小明吖  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示