我正在尝试将我的计算机直接(无需第三方服务器)连接到朋友的计算机。我们都位于 ISP 路由器后面,并且希望(作为挑战!)在不修改路由器配置的情况下进行连接。
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 之后)<--> 我的家用计算机(仍在路由器后面)使用相同的方法。
通过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 完成的,而且这个安装根本没有那么长。
如何防止对只读文件系统进行任何文件检查并/在启动时更快地安装根目录?
我看到很多地方都介绍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) 我想在我的服务器上为我的朋友提供一个独立的网络托管空间。我做了:
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) 在使用备份工具时duplicity,我注意到如果我重命名源上的文件,数据将通过网络再次重新发送到目的地,这有点令人难过。由于内部duplicity使用librsync,我决定看看rsync.
这个ArchWiki 页面指出:
\n\n\n处理重命名
\n
\n检测到移动/重命名的文件,并且不会存储或传输两次。\xc2\xa0\n它\xc2\xa0通常意味着计算文件或其块的校验和。\xc2\xa0\n可以补充缺少此功能的应用程序通过与AUR组合,它仅同步重命名。hsync
\n\nrsync:处理重命名:否
\n
这是否真的意味着,在使用 时rsync,如果我在源计算机上重命名为 ,则无法阻止 10 GB 通过网络重新传输到目的地/test/10GBfile?/test/10GBfile_newname
鉴于 的长期流行rsync,是否有更好的处理方式?
是否有一个易于记忆的经验法则来了解以下之间的区别:
egrep
zgrep
grep
并知道哪些安装在我的机器上?
(确实似乎有一些:“如果安装了 GNU grep,则...,否则...”)
我这样做,从我儿子的终端,有时给他互联网访问(默认禁用):
./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 秒后正好在他的终端上。
在安装为只读(嵌入式计算机)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) 我想循环遍历找到的每个模式,并可以访问循环内的不同捕获组,可能使用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) 在我的本地计算机上,我通过 ssh 连接到远程 VPS:ssh user@1.2.3.4。
在此 VPS 中,正在运行 docker 容器(例如docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04和docker 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 容器。
grep ×2
networking ×2
sftp ×2
apache-httpd ×1
arch-linux ×1
awk ×1
backup ×1
chroot ×1
container ×1
debian ×1
dhcp ×1
dmesg ×1
docker ×1
etc ×1
gnu-screen ×1
iptables ×1
linux ×1
mount ×1
netcat ×1
php ×1
rdiff ×1
readonly ×1
rsync ×1
scheduling ×1
shell-script ×1
ssh ×1
storage ×1
su ×1
tcp ×1
tcp-ip ×1
terminal ×1
time ×1
udp ×1