Linux
Linux
基础
换源加速安装包的下载:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
用户查询
Linux系统中只找到了一个用户登录,而top命令显示有4个用户,这可能意味着其他用户是通过伪终端(例如SSH)登录的,或者是系统服务用户等
-
使用
who命令: 这个命令会显示当前登录系统的用户列表以及其他信息,例如他们正在使用的终端、登录日期和时间以及系统的IP地址或主机名(如果用户位于远程计算机上)。bash
who这个命令可能会显示更多的用户信息,包括远程登录的用户。
-
使用
w命令:w命令显示当前登录用户的信息,包括用户名、登录时间、登录终端等。w这个命令可以提供每个用户的详细活动信息。
-
使用
users命令: 这个命令会列出当前登录的所有用户,不包含其他额外信息。users如果你只需要用户名称列表,这个命令非常有用。
-
使用
finger命令:finger命令可以显示当前系统中登录的用户列表。在某些Linux发行版中,可能需要先安装这个命令。sudo apt install finger finger这个命令提供了用户的详细信息,包括登录时间等。
-
查看
/var/log目录下的日志文件: 有时候,查看系统日志文件也可以帮助你发现登录的用户,特别是对于SSH登录的用户,你可以查看/var/log/auth.log或/var/log/secure文件(取决于你的系统配置)。
文件查询
内容查询
grep指令
磁盘挂载
使用alist连接百度网盘和阿里云盘挂载到本地磁盘_alist挂载百度网盘-CSDN博客
磁盘清理
打开服务器后台,看着磁盘使用率由绿转红,剩余空间捉襟见肘之际,该采用何种措施来稍稍缓解一下存储压力呢?

常用命令
df -h --显示当前磁盘使用情况
cd / --cd到要清理文件的路径下面
find . -type f -size +300M --查找当前路径下大于300M的文件

日志缓存清理
Linux系统上所有【重要】的日志文件都存储在/var/log文件夹中,因此可以使用du命令查看每个文件大小:
du -h /var/log/*
sudo du -h -d 1

可以使用“truncate”命令有效地清理日志文件:
truncate -s 0 /var/log/file_name
也可使用echo命令将指定内容重定向到文件,使用空内容覆盖文件内容:
echo ''>server.out
删除journal下的垃圾文件:
rm -rf /var/log/journal/bcd9481648344a07b557c093f4dfe5ae/
清理~/.cache目录
cd ~/.cache
sudo du -h -d 1
rm -rf 大且不必要保留的软件临时缓存如pip/vscodetool等
清理升级缓存和无用包
# 不推荐执行sudo apt-get autoremove
sudo apt-get autoclean # 删除旧版本软件缓存
sudo apt-get clean # 删除系统内所有软件缓存
无用大文件清理
# 比如存在用户目录下的bag包, tar包等, 通常都比较大. 如果已经过时, 可以清理
find . -type f -size +1G # 查找当前目录下大于1G的文件
find /xxx/ -type f -size +100M # 查找xxx目录下大于100M的文件
rm -rf dirName # 强制删除目录或文件
当清理其他磁盘文件时,系统回收区磁盘会爆炸 直接爆红100占用

docker清理
命令查看有哪些镜像
docker images
删除不需要的镜像
docker rmi image_id
# 或者
docker rmi image_repo:tag
清理无悬挂/无标签的镜像(过程镜像)
docker image prune
查看并删除不需要的容器
docker ps -a
docker rm -f container_id
命令查看所有镜像和容器的大小
docker system df -v
【linux】ubuntu空间清理的9个方法_ubuntu清理空间-CSDN博客
[CentOS 清理系统磁盘空间 - 与时代共同进步 - 博客园](https://www.cnblogs.com/grow-with-the-times/p/17660867.html#:~:text=sudo yum clean all 3.2 删除无用的软件包 sudo yum,3.3 清理旧的内核 sudo package-cleanup --oldkernels --count%3D1 3.4 找到占用磁盘空间最多的文件和目录)
find命令详谈 find [查找路径] [查找条件] [处理动作]
路径 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
匹配条件 中可使用的选项,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符*和?。-type type:按文件类型查找,可以是f(普通文件)、d(目录)、l(符号链接)等。-size [+-]size[cwbkMG]:按文件大小查找,支持使用+或-表示大于或小于指定大小,单位可以是c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或G(GB)。-mtime days:按修改时间查找,支持使用+或-表示在指定天数前或后,days 是一个整数表示天数。-user username:按文件所有者查找。-group groupname:按文件所属组查找。
动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。
find 命令中用于时间的参数如下:
-amin n:查找在 n 分钟内被访问过的文件。-atime n:查找在 n*24 小时内被访问过的文件。-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。-mmin n:查找在 n 分钟内被修改过的文件。-mtime n:查找在 n*24 小时内被修改过的文件。
举例
查找当前目录下名为 file.txt 的文件:
find . -name file.txt
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"
查找 /var/log 目录下在 7 天前修改过的文件:
find /var/log -mtime +7
软件包管理
[apt remove 和 apt purge 卸载软件包-CSDN博客](https://blog.csdn.net/bitcsljl/article/details/141677219#:~:text=apt purge 1 功能: apt purge 命令也用于卸载软件包,但与 apt,示例: sudo apt purge firefox 将卸载 Firefox 浏览器并删除其所有配置文件。)
强制卸载

进程管理
找到并杀掉 Linux 系统中的僵尸进程的命令方法-腾讯云开发者社区-腾讯云
top中的zombie进程

Linux 系统中的进程可能处于如下状态中的一种:
D= 不可中断的休眠I= 空闲R= 运行中S= 休眠T= 被调度信号终止t= 被调试器终止Z= 僵尸状态
权限管理
文件权限
当输入 ls -ll 会获得以下信息

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
-
当为 d 则是目录
-
当为 - 则是文件;
-
若是 l 则表示为链接文档(link file);
-
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
-
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
权限更改
1、chgrp:更改文件属组
语法:
chgrp [-R] 属组名 文件名
参数选项
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件所有者(owner),也可以同时更改文件所属组。
语法:
chown [–R] 所有者 文件名
chown [-R] 所有者:属组名 文件名
3、chmod:更改文件9个属性
chmod [-R] xyz 文件或目录
Umask 用户文件创建模式掩码
-
通过掩码操作,限制新文件和目录的访问权限
-
例如:默认文件权限666,目录权限777
-
如果Umask设置为022,则新文件权限644,新目录权限755
查看 : umask 修改:echo “umask 027” >> ~/.bashrc
source ~/.bashrc
-
用户权限
负载与利用率
Linux系统中负载过高问题的排查思路与解决方案学习笔记_TendCode
性能基础之理解Linux系统平均负载和CPU使用率 - 知乎
Linux Load Averages:什么是平均负载? - 知乎
Load Average(负载平均值)是一个用于衡量系统负载的指标。指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
进程状态代码 R 正在运行或可运行(在运行队列中) D 不间断休眠(通常为IO) S 可中断休眠(等待事件完成) Z 失效/僵尸,终止但未被其父 T 停止,由作业控制停止信号或因为它被追踪 [...]

可运行状态的进程,指的是正在使用CPU或者正在等待CPU的进程,也就是我们常用 ps 命令看到处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程,指的是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如常见是等待硬件设备的 I/O 响应。也就是我们在Ps 命令看到的D状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
因此,我们可以简单理解为,平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。 既然平均的是是活跃进程数,那么理想的是,每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分利用。
以下是单核处理器计算机中不同负载值的含义:
- 0.00:没有任何作业正在运行或等待 CPU 执行,即 CPU 完全空闲。因此,如果正在运行的程序(进程)需要执行任务,它会向 CPU 请求操作系统,并立即为该进程分配 CPU 时间,因为没有其他进程在竞争它。
- 0.50:没有任何作业在等待,但 CPU 正在处理以前的作业,并且它正在以 50% 的容量进行处理。在这种情况下,操作系统还可以立即将 CPU 时间分配给其他进程,而无需将其置于保持状态。
- 1.00:队列中没有作业,但 CPU 正在以 100% 的容量处理先前的作业,因此如果新进程请求 CPU 时间,则必须将其保留到另一个作业完成或当前 CPU 插槽时间(例如,CPU tick)到期,操作系统决定哪一个是下一个给定的进程优先级。
- 1.50:CPU 工作在其容量的 100%,15个工作中有5个请求CPU时间,即 33.33%,必须排队等待其他人耗尽他们分配的时间。因此,一旦超过1.0 的阈值,就可以说系统过载,因为它不能立即处理所请求的 100% 的工作。
如果CPU 每分钟最多处理100个进程,那么系统负载0.2,意味着CPU在这 1 分钟里只处理 20 个进程;系统负载 1.0,意味着 CPU 在这 1 分钟里正好处理 100 个进程;系统负载 1.7,意味着除了 CPU 正在处理的100 个进程以外,还有 70 个进程正排队等着CPU处理。
- CPU 密集型进程,使用大量 CPU 会导致平均负载升高,这时候两者是一致的。
- I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高。
- 大量等待 CPU 的进程调度也会导致平均负载很高,此时的 CPU 使用率也会比较高。
在Linux系统中,Load Average的值可以通过使用uptime命令或命令top来获取。

在top命令中,可以通过查看显示的CPU利用率来判断CPU是否高。top命令的输出包含了有关系统性能的详细信息,其中包括CPU利用率。

CPU总和=100%=us+sy+ni+id+wa+hi+si+st
us表示用户空间程序的CPU使用率。sy表示系统空间程序的CPU使用率。ni表示用于nice操作的CPU使用率。id表示CPU空闲的百分比。wa表示CPU等待I/O的百分比。hi表示硬中断的百分比。si表示软中断的百分比。st表示被偷取(被虚拟化宿主抢占)的时间百分比。
在top命令下,按键盘的1,就可以显示每个CPU的使用数据,键盘q退出。
问题:负载高,但cpu idel也很高
Load高,CPU idle很高,这情况太诡异了-CSDN博客Load高,CPU idle很高,这情况太诡异了-CSDN博客
排查
- Load高一般对应着CPU高,就是CPU负载过大,检查CPU具体执行任务是否合理
- 如果Load高,CPU使用率不高的检查一下IO、网络等是否比较慢
- 如果是虚拟机,检查是否物理机超卖或者物理机其它ECS抢占CPU、IO导致的
- 如果两台一样的机器一样的流量,Load有一台偏高的话检查硬件信息,比如CPU被降频了,QPI,内存效率等等,这个时候可能需要硬件相关同学加入一起排查了,当然牛逼的工程师能把这块也Cover了排查效率自然更高
idle与load
[浅谈cpu.idle和cpu.load - 知乎](https://zhuanlan.zhihu.com/p/165060228#:~:text=CPU利用率主要分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间。 当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。,cpu.idle就是指空闲进程占用时间的比例,即CPU执行空闲的时间 %2F CPU总的执行时间。)
cpu.idle:CPU处于空闲状态时间比例,【CPU利用率主要分为用户态,系统态和空闲态,三者之和就是CPU的总时间。】
cpu.load:特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)
cpu.load评估
如果cpu.load过大则表示有部分线程在等待获得cpu资源,过小表示cpu资源比较空闲。
对于cpu.load多少开始出现性能问题,外界有不同的说法,有的认为cpu.load/cores最好不要超过1,有的认为cpu.load/cores最好不要超过3,有的认为cpu.load不超过2*cores-2即可。
针对技术商服务进行压测时,发现load低时,接口TP999响应时间<50ms,而cpu.load/cores>4时,TP999响应时间约为200ms左右,多出来的时间可以理解为线程等待cpu处理的时间,可见cpu.load/cores过高时是影响接口响应时间的。
因此可以结合预期的接口响应时间,来定义每个服务的cpu.load/cores不超过多少。比如要求接口响应时间尽可能快的,最好确保cpu.load/cores不超过1,而对时间敏感性要求不太高时,一般要求cpu.load/cores不超过3。

top
将top输出保存到文件
用途:记录系统资源使用情况,捕获特定时间段性能进行故障排查,对于没有GUI的远程服务器,辅助分析系统性能
方法一:批处理模式 Batch Mode
-
top -b -n 1 > top_output.txt -b 启动批处理模式,不再以交互式方式显示 -n 1 输出1个采样数据 -
top -b -n 5 -d 5 > top_output.txt -d 5 设置采样时间为5秒。默认3秒 -
echo "-----$(date)-----" >> top_output.txt top -b -n 1 > top_output.txt 添加时间戳信息,有助于识别数据的时间点
方法二:定时任务 Cron
编辑用户当前cron任务: crontab -e
0**** top -b -n 1 >> /var/log/top_output.log
0**** 每小时的第0分钟执行一次 */10**** 每隔10分钟
systemctl status cron
方法三:shell脚本
vim capture_top.sh
#!/bin/bash
output_file="top_output.log"
while true
do
echo "-----$(date)-----" >>$output_file
top -b -n 1 >> $output_file
sleep 5
done
chmod +x capture_top.sh
./capture_top.sh
方法四:script命令
script可以记录用户在终端的所有操作,包括top的输出
script top_session.log
top
exit
压力测试
编译环境搭建
linux:
如何在 Ubuntu 20.04 上安装 GCC(build-essential) - 知乎 (zhihu.com)
linux下gdb的安装及查看方法_gdb安装-CSDN博客
gdb编译错误
Linux下解决./configure ,make,make install的报错_configure错误-CSDN博客
我有理由相信,是gdb的安装版本问题导致的编译不通过
查看ubuntu版本

安装低版本gdb6.0
新鲜出炉的错误
configure: error: can not guess host type; you must specify one
估计是版本太低了,识别不了当前系统,挑个高一点的7.10
依旧是编译错误, 刷到这位大佬的博客后恍然大悟,基于hisilicon的arm平台搭建gdb+gdbserver调试环境_hisilicon arm-CSDN博客
真有可能是gcc格式要求太严格导致不规范的函数写法被毙掉
先尝试大佬给出的解决方案,如果搞不定那就给gcc降版本

在Makefile文件中找了半天,未果,换!

查看当前gcc版本

卸载当前版本并安装,但是我没找到如何指定版本的安装方式
【Ubuntu】gcc g++安装与卸载(专治手残党)_ubuntu20.04卸载g++和gcc-CSDN博客
但是,这不已经安装好了嘛,犯浑了,没必要自己下包传过去自己装
sudo apt-get install gdb
如此,gdb不就o了

vscode:
windows平台中使用vscode远程连接linux进行c++开发配置教程(内容详细适合小白)-2021-3-30-腾讯云开发者社区-腾讯云 (tencent.com)
关于解决Linux(ubuntu) 中不允许root用户ssh远程登录的问题_ssh root 无法登录-CSDN博客
静态IP配置:
新版教程:
VMware虚拟机三种联网方式(图文详细解说)_虚拟机vmware-CSDN博客
如何使用静态 IP 地址 - Netplan documentation
vm8与ip保持一致网段;书写格式一定要注意对齐
巧用dhcp配好网络,ip a查看ip,route查看网关,然后抄上去
旧版教程:
在 Ubuntu 中设置静态 IP——Linux IP 地址教程 (freecodecamp.org)
ubuntu22.04通过netplan配置网络 - 莱纳你坐啊 - 博客园 (cnblogs.com)
https://cn.linux-console.net/?p=1218)
解决 Ubuntu 系统中 “Temporary Failure in Name Resolution“ 错误-CSDN博客
解决:dhcp
测试:注释静态ip,用dhcp进行配置

此时,就可以正常联通外网

几经测试,发现静态路由这条路走不通,dhcp一下就好

问题思索:既然ip都是一致的,是不是网关的问题?

此时,再进行测试,结果很ok

ping: connect: Network is unreachable
虚拟机connect: Network is unreachable 无法联网【已解决】-CSDN博客
armbian系统 华为海纳思 物理机
拓展网口
问题:路由器网口不够用
理论方案:
第一种方法:动态IP方式(第一个路由为主路由,第二个路由为从路由)
1、从路由器插上电,先不要接主路由LAN口,把从路由器复位(恢复出厂);
2、电脑连接从路由器任一LAN 口, 进入设置页面;
3、按照动态I P方式设置;
4、然后再设置一下SSID、加密方式和密码;
5、保存、重启;
6、设置好以后,把主路由LAN 口接出来的网线接在从路由器的WAN口上。
第二种方法:无线AP方式
1、先将电脑连接从路由器的LAN端口,把从路由的IP地址改了。例如多数的路由器地址都是192.168.1.1,我们只要将从路由器IP地址改为192.168.1.10即可;
2、再在设置里将从路由器的DHCP功能关闭;
3、最后将主路由器接出来的网线接在从路由器的LAN端口上(随便哪一个都行),注意不能是WAN端口。
开始操作:
首先将从毕业学长那捡来的路由器上电,用回形针复位
由于从主机入手,把网线从路由器拔下来比较麻烦,尝试使用笔记本加一根不知好坏的网线先尝试
在笔记本端浏览器,输出中国移动的本地管理网址:192.168.10.1
成功进入,默认设置为桥接模式并打开了dhcp
不大明白什么是ssid,百度了一下:
SSID 就是无线路由器或接入点 (AP)为 Wi-Fi 网络起的一个识别名称。
SSID 的长度限制为 32 个字符,而且对大小写敏感。
明白了,就是要设置路由器的名称之类,在无线设置里,将相关数据改写并保存
设备重启,lan口接入wan口
测试成功,拓展完毕,千兆网,没有抽到坏卡,很nice,现在就等物理机到位了
网线制作:
网线有两种做法,一种是交叉线,一种是平行(直通)线
交叉线的做法是:一头采用568A标准,一头采用568B标准
平行(直通)线的做法是:两头同为568A标准或568B标准,(一般用到的都是568B平行(直通)线的做法)
568A标准:白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
568B标准:白橙 橙 白绿 蓝 白蓝 绿 白棕 棕
安装Docker
问题一:mask
Failed to start docker.service: Unit docker.service is masked
表明系统上的 Docker 服务已被禁用或阻止启动。
解决方法:取消屏蔽 Docker 服务
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
运行以下命令验证 Docker 服务是否正在运行:
sudo systemctl status docker.service
问题二:
A dependency job for docker.service failed. See 'journalctl -xe' for details.
systemctl status docker.service返回
systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://docs.docker.com
小tips,输入以下命令,启动docker引擎,然后我就可以开始运行容器
sudo /usr/bin/dockerd -H unix://
给系统添加一个docker组
[root@st01015vm192 ~]groupadd docker
[root@st01015vm192 ~]systemctl enable docker && systemctl start docker
如此,便可以正常启动docker

portainer 面板 用户名 admin 密码 admin*3
青龙面板
docker exec -it qinglong bash #进入qinglong容器
ql check # 检测青龙环境并修复
dockerui 显示一切正常运行,但是IP 显示 172开头的,我是用 N1 的IP 192.168.0.188:5700 无法访问
- docker run --privileged=true -d -p 5700:5700/tcp --ql
青龙面板有什么用 ?https://lzw.me/a/nas-dx4600-qinglong.html
php服务器
PHP Fatal error: Call to undefined function curl_init()的解决方法-php教程-PHP中文网
(找到它的位置:php -i | grep php.ini)

重启php服务器
php-fmp 重启PHP-FPM:如何优雅地重启PHP-FPM服务_php-fpm 重启-CSDN博客
宝塔面板
海纳思系统官方公告 //收费勿扰
【新手导向】使用Docker安装宝塔面板,实现炫酷的服务器可视化面板管理_网络存储_什么值得买 //一键部署
docker run -itd --net=host --restart=always --name baota cyberbolt/baota:latest
- -itd:等同 -i(以交互模式运行容器),-t(为容器重新分配一个伪输入终端),-d(后台运行容器,并返回容器ID)
- --net=host : 容器和主机使用同一网络
- --restart=always:守护进程,容器挂掉将自动重启
- --name baota:容器名称
- cyberbolt/baota:latest:镜像名称(最新版本)

面板链接: http://127.0.1.1:8888
用户名: cyber
密码: abc12345
负载状态(load average)中的数据代表了什么? - Linux面板 - 宝塔面板论坛
自搭建OJ平台
从零开始搭建oj(ubuntu)_搭建oj平台教程-CSDN博客
hustoj: hustoj -- 流行的OJ系统,跨平台、易安装、有题库
#从仓库拉取
git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git
#进入文件夹
cd OnlineJudgeDeploy
#启动docker
docker-compose up -d

ports相关知识

第一个端口是主机端口,第二个端口是远程端口(即容器中的端口)。该表达式将远程端口限制为本地端口。
开启服务器相关端口
80->180 成功进入

**解压文件 ** rar 、 zip
Linux unzip命令教程:如何在Linux中解压.zip文件(附实例详解和注意事项)_unzip命令详解-CSDN博客

Linux 解压 RAR 文件命令(超详细) - 犬小哈教程
汉化oj
#拉取前端文件
git clone https://github.com/QingdaoU/OnlineJudgeFE.git
#进入配置文件
cd OnlineJudgeFE/src/i18n/
#修改配置
vim index.js

#生成dist文件
npm run build
#复制dist文件
cp -r dist/ ~/OnlineJudgeDeploy/data/backend/
#修改配置
vim docker-compose.yml
#重启docker
docker-compose up -d

一些报错
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
yum与apt的异同
Linux中yum与apt有什么区别_linux apt和yum-CSDN博客
- Yum (Yellowdog Updater, Modified):
主要用于基于 Red Hat 系列的发行版,如 RHEL (Red Hat Enterprise Linux)、CentOS、Fedora 等。 - Apt (Advanced Package Tool):
主要用于基于 Debian 系列的发行版,如 Debian、Ubuntu、Linux Mint 等。
免费题库
访问项目FPS下载免费例程。
访问TK题库免费专区
FQ访问谷歌代码存档版,下载老版本 FPS 共享题库。
各大OJ平台题库资源下载 html

浙公网安备 33010602011771号