小编Bas*_*asj的帖子

用于连接两个对等点的 UDP 或 TCP 打洞(每个对等点位于路由器后面)

我正在尝试将我的计算机直接(无需第三方服务器)连接到朋友的计算机。我们都位于 ISP 路由器后面,并且希望(作为挑战!)在不修改路由器配置的情况下进行连接。

正如这里这里所建议的,我们尝试了 TCP 打孔:

myself$ nc -p 7777 public-ip-friend 8888
friend$ nc -p 8888 public-ip-myself 7777
Run Code Online (Sandbox Code Playgroud)

和UDP打洞:

myself$ nc -u -p 7777 public-ip-friend 8888
friend$ nc -u -p 8888 public-ip-myself 7777
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。

怎么解决这个问题呢?

注意:VPS(不在 NAT 之后)<--> 我的家用计算机(仍在路由器后面)使用相同的方法。

networking tcp udp netcat tcp-ip

6
推荐指数
1
解决办法
4343
查看次数

根系/安装时间慢

通过dmesg -t -d在我的 Raspbian/Debian Jessie 上运行,我发现这是我的启动过程中的瓶颈:

[<    4.777880>] EXT4-fs (mmcblk0p2): mounted filesystem with 
ordered data mode. Opts: (null)
Run Code Online (Sandbox Code Playgroud)

/dev/mmcblk0p2以 root身份挂载将近 5 秒/,这太长了!

好吧,它是一个 Raspberry Pi + 一张 microSD 卡(所以这可能是安装缓慢的原因/),但我是用 ArchLinux 完成的,而且这个安装根本没有那么长。

如何防止对只读文件系统进行任何文件检查并/在启动时更快地安装根目录?

arch-linux debian mount dmesg

5
推荐指数
1
解决办法
3235
查看次数

我真的需要屏幕中的 -dmS 选项来稳定运行后台作业甚至注销吗?

我看到很多地方都介绍screen了稳定运行后台作业甚至注销。他们使用

screen -dmS name
Run Code Online (Sandbox Code Playgroud)

根据screen -h,这个选项意味着

-dmS name 作为守护进程启动:分离模式下的屏幕会话。

什么是守护进程?我不明白。

我发现只要输入screen,就可以自动进入屏幕。在我运行一些命令后,按Ctrl+a d,然后注销。工作仍然运行良好。那么这个简单的方法可以吗?我真的需要-dmS让后台工作稳定吗?


让我试着做一个总结:

任何在 screen 中运行的东西都可以安全地注销(但你应该分离屏幕,而不是在你注销时退出屏幕),无论你为 screen 设置了什么选项。

-dmS只是在后台非迭代地提交作业的一个方便的选项。那是

screen -dmS nameOfScreen command
Run Code Online (Sandbox Code Playgroud)

linux gnu-screen

5
推荐指数
1
解决办法
1万
查看次数

一个 chroot/isolated SFTP 用户仍然可以使用 PHP 访问整个文件系统

我想在我的服务器上为我的朋友提供一个独立的网络托管空间。我做了:

useradd friend 
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend     
mkdir /sftp/friend/home
mkdir /sftp/friend/www 
usermod -aG sftpusers friend
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend 
Run Code Online (Sandbox Code Playgroud)

我将此添加到sshd_config

Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u
Run Code Online (Sandbox Code Playgroud)

这对 Apache 配置:

<VirtualHost *:80>
  ServerName friend.example.com
  DocumentRoot /sftp/friend/www
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

它有效:friend可以在 jailroot 环境中访问 SFTP 并且他不能/sftp/friend从 SFTP退出。这很好。

但我注意到他仍然可以使用 PHP 查看文件系统中的其他文件:如果他创建了一个index.php包含:

<?php …
Run Code Online (Sandbox Code Playgroud)

chroot sftp php apache-httpd

5
推荐指数
1
解决办法
145
查看次数

rsync 确实不能优雅地处理“文件重命名”吗?

在使用备份工具时duplicity,我注意到如果我重命名源上的文件,数据将通过网络再次重新发送到目的地,这有点令人难过。由于内部duplicity使用librsync,我决定看看rsync.

\n

这个ArchWiki 页面指出:

\n
\n

处理重命名
\n检测到移动/重命名的文件,并且不会存储或传输两次。\xc2\xa0\n它\xc2\xa0通常意味着计算文件或其块的校验和。\xc2\xa0\n可以补充缺少此功能的应用程序通过与AUR组合,它仅同步重命名。hsync

\n
\n
\n

rsync:处理重命名:否

\n
\n

这是否真的意味着,在使用 时rsync,如果我在源计算机上重命名为 ,则无法阻止 10 GB 通过网络重新传输到目的地/test/10GBfile/test/10GBfile_newname

\n

鉴于 的长期流行rsync,是否有更好的处理方式?

\n

storage backup rsync rdiff

5
推荐指数
2
解决办法
2731
查看次数

zgrep 与 egrep 与 grep

是否有一个易于记忆的经验法则来了解以下之间的区别:

  • egrep

  • zgrep

  • grep

并知道哪些安装在我的机器上?

(确实似乎有一些:“如果安装了 GNU grep,则...,否则...”)

grep

4
推荐指数
1
解决办法
1万
查看次数

iptables 规则解锁互联网访问,并在 3600 秒后再次阻止

我这样做,从我儿子的终端,有时给他互联网访问(默认禁用):

./unblockinternet.sh
<enter password>
Run Code Online (Sandbox Code Playgroud)

使用这个脚本:

su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"
Run Code Online (Sandbox Code Playgroud)

如何使它再次自动阻止网络,例如,1 小时后?(它已经son在重新启动后再次阻止用户,但我也想在 3600 秒后阻止它)

更准确地说,如何添加一个计时器来做su -c "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"3600 秒后,此时无需输入密码?显然,我不会正好在 3600 秒后正好在他的终端上。

scheduling iptables su shell-script time

4
推荐指数
1
解决办法
500
查看次数

DHCP 和只读根文件系统

在安装为只读(嵌入式计算机)ifup wlan0的系统上执行操作时,出现/此错误:

Failed to connect to non-global ctrl_ifname: wlan0  error: Read-only file system
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

can't create /var/lib/dhcp/dhclient.wlan0.leases: Read-only file system
Listening on LPF/wlan0/80:1f:02:d3:42:b8
Sending on   LPF/wlan0/80:1f:02:d3:42:b8
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
...
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
No …
Run Code Online (Sandbox Code Playgroud)

networking dhcp etc readonly

3
推荐指数
1
解决办法
5248
查看次数

使用 awk 或 grep 捕获组

我想循环遍历找到的每个模式,并可以访问循环内的不同捕获组,可能使用grepor awk(如果可能的话,我想坚持使用它们,以避免学习第三个模式,但如果确实有必要,我会再学一个!)

做类似的事情:

awk-or-grep -E '(blah(.*)hello=(.*))' sampletext | while read -r l; do 
    echo $0             #1st capture group
    echo $1             #2nd catpure group
    dosomethingwith $2  #3rd capture group
done
Run Code Online (Sandbox Code Playgroud)

存在?


示例文本:

blah12687hello=123
nothingthatmatches
blah3211hello=123456
blah15butnottheotherpattern
Run Code Online (Sandbox Code Playgroud)

使用前面提到的循环,它应该输出:

blah12687hello=123
12687
<it should run the command dosomethingwith 123>
blah3211hello=123456
3211
<it should run the command dosomethingwith 123456>
Run Code Online (Sandbox Code Playgroud)

grep awk

3
推荐指数
1
解决办法
1万
查看次数

SSH直接连接到docker容器,无需先ssh主机

在我的本地计算机上,我通过 ssh 连接到远程 VPS:ssh user@1.2.3.4

在此 VPS 中,正在运行 docker 容器(例如docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04docker run -itd --name test nvidia/cuda:11.4.0-devel-ubuntu18.04 ...

Local computer -> VPS (1.2.3.4) -> Docker container
Run Code Online (Sandbox Code Playgroud)

通过 SSH 直接从我的本地计算机连接到此容器并直接获得 bash 提示符的标准方法是什么?

是否可以一步完成而不是

ssh user@1.2.3.4
docker attach test
Run Code Online (Sandbox Code Playgroud)

以同样的方式,我想从本地计算机使用 SFTP(例如使用 Filezilla)连接 Docker 容器。

ssh sftp terminal container docker

3
推荐指数
1
解决办法
945
查看次数