命令行和脚本是危险的。使用 rm -rf 犯一个小错误,你就会陷入伤害的世界。在运行导入脚本时将数据库名称中的 prod 与 stage 混淆,并且您已绑定(如果它们在同一台服务器上,这并不好,但会发生)。同样为太晚注意到您 sshed 所在的服务器名称不是您在玩弄一些命令后认为的那样。你必须尊重Hole Hawg。
在运行有风险的命令之前,我有一些小习惯——比如对我所在的服务器进行三重检查。这是一篇关于 rm security的有趣文章。
什么小仪式、工具和技巧可以让你在命令行上保持安全?我的意思是客观的东西,比如“首先运行 ls foo*,查看它的输出,然后用 rm -rf 替换 ls 以避免运行 rm -rf foo * 或类似的东西”,而不是“确保你知道什么是命令会做”。
我每隔一段时间就会遇到一个我需要拥有的文件。我通常cacls用于更改 ntfs 权限,但它似乎没有所有权。在 *nix 下,我会运行类似chown me:me <file>. 是否有相当于的窗口chown?
windows windows-xp ntfs command-line-interface access-control-list
删除给定文件夹中早于 (n) 天的所有文件的 Windows 命令行选项是什么?
另请注意,这些文件可能有数千个,因此forfiles在这里使用 shellcmd并不是一个好主意..除非您喜欢生成数千个命令 shell。我认为这是一个非常讨厌的黑客,所以让我们看看我们是否可以做得更好!
理想情况下,内置于(或可轻松安装到)Windows Server 2008 中。
我用expect试过这个,但没有用:它最后关闭了连接。
我们可以通过 ssh 运行一个脚本来登录远程机器,运行命令,而不是断开连接吗?
所以在一台机器上ssh,cd到某某目录,然后运行一条命令,保持登录状态。
-乔纳森
(希望我用过)
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
spawn ssh root@marlboro "cd /tmp; ls -altr | tail"
expect "?assword:*"
send -- "$password\r"
send -- "\r"
interact
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种从命令提示符获取我自己的 PID 的方法(供以后在 bat 脚本中使用)。
到目前为止,我发现的唯一有用的方法是getpids.exe从这里使用:http : //www.scheibli.com/projects/getpids/index.html,但我正在寻找一个“内置”到 Windows 的命令。
我正在寻找一种“防弹”方式。不假设我的进程是唯一的 cmd.exe 或任何东西。
我有一台带有多个接口的机器,我可以根据需要进行配置,例如:
我想通过另一个接口转发发送到这些本地地址之一的所有流量。例如,对位于 192.168.1.1 的 iperf、ftp、http 服务器的所有请求不应仅在内部路由,而是通过 eth2 转发(外部网络将负责将数据包重新路由到 eth1)。
我尝试并查看了几个命令,例如 iptables、ip route 等……但没有任何效果。
我能得到的最接近的行为是:
ip route change to 192.168.1.1/24 dev eth2
Run Code Online (Sandbox Code Playgroud)
它在 eth2 上发送所有 192.168.1.x,除了仍然在内部路由的 192.168.1.1。然后我可以将所有流量定向到 eth1 上的假 192.168.1.2,然后在内部重新路由到 192.168.1.1 吗?我实际上正在与 iptables 斗争,但这对我来说太难了。
此设置的目标是在不使用两台 PC 的情况下进行接口驱动程序测试。
我正在使用 Linux,但如果您知道如何使用 Windows,我会购买它!
外网只是eth1和eth2之间的交叉网线。假设我的机器上有一个 http 服务器。现在我想从同一台机器访问这个服务器,但我想强制 TCP/IP 流量通过这个 eth1/eth2 电缆。我应该如何为此配置我的接口?
根据手册页,如果执行行之一以 255 错误退出,则 xargs 将退出:
如果命令的任何调用以 255 的状态退出,xargs 将立即停止而不读取任何进一步的输入。发生这种情况时,会在 stderr 上发出错误消息。
我怎样才能让 xargs不这样做?
我有一个大约 1500 行的批处理作业,我想一次运行 50 行。我发现它总是在某条生产线上死亡,并且没有完成工作。不好!
一个更好的问题,描述我正在尝试做的事情的问题是:
我怎样才能运行一个 1500 行的批处理脚本,一次 50 行,这样它就不会在中间退出作业,并将输出捕获到某种日志文件中?
在管理过 Unix 或类 Unix 的服务器之后,您觉得哪些工具(最好是命令行)是必不可少的?
有没有办法强制 SSH 在远程端使用特定的 shell,而不管用户的默认 shell 是什么?
我尝试过类似的解决方案:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
Run Code Online (Sandbox Code Playgroud)
但不幸的是,远程端的默认 shell 负责解析“复杂的多行命令”部分,我很难充分地转义它以供 Bash 和 C shell 用户使用。
我正在尝试仅使用命令行(管理程序和来宾)在 KVM(RHEL 6)上安装完全虚拟化的来宾(Fedora 14 x86_64)。它没有错误,也没有明显的结果。我想知道如何进行纯文本安装。
所以,这就是我所做的:
# virt-install \
--name=FE --ram=756 --vcpus=1 \
--file=/var/lib/libvirt/images/FE.img --network bridge:br0 \
--nographics --os-type=linux \
--extra-args='console=tty0' -v \
--cdrom=/media/usb/Fedora-14-x86_64-Live-Desktop.iso
Starting install...
Creating domain... | 0 B 00:00
Connected to domain FE
Escape character is ^]
ÿ
Run Code Online (Sandbox Code Playgroud)
怎么办?正如我在谷歌搜索几天后所了解的那样,我应该从文本安装中看到来宾的输出,但没有任何反应。virt-viewer 无法连接到它,建议我通过添加 --help(我做了)来探索所有选项。如果我重新连接 virsh,我会看到:
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@v ~]
# virsh console FEConnected to domain FE
Escape character is ^]
Run Code Online (Sandbox Code Playgroud)
这表明VM正在运行
# virsh list
Id Name …Run Code Online (Sandbox Code Playgroud) redhat command-line-interface console guest kvm-virtualization