Linux的一些个人记录

前言

记录一下日常接触到以及学习到的一些关于Linux的知识

网络

常见的Linux发行版的网卡配置文件存放位置:

1、Ubuntu / Debian:

1
2
/etc/network/interfaces
sudo systemctl restart networking #重启网络命令

Ubuntu 18.0.4开始,Ubuntu和Debian移除了以前的ifup/ifdown命令和**/etc/network/interfaces配置文件,转而使用ip link set或者/etc/netplan/01-netcfg.yaml**模板和sudo netplan apply命令实现网络管理。

1
2
3
4
5
netplan generate  #生成后端管理工具对应的配置
netplan apply #应用配置,必要时重启管理工具
netplan try #在配置得到确认之后才应用,如果配置存在错误,则回滚
netplan get #获取当前netplan配置
netplan set #修改当前netplan配置

2、CentOS / RHEL 7及更早版本:

1
2
/etc/sysconfig/network-scripts/ifcfg-<interface>
sudo service network restart #重启网络命令

3、CentOS / RHEL 8及更新版本:

1
2
/etc/sysconfig/network-scripts/ifcfg-<interface>
sudo systemctl restart NetworkManager #重启网络命令

4、Fedora:

1
2
/etc/sysconfig/network-scripts/ifcfg-<interface>
sudo systemctl restart NetworkManager #重启网络命令

5、Arch Linux:

1
2
/etc/netctl/<profile>
sudo systemctl restart netctl #重启网络命令

Linux虚拟机添加网卡却找不到网卡配置文件

1.使用vmware给虚拟机额外增加一个新的网卡时,在虚拟机使用ip addr查看,多了一个ens224网卡信息,但是在配置目录**/etc/sysconfig/network-scripts**里没有发现对应的ens224配置文件

image-20240719074626067

2.查看网卡配置信息

1
2
nmcli con show
nmcli connection reload

trick:centos系统如果报错提示:NetworkManager is not running,意思是NetworkManager未在运行,NetworkManager是Linux系统上管理网络设置的守护进程,负责自动处理和配置网络连接,未运行可能会导致网络连接问题,解决方法是:

1.启动NetworkManager服务命令

1
sudo systemctl start NetworkManager

设置服务开机自启

1
sudo systemctl enable NetworkManager

2、如果服务已经启动但仍然出现问题,尝试重新启动服务,命令:

1
sudo systemctl restart NetworkManager

3、检查NetworkManager状态,确认服务正在运行,命令:

1
sudo systemctl status NetworkManager

4、如果服务无法启动,检查日志以诊断问题,命令:

1
journalctl -u NetworkManager

3.生成网卡信息

1
nmcli con add con-name ens224 type ethernet ifname ens224

会自动生成一个ifcfg-ens224配置文件

查看网卡配置文件,发现已经有了

1
ll /etc/sysconfig/network-scripts/ | more

image-20240719074848622

4.修改网卡配置

1
vi /etc/sysconfig/network-scripts/ifcfg-ens224

5.重启网络

1
2
systemctl restart network
ip addr

配置完成。

防火墙

1.centos/Fedora?RHEL使用firewalld防火墙:

1
2
systemctl stop firewalld  #暂时关闭
systemctl disable firewalld #禁止开机启动

2.Ubuntu/Debian使用ufw防火墙:

1
2
ufw disable  # 暂时关闭
systemctl disable ufw #禁止开机启动

3.SUSE使用SuSEfirewall2防火墙:

1
2
systemctl stop SuSEfirewall2  #暂时关闭
systemctl disable SuSEfirewall2 #禁止开机启动

要想临时关闭防火墙,取决于使用的是那个防火墙服务,例如:

1.iptables(基于轮询的防火墙)

1
2
service iptables stop 或者 systemctl stop iptables #临时关闭
编辑 /etc/sysctl.conf,注释掉net.ipv4.ip_forward=1,然后重启系统 #永久关闭

2.ufw(简单易用的图形界面工具)

1
2
ufw disable  #临时关闭
删除/etc/ufw/ufw.conf,然后重启ufw服务 ufw restart && ufw reload #永久关闭

3.firewall(动态防火墙):

1
2
firewall-offline-cmd stop  #临时关闭
systemctl stop firewalld并设置为不自动启动 systemctl disable firewalld #永久关闭

使用firewall-cmd开放指定端口的命令

1
2
firewall-cmd --zone=public --list-ports  #查看public所有打开端口
firewall-cmd --zone=public --add-port=80/tcp(永久生效再加上 --perment)

常用命令

查找

当前目录下查找带有”password”的php文件

1
2
3
4
5
6
7
8
9
10
11
find . -name ".php" | xargs grep -i "password"

要在 Linux 的 /www/wwwroot/testing-2th.ns 目录下搜索文件内容包含 access_key_id 的命令,你可以使用 grep 命令。请在终端中运行以下命令:

grep -rn '/www/wwwroot/testing-2th.ns' -e 'access_key_id'
这个命令的参数解释如下:
-r:递归搜索目录及其子目录。
-n:显示匹配行的行号。
'/www/wwwroot/testing-2th.ns':要搜索的目录路径。
-e 'access_key_id':要搜索的字符串(在这里是 access_key_id)。
这个命令将返回所有包含 access_key_id 的文件列表。

查看时区

1
cat /etc/timezone 或 timedatactl

查看linux内核版本

1
uname -srm 或 hostnamectl 或 cat /proc/version

查看linux发行版本

1
cat /etc/issue 或lsb_reloease -a 或 cat /etc/redhat-release

套件管理命令

1
2
3
4
# 显示软件安装信息
rpm -qi dejagnu-1.4.2-10.noarch.rpm
# 安装软件
rpm -hvi dejagnu-1.4.2-10.noarch.rpm

查看命令

1
2
3
4
cat xxx.txt
more xxx.txt #逐页阅读,空格下一页,b返回上一页
head -n 2 xx.txt #查看前两行
tail -n 3 ca.* #查看ca开头的文件的后3行

linux查看有哪些服务

1
2
3
4
5
6
7
8
9
方法1:service --status-all  # 执行以下命令可查看Linux所有服务的运行状态

方法2:chkconfig --list # 可以列出系统的所有服务

方法3:ps aux # 执行以上命令可以查看系统中所有的进程

方法4:cd /etc/init.d # 进入init.d目录查看

方法5:netstat -lntp # 使用netstat命令

linux查看一个服务的安装路径

1.ps -u 系统用户名

image-20240726191759949

2.进入linux的进程目录**/proc**,执行ls -l ,可以看到对应的进程目录,结果如下图所示

image-20240726191832290

3.进入30058这个进程目录,执行 ls -l, 结果如下:

image-20240726191853237

压缩命令

1.压缩当前目录下文件夹/文件test到test.tar.gz:

1
tar -zcvf test.tar.gz test

2.解压缩当前目录下的file.tar.gz到file:

1
tar -zxvf file.tar.gz

查看Linux 系统启动时自动执行的脚本文件

/etc/rc.local 是传统的系统初始化脚本

临时关闭SELinux和永久关闭的方法(有可能影响服务)

1
2
3
4
5
6
7
8
9
10
# 获取当前selinux状态,Enforcing为开启,Permissive为关闭
getenforce
# 临时关闭
setenforce 0

#永久关闭selinux
vim /etc/sysconfig/selinux
# ELINUX=enforcing 替换为 SELINUX=disabled
#重启后
sestatus #查看SELinux状态

账户管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
id		#打印用户的UID和GID,root组的GID号是:0,bin组GID号是:1,daemon组GID号是:2,sys组GID号是:3
passwd #后单跟用户名跟改密码
-l #锁定用户不能跟改密码
-d #清除用户密码
-S #查询用户密码状态

useradd #添加用户,-d指定家目录,-g指定主要组,-G指定次要组,-s指定缺省shell
groupadd #添加组,-g指定组ID
usermod #修改用户信息,-e有效期,-f宽限天数,-l账户名称,-L锁定用户,-u修改用户ID
userdel #删除用户,-f强制删除 即使用户已登录,-r同时删除用户相关所有文件
groupdel #删除工作组

#账户信息文件:/etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码:用户ID:组ID:用户说明(描述):用户主(家)目录:缺省shell(登陆后的shell)
注意:无密码只允许本机登陆,远程不允许登陆

#账户密码文件:/etc/shadow
root:$Gs1qhL2p3ZetrE4.kMHx6qgbTcjQSt.Ft7ql1WpkopY/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:
密码有效期:密码到期的警告天数:密码过期宽限天数:账号失效时间:保留

#组账户信息文件:/etc/group
root:x:0:
组名:口令:组标识号:组内用户列表

who #查看当前登录用户(tty本地登陆 pts远程登录)
w #查看系统信息,想知道某一时刻用户的行为
uptime #查看登陆多久、多少用户,负载

文件权限

1
2
3
xxxxxxxxxx drwx-rwx-rwx #d代表目录、读、写、执行(4、2、1) -> user、group、other -> 所有者用户、组、其他用户的权限
chmod #改变文件和目录权限
chown #改变文件和目录所有者和组

进程监控PS

1
2
3
4
5
6
7
8
#grep表示在这些里搜索,而ps aux是显示所有进程和其状态
ps aux | grep amoeba #查到amoeba的进程
kill -s 9 pid #杀死进程


a #显示现行终端机下的所有程序,包括其他用户的程序
u  #以用户为主的格式来显示程序状况。
x  #显示所有程序,不以终端机来区分

Linux上进程有5种状态:

  1. 运行 (正在运行或在运行队列中等待)
  2. 中断 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断 (收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死 (进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止 (进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps aux输出格式:

1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

格式说明:

USER: 行程拥有者

1
PID: pid

%CPU: 占用的 CPU 使用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态,linux的进程有5种状态:

  • D 不可中断 uninterruptible sleep (usually IO)
  • R 运行 runnable (on run queue)
  • S 中断 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (”zombie”) process

注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页)

START: 行程开始时间

TIME: 执行的时间

COMMAND:所执行的指令

ssh连接

SSH连接需要处理的几个问题:

1.网络问题,需要修改网卡信息;

2.防火墙,需要关闭或开放端口;

3./etc/hosts.deny被设置了黑名单,在**/et/hosts.allow中修改,追加sshd:xx.xx.xx.xx:allow或者将sshd:x.x.x.x:deny注释一行,或者注释所有规则并添加sshd:all:allow**;

4.开启SSH服务,修改/etc/ssh/sshd_config配置文件下的PasswordAuthenticationPermitRootLogin均为yes

SSH连接时出现Connection refused情况

ssh: connect to host x.x.x.x port 22: Connection refused,通常是由于22端口未打开、ssh服务未开启或防火墙禁止22端口等原因引起

1
2
systemctl status sshd #查看ssh服务是否启动,如果未启动就把它打开
netstat -lntp #查看端口是否打开

如果是防火墙未放行ssh,可以关闭防火墙或者放行端口,以Iptables为例子

1
2
3
iptables -L
iptables -l INPUT -p tcp --dport 22 -j ACCEPT
service iptables restart或systemctl restart iptables

SSH连接时出现Host key verification failed

解决方法:

【1】更改安全,选择最低的安全级别,再**.ssh/config或者/etc/ssh/ssh_config**中配置

1
2
3
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
# (将knownhostfile设为/dev/null),为了方便使用在known_hosts中了)

【2】删除对应ip的再know_hosts相关信息

【3】直接删除known_hosts文件

FinalShell 连接出现 chanel is not opened解决方案

通过添加 -v 参数(ssh -v root@172.17.1.61 很重要的思路),发现到SSH2_MSG_SERVICE_ACCEPT一行时会停留很久

1、由于GSSAPI认证导致的,修改**/etc/ssh/sshd_config**,将对应行修改成:

1
GSSAPIAuthentication  no

服务器端启用了GSSAPI。登陆的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住了。

2、由于DNS解析导致的,还是修改**/etc/ssh/sshd_config**(我的问题出在这):

1
UseDNS no

我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗(说到底还是反向查询的问题)。
3、修改**/etc/nsswitch.conf**,将“hosts:”一行改成:

1
hosts:          files dns

4、修改目标主机的**/etc/hosts**文件,将本地主机的IP和Hostname添加进去

5.systemd-logind 这个服务有问题,需要重启一下:

1
systemctl restart systemd-logind

计划任务

都是以当前用户的权限去执行计划任务

at一次性计划任务

需要开启atd服务(需要root权限)

1
sudo /etc/init.d/atd restart

at的运行方式

事实上我们仅使用at命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内

该工作就可以被atd服务取用并执行,at的实际工作情况是这样的:

1:先查找/etc/at.allow文件,写在这个文件中的用户才可以使用at,没有在at.allow文件中的用户就不可以使用,即使at.deny中也没有

2:如果at.allow不存在,就查找/etc/at.deny,写在这个文件中的用户都不能使用at,而其他用户都可以使用at

3:如果两个文件都不存在,那么就只有root用户可以执行at

选项参数:

1
2
3
4
5
6
7
8
-l		#相当于atq,列出系统上该用户的所有at调度
-d #相当于atrm,取消一个在at中调度的工作
-v #使用较明显的时间格式列出at调度中的任务列表
-c #查看at计划任务的具体内容,后接job名

$ at 18:00
at>sh cmd.sh
at>(输入ctrl+d)

crontab 周期性计划任务

user权限不能查看 www-data 权限的任务

1
2
3
4
5
6
7
8
9
10
11
12
-u	#只有root用户可以执行这个任务,也即帮其他用户新建、删除任务
-e #edit user's crontab
-l #list user's crontab
-r #delete user's crontab
-i #prompt before deleting user's crontab

#================#
#======例子======#
#================#

0 12 * * * sh shell.sh
#上边这条任务代表每天12点执行一次 sh shell.sh

前面5个字段分别表示分钟小时日期月份,后面接的是命令

代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 0-31 0-12 0-7 要执行的命令

其中周里面的0和7都代表周日,注意周与日月不可并存

特殊字符:

特殊字符 代表意义
*(星号) 任意时刻,如0 12 * * * sh shell.sh的*代表每个月的每个周中的每一天
,(逗号) 代表分割时段,例如0 3,6 * * * command,表示在3点和6点时执行任务,注意不要有空格符
-(减号) 代表时间段范围,例如在凌晨1点到6点的30分的时候执行command命令则应该是 30 1-6 * * * command
/n 表示每隔n个单位间隔执行一次的意思,*/11-23 * * * command表示凌晨1到晚上23点时间段内每隔1分钟执行一次

进程监控PS

1
2
3
4
5
6
7
8
#grep表示在这些里搜索,而ps aux是显示所有进程和其状态
ps aux | grep amoeba #查到amoeba的进程
kill -s 9 pid #杀死进程


a #显示现行终端机下的所有程序,包括其他用户的程序
u  #以用户为主的格式来显示程序状况。
x  #显示所有程序,不以终端机来区分

Linux上进程有5种状态:

  1. 运行 (正在运行或在运行队列中等待)
  2. 中断 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断 (收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死 (进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止 (进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps aux输出格式:

1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

格式说明:

USER: 行程拥有者

1
PID: pid

%CPU: 占用的 CPU 使用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态,linux的进程有5种状态:

  • D 不可中断 uninterruptible sleep (usually IO)
  • R 运行 runnable (on run queue)
  • S 中断 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (”zombie”) process

注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页)

START: 行程开始时间

TIME: 执行的时间

COMMAND:所执行的指令


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!