Linux


概念

  • 一切皆文件

基本命令


type -a command # 查看应用程序类型

# 自带 sudo 密码
# 方法1:
echo [password] | sudo -S [command] # 密码为字符串时需要引号?
# 方法2:
sudo -S [command] << EOF
[password]
EOF

# 用户

id -a # 当前用户信息
cat /etc/passwd # 查看用户
useradd # 添加用户
passwd # 设置密码
whoami

网络链接

exec 8<> /dev/tcp/www.baidu.com/80
ls /proc/$$/fd
exec 8>& -

echo -e "GET / HTTP/1.0\n" 1>& 10
cat 0<& 10

查看进程

netstat -lnp | grep 3000  # 查看端口 ? MacOS 不适用
ps -ef | grep node  # 查看进程
ps aux | grep -c php-fpm

# 查看应用程序执行用户
ps aux | grep -v root | grep nginx | cut -d\ -f1 | sort | uniq

kill -9 <pid>  # 杀死进程 -9 什么意思?

基本命令


# 未梳理

whereis

# 其他
rpm -qa | grep ssh # 是否安装ssh相关软件包

top  # 查看资源使用率

uname -r  # 查看内核版本

df # 查看磁盘占用
du -sh * # 查看文件夹/文件大小

lsattr [file] # 查看属性
chattr -i [file] # 去除i属性

复制文件

https://www.cnblogs.com/reaver21/archive/2012/02/09/2344147.html

未梳理

切换shell

cat /etc/shells

chsh -s /bin/bash
自定义命令

~/.bash_profile

alias mgit='git add .; git commit -m "update"; git push'

# 写一个函数接收参数
alias gpush='gitpush(){git push --set-upstream origin $1;};gitpush'

解压缩

# zip
zip -r file.zip folder file ...  # 压缩
unzip file.zip  # 解压
# tar
tar -cvf file.tar file1 file2 folder ...  # 压缩 
tar -zxvf file.tar.gz  # 解压

https://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html

压缩参数

image

守护进程

后台任务

只要在命令的尾部加上符号&,启动的进程就会成为"后台任务"。如果要让正在运行的"前台任务"变为"后台任务",可以先按ctrl + z,然后执行bg命令(让最近一个暂停的"后台任务"继续执行)。

$ shopt | grep huponexit
# 默认off,退出session时退出后台任务
disown
# 查看后台任务
jobs

# 移出最近一个正在执行的后台任务
# 不接收SIGHUP
disown

# 移出所有正在执行的后台任务
disown -r

# 移出所有后台任务
disown -a

# 不移出后台任务,但是让它们不会收到SIGHUP信号
disown -h

# 根据jobId,移出指定的后台任务
disown %2
disown -h %2

使用disown,一旦"后台任务"读写标准I/O,就会发现它已经不存在了,所以就报错终止执行。

node server.js > stdout.txt 2> stderr.txt < /dev/null &
disown
nohup
nohup node server.js &

Screen & Tmux

终端复用器:在同一个终端里面,管理多个session。

当前 session 一旦结束,不影响其他,重新登录,还可以再连上早先新建的 session。

# 新建一个 session
screen
node server.js

然后,按下ctrl + A和ctrl + D,回到原来的 session,从那里退出登录。下次登录时,再切回去。

screen -r
如果新建多个后台 session,就需要为它们指定名字。

screen -S name

# 切回指定 session
screen -r name
screen -r pid_number

# 列出所有 session
screen -ls

如果要停掉某个 session,可以先切回它,然后按下ctrl + c和ctrl + d。

Tmux
tmux
node server.js

# 返回原来的session
tmux detach

除了tmux detach,另一种方法是按下Ctrl + B和d ,也可以回到原来的 session。

# 下次登录时,返回后台正在运行服务session
tmux attach

如果新建多个 session,就需要为每个 session 指定名字。

# 新建 session
tmux new -s session_name

# 切换到指定 session
tmux attach -t session_name

# 列出所有 session
tmux list-sessions

# 退出当前 session,返回前一个 session 
tmux detach

# 杀死指定 session
tmux kill-session -t session-name

systemd

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

journal

在CentOS 7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护。https://blog.csdn.net/dianjiejian4745/article/details/102158811

journalctl -ef 该命令用于跳转到日志的尾部,同时会保持一个屏幕,显示新进入的日志信息

VIM

https://www.codebye.com/linux-vi-editor-search-update-pattern.html


软件管理

CentOS

yum # 安装
yum -y install git # 安装 git

Ubuntu software

.deb Ubuntu Debian
.rpm Fedora openSUSE

CentOS 7 firewall

systemctl status firewalld # 查看状态

systemctl start firewalld # 启动
systemctl stop firewalld # 关闭
systemctl enable firewalld # 开机启用
systemctl disable firewalld # 开机禁用

systemctl 是 CentOS 7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。

# .service 可以省略

# 显示一个服务的状态:
systemctl status firewalld.service
# 启动一个服务
systemctl start firewalld.service
# 关闭一个服务:
systemctl stop firewalld.service
# 重启一个服务:
systemctl restart firewalld.service

# 查看服务是否开机启动:
systemctl is-enabled firewalld.service
# 在开机时启用一个服务:
systemctl enable firewalld.service
# 在开机时禁用一个服务:
systemctl disable firewalld.service

# 查看已启动的服务列表:
systemctl list-unit-files|grep enabled
# 查看启动失败的服务列表:
systemctl --failed

firewalld-cmd

# 格式待整理

查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息:  firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic

开放端口操作

# 添加
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# permanent 永久生效,没有此参数重启后失效

# 重新载入
firewall-cmd --reload

# 查看
firewall-cmd --zone=public --query-port=3306/tcp

# 删除
firewall-cmd --zone= public --remove-port=3306/tcp --permanent

调整默认策略(默认拒绝所有访问,改成允许所有访问)

firewall-cmd --permanent --zone=public --set-target=ACCEPT
firewall-cmd --reload

对某个IP开放多个端口:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.159.60.29" port protocol="tcp" port="1:65535" accept"
firewall-cmd --reload

CentOS 6 iptables

service iptables status # 查看状态

service iptables start # 启动
service iptables stop # 关闭
chkconfig iptables on # 开机启用
chkconfig iptables off # 开机禁用

开放端口

-A 和 -I 参数分别为添加到规则末尾和规则最前面。

有两种方式添加规则

iptables -A 和iptables -I

iptables -A 添加的规则是添加在最后面。如针对INPUT链增加一条规则,接收从eth0口进入且源地址为192.168.0.0/16网段发往本机的数据。

[root@localhost ~]# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j ACCEPT

iptables -I 添加的规则默认添加至第一条。

如果要指定插入规则的位置,则使用iptables -I 时指定位置序号即可。
# 待梳理学习

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -P INPUT ACCEPT
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.159.1.0/24 --dport 22 -j ACCEPT   
注:-s后可以跟IP段或指定IP地址
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT

屏蔽IP

# 屏蔽单个IP
iptables -I INPUT -s 123.45.6.7 -j DROP
# 屏蔽IP段:从 123.0.0.1 到 123.255.255.254
iptables -I INPUT -s 123.0.0.0/8 -j DROP
# 屏蔽IP段:从123.45.0.1到123.45.255.254
iptables -I INPUT -s 124.45.0.0/16 -j DROP
# 屏蔽IP段:从123.45.6.1到123.45.6.254
iptables -I INPUT -s 123.45.6.0/24 -j DROP

查看已添加的 iptables

iptables -L -n # n 只显示IP地址和端口号,不将IP解析为域名

删除


# 将所有 iptables 以序号标记显示
# iptables -L -n --line-numbers
# 比如:删除 INPUT 里序号为 8 的规则
iptables -D INPUT 8

# 如果想把所有规则都清除掉
iptables -F

直接编辑配置文件

vi /etc/sysconfig/iptables

# 在文件中配置添加:
-A INPUT -p tcp --dport 3306 -j ACCEPT

# 保存后重启服务
service iptables restart
备份iptabes rules

使用iptables-save命令,如:

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables.save

恢复iptables rules

使用iptables命令,如:

[root@localhost ~]# iptables-restore < /etc/sysconfig/iptables.save

iptables 配置保存

以上做的配置修改,在设备重启后,配置将丢失。可使用service iptables save进行保存。

[root@localhost ~]# service iptables save

重启iptables的服务使其生效:

service iptables save   添加规则后保存重启生效。

service iptables restart
更新时间:2025-03-13 13:25:43