我所遇到的Linux命令
如何设置只有一个我设置的ip能访问程序?
如果你想要限制一个程序只能被特定的IP地址访问,你可以使用iptables这个工具来实现。在Ubuntu系统中,iptables是一个非常强大的防火墙工具,能够对网络数据包进行过滤,控制哪些数据包可以通过,哪些不可以。
以下是一个基本的步骤,你可以根据需要进行调整:
-
打开终端,并使用下面的命令安装iptables:
sudo apt-get update sudo apt-get install iptables
-
确定你的程序正在使用哪个端口。假设你的程序正在使用8080端口。
-
使用以下命令来允许特定的IP地址(比如1.2.3.4)访问你的程序:
sudo iptables -A INPUT -p tcp --dport 8080 -s 1.2.3.4 -j ACCEPT
-
使用以下命令来阻止其他所有IP地址访问你的程序:
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
-
最后,你可以使用下面的命令来查看你的iptables规则是否已经设置成功:
sudo iptables -L
注意:这个设置在服务器重启后会失效,如果你想要让这个设置永久生效,你需要安装iptables-persistent包,并保存你的iptables规则。
sudo apt-get install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4
在修改iptables规则时请一定要小心,错误的规则可能会阻止你远程访问你的服务器。在应用任何新规则之前,一定要确保你有一个回滚的方法。
iptables的规则如何删除?
要删除iptables的规则,你可以使用 -D
选项,后面跟上规则链的名称和规则的编号。规则的编号是从1开始的,表示规则链中的位置。例如,如果你想删除INPUT链中的第1条规则,你可以运行以下命令:
sudo iptables -D INPUT 1
你也可以通过规则的内容来删除规则。例如,如果你之前添加了一个规则来拒绝来自IP地址1.2.3.4的所有连接,你可能使用了这样的命令:
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
那么,你可以使用以下命令来删除这条规则:
sudo iptables -D INPUT -s 1.2.3.4 -j DROP
请注意,删除规则时需要指定完全相同的参数。如果你只是稍微改变了一些参数,iptables可能会找不到你想删除的规则。
另外,记得在修改了iptables规则后保存你的更改,否则在系统重启后,这些更改可能会丢失。你可以使用如下命令来保存规则(在Debian/Ubuntu系统上):
sudo iptables-save
或者在Red Hat/CentOS系统上:
sudo service iptables save
这样,当系统重启时,iptables规则就会自动恢复。
ubuntu如何停止某个systemctl运行的服务?
您可以使用 systemctl
命令来停止在 Ubuntu 上运行的服务。以下是具体的步骤:
-
首先,您需要打开终端。这通常可以通过在屏幕左上角的 “Activities” 菜单中搜索 “Terminal” 来完成。
-
在终端中,您可以使用以下命令来停止服务:
sudo systemctl stop [service_name]
其中,
[service_name]
是您希望停止的服务的名称。例如,如果您希望停止 Apache 服务,那么您需要输入:sudo systemctl stop apache2
-
输入这个命令后,您可能需要输入您的密码,因为
sudo
命令会请求管理员权限。 -
一旦您输入了密码,该服务应该会立即停止。您可以通过运行以下命令来检查服务的状态:
sudo systemctl status [service_name]
这将显示关于该服务的信息,包括它是否正在运行。
以上就是在 Ubuntu 上使用 systemctl
命令停止服务的方法。如果您有任何其他问题,欢迎随时向我提问。
如何删除全部规则?
要删除iptables的所有规则,你可以使用以下命令:
sudo iptables -F
这个命令会删除所有链中的所有规则。-F
是 --flush
的简写,表示“清空”。
此外,你可能还需要删除所有自定义的链。你可以使用以下命令:
sudo iptables -X
-X
是 --delete-chain
的简写,表示“删除链”。
请注意,这些命令只会临时删除规则,如果你想永久地删除所有规则,你需要保存你的更改。在Debian/Ubuntu系统上,你可以使用以下命令:
sudo iptables-save
在Red Hat/CentOS系统上,你可以使用以下命令:
sudo service iptables save
另外,删除所有规则将使你的系统暴露在任何网络连接上,因此在你配置新的规则之前,你可能会面临安全风险。你应该尽快配置新的iptables规则,以保护你的系统。
如何查看所有systemctl运行的服务?
如果你想查看所有systemctl运行的服务,你可以使用以下的命令:
systemctl list-units --type=service
这将列出所有系统中的服务单位,不论它们现在的状态是什么。
如果你只想看到那些当前正在运行的服务,你可以使用以下命令:
systemctl | grep running
这个命令会列出所有正在运行的服务。
如果你想看到那些启用的服务(这意味着它们在启动时会自动运行),你可以使用以下命令:
systemctl list-unit-files --type=service | grep enabled
这些命令应该可以帮助你查看systemctl管理的所有服务,以及它们的当前状态。
日志查看
journalctl
是 Systemd 的日志管理工具,下面是一些常用的命令和选项:
-
查看所有日志:
bashCopy code journalctl
-
查看特定服务的日志:
bashCopy code journalctl -u [service_name]
-
查看最新的10行日志:
bashCopy code journalctl -n
你也可以指定显示的行数,例如
journalctl -n 20
会显示最新的20行日志。 -
实时查看最新的日志:
bashCopy code journalctl -f
-
查看特定时间段的日志:
bashCopy code journalctl --since "2023-01-01" --until "2023-01-02 03:00"
-
查看特定优先级的日志:
bashCopy code journalctl -p [priority]
优先级可以是
emerg
、alert
、crit
、err
、warning
、notice
、info
或debug
。 -
从最新的日志开始显示:
bashCopy code journalctl -e
-
清理旧的日志:
bashCopy code journalctl --vacuum-size=1G
这会删除日志,直到剩余的日志大小小于1GB。
更多详细的选项和用法,你可以查看 man journalctl
或者 journalctl --help
获取。
journalctl -xeu
journalctl -xeu
是 journalctl
的一个特定用法:
-x
:对某些字段的内容进行解释或翻译。例如,对于显示的消息,它可能会显示解释或建议的解决方案。-e
:在日志的末尾开始,也就是从最新的日志开始显示。-u
:仅显示指定服务的日志。
这个命令的整体作用是,从最新的日志开始显示指定服务的日志,并对日志进行解释或翻译。例如,journalctl -xeu celery
会显示 Celery 服务的日志,并从最新的日志开始显示。
如何查看是否有其他程序正在使用 8080 端口?
你可以通过使用 netstat
或 lsof
命令来检查是否有其他程序正在使用特定的端口。
使用 netstat
命令:
netstat
是一个用来显示网络状态的命令行工具。你可以使用 -tuln
参数查看所有正在监听的服务:
netstat -tuln
如果你只对 8080 端口感兴趣,你可以将 grep
命令与 netstat
组合起来,如下所示:
netstat -tuln | grep :8080
如果 8080 端口被占用,这个命令将显示正在使用该端口的服务的相关信息。
使用 lsof
命令:
lsof
是一个用来显示当前系统打开文件的命令行工具,因为在 Unix 和 Linux 中,设备、目录和网络套接字都被视为文件,所以可以用 lsof
检查端口使用情况。
你可以使用 -i
参数和端口号来检查特定端口的使用情况:
lsof -i :8080
这个命令将列出所有正在使用 8080 端口的进程。
redis数据库部分
展示数据库所有内容(只有字符串值的情况,其它情况类似,只要修改获得值的代码)
redis-cli keys "*" | while read key; do echo "Key : '$key'"; echo "Value : `redis-cli get $key`"; echo; done
这段 Shell 脚本主要是利用了 Unix/Linux 系统下的管道 (pipe) 和循环。
这段脚本的主要步骤如下:
-
redis-cli keys "*"
:这部分通过 Redis 的 CLI 工具获取了所有的键。keys
是一个 Redis 命令,它返回数据库中所有匹配给定模式的键。在这个例子中,模式是*
,这表示匹配所有的键。 -
|
:这是一个管道操作符,它将前一个命令的输出作为后一个命令的输入。在这个例子中,redis-cli keys "*"
命令的输出(也就是所有的键)被传递给了后面的while read key; do ... done
循环。 -
while read key; do ... done
:这是一个 while 循环。read key
命令从输入中读取一行,并将它赋值给变量key
。然后,循环体(do ... done
之间的部分)对每一个键进行处理。 -
echo "Key : '$key'"
:这个命令打印出 “Key :” 和当前处理的键的名字。 -
echo "Value :
redis-cli get $key"
:这个命令首先执行了redis-cli get $key
,这是一个嵌套的命令,它获取了当前键的值。然后,这个命令打印出 “Value :” 和获取到的值。注意,这个命令假设键是字符串类型的。如果键不是字符串类型的,这个命令可能会失败。 -
echo
:这个命令打印出一个空行,使得输出更易读。
这个脚本的整体效果是:对于 Redis 数据库中的每一个键,打印出键的名字和值。
展示全部数据
redis-cli --eval "return redis.call('keys', '*')" | while read line ; do echo "Key : '$line'" ; redis-cli dump "$line" | xxd -p -r ; echo ; done
这段 Shell 脚本主要是利用了 Unix/Linux 系统下的管道 (pipe)、循环以及 Redis 中的 Lua 脚本功能。下面是这段脚本的详细解释:
-
redis-cli --eval "return redis.call('keys', '*')"
:这部分通过 Redis 的 CLI 工具和内置的 Lua 解释器获取了所有的键。--eval
是一个命令行选项,它允许你在 Redis 服务器上执行 Lua 脚本。在这个例子中,Lua 脚本是"return redis.call('keys', '*')"
,这个脚本调用了 Redis 的keys
命令并返回了所有的键。 -
|
:这是一个管道操作符,它将前一个命令的输出作为后一个命令的输入。在这个例子中,redis-cli --eval "return redis.call('keys', '*')"
命令的输出(也就是所有的键)被传递给了后面的while read line; do ... done
循环。 -
while read line; do ... done
:这是一个 while 循环。read line
命令从输入中读取一行,并将它赋值给变量line
。然后,循环体(do ... done
之间的部分)对每一个键进行处理。 -
echo "Key : '$line'"
:这个命令打印出 “Key :” 和当前处理的键的名字。 -
redis-cli dump "$line" | xxd -p -r
:这个命令首先执行了redis-cli dump "$line"
,这是一个嵌套的命令,它获取了当前键的序列化的值。然后,这个序列化的值被传递给xxd -p -r
命令,这个命令将序列化的值以二进制的形式打印出来。 -
echo
:这个命令打印出一个空行,使得输出更易读。
这个脚本的整体效果是:对于 Redis 数据库中的每一个键,打印出键的名字和序列化的值。这个脚本将值以二进制的形式打印出来,这就意味着某些类型的值(例如,列表或哈希表)可能会以一种不直观的方式展示出来。
开放redis接口,供vercel程序调用
1. 设置密码
首先,你需要修改Redis的配置文件来设置密码。在Ubuntu上,你可以通过以下命令来打开Redis配置文件:
sudo nano /etc/redis/redis.conf
然后,找到这一行:
# requirepass foobared
将其取消注释并设置为你想要的密码,例如:
requirepass yourpassword
然后,保存并关闭文件。
最后,你需要重启Redis服务以使更改生效:
sudo systemctl restart redis-server
2. 开放端口供远程调用
默认情况下,Redis仅允许本地主机连接。为了能够允许远程主机连接,你需要做一些配置。
首先,打开Redis配置文件:
sudo nano /etc/redis/redis.conf
找到下面这行:
bind 127.0.0.1 ::1
修改为:
bind 0.0.0.0 ::1
这样将允许所有IPv4地址连接到你的Redis服务器。
然后,找到这一行:
protected-mode yes
将其修改为:
protected-mode no
保存并关闭文件。
最后,重启Redis服务:
sudo systemctl restart redis-server
注意,开放Redis服务器供远程访问可能会带来安全风险,所以请确保你已经正确设置了密码,并且只允许信任的主机连接到你的Redis服务器。
3. 防火墙设置
如果你的服务器运行了防火墙,你需要确保Redis的端口(默认为6379)是开放的。你可以使用以下命令来开放端口:
sudo ufw allow 6379
然后,使用以下命令来启用更改:
sudo ufw reload
以上就是在Ubuntu系统上为Redis设置密码和开放端口供远程调用的步骤。
-
开放 Redis 端口:默认情况下,Redis 运行在 6379 端口。你需要确保你的 VPS 的防火墙设置允许外部连接到这个端口。
-
绑定 Redis 到公共 IP:默认情况下,Redis 只允许来自本地的连接。你需要修改 Redis 的配置文件,使其接受来自任何 IP 的连接。这通常涉及到编辑 redis.conf 文件,并将
bind
指令的值改为0.0.0.0
。 -
设置 Redis 密码:为了安全起见,你应该为你的 Redis 实例设置一个密码。这可以通过在 redis.conf 文件中设置
requirepass
指令来实现。 -
在 Vercel 中设置环境变量:在你的 Vercel 应用的设置中,你需要添加一个环境变量,比如
REDIS_URL
,其值为你的 Redis 连接字符串。连接字符串通常的格式为redis://:<password>@<host>:<port>/<db>
,其中<password>
是你的 Redis 密码,<host>
是你的 VPS 的公共 IP 地址,<port>
是 Redis 的端口(通常是 6379),<db>
是 Redis 数据库的编号(通常是 0)。
注意,这种设置方式存在一定的安全风险,因为它允许任何知道你的 Redis 密码和 IP 地址的人连接到你的 Redis 实例。你应该使用一些安全措施,如 IP 白名单,SSL/TLS 加密等,来增强安全性。
Leave a comment