将一台服务器的站点移动到另一台服务器时,我犯了一个可怕的错误。我们使用 virtualmin 在新服务器中创建了虚拟主机。但是在将文件从旧服务器恢复到新服务器时,我错误地复制了“/home/VIRTUALHOSTS-NAME/”而不是“/home/VIRTUALHOSTS-NAME/public_html”中的所有文件。现在我必须将所有文件从虚拟主机的主目录移动到 public_html 目录,除了几个默认文件夹,如:fcgi-bin、public_html、awstats、cgi-bin 等。这可以用 shell 脚本或任何带有管道的命令自动化吗?
有没有办法为开发人员创建一个shell用户登录到服务器并执行命令行php脚本以查看输出?它们必须被限制在一个文件夹中。
换句话说,我不想通过登录并运行 >php phpfile.php 来为开发人员提供 root 访问权限,只是一个基本的访问权限来查看某些命令行 php 脚本的输出
如何从我的 bash 历史记录中执行一系列命令?例如,如果我想在我的 bash 历史记录中执行编号为 34 到 42 的命令,我尝试过以下操作:
for n in $(seq 34 42); do
exec \!$n;
done
Run Code Online (Sandbox Code Playgroud)
但这并不能解决问题,是吗。有任何想法吗?
谢谢!
我有一个支持奇怪的“ssh”的设备。它不支持密钥身份验证,我的问题是我不知道如何提供用户名和密码(-l 或 user@host 不起作用)。它在连接后要求输入登录名和密码,如下所示:
zeratul@antioch:~$ ssh 1.2.3.4
Please login: user
password :
Login incorrect
Run Code Online (Sandbox Code Playgroud)
甚至可以从shell脚本中做到这一点还是我可以忘记它?
提前致谢。
快速提问。编译程序后,我总是必须通过在名称前加上 ./ 来明确告诉它从当前目录运行。例如$ ./testprog -argument1
有没有办法设置某种别名,允许我简单地通过说来调用它$ testprog -argument1,基本上允许我从任何位置运行程序?
我正在制作一个在内部执行一些命令的脚本,这些命令显示一些输出STDOUT(STDERR以及,但这没问题)。我需要我的脚本生成一个 .tar.gz 文件到STDOUT,所以脚本中执行的一些命令的输出也会转到STDOUT,这以输出中无效的 .tar.gz 文件结束。
因此,简而言之,可以将第一个命令输出到屏幕(因为我仍然想看到输出)但不能通过STDOUT? 此外,我想保持STDERR原样,以便那里只显示错误消息。
我的意思的一个简单例子。这将是我的脚本:
#!/bin/bash
# the output of these commands shouldn't go to STDOUT, but still appear on screen
some_cmd foo bar
other_cmd baz
#the following command creates a tar.gz of the "whatever" folder,
#and outputs the result to STDOUT
tar zc whatever/
Run Code Online (Sandbox Code Playgroud)
我试过搞乱exec文件描述符,但我仍然无法让它工作:
#!/bin/bash
# save STDOUT to #3
exec 3>&1
# the output of these commands should go to …Run Code Online (Sandbox Code Playgroud) 如何在不创建文件的情况下执行 shell 脚本?例如,假设我有以下脚本 ( testscript):
#!/bin/bash
function run_free() {
free -m
}
run_free
Run Code Online (Sandbox Code Playgroud)
然后我当然可以执行此操作: sh testscript
不过,我想避免创建文件。我试过:
sh echo '#!/bin/bash
function run_free() {
free -m
}
run_free'
哪个不起作用。有任何想法吗?
我得到一台带有 LSI MEgarad 卡的机器。我知道虚拟磁盘有什么:
Adapter: 0
Product Name: LSI MegaRAID SAS 9260-4i
Memory: 512MB
BBU: Absent
Serial No: SV11807006
==============================================================================
Number of DISK GROUPS: 3
Run Code Online (Sandbox Code Playgroud)
但我不知道每个虚拟磁盘(0、1、2)上都有哪些磁盘,哪些磁盘是 HotSpare ......
MegaCli -LDInfo -Lall -aAll
Adapter 0 -- Virtual Drive Information:
Virtual Disk: 0 (Target Id: 0)
Name:
RAID Level: Primary-5, Secondary-0, RAID Level Qualifier-3
Size:16.371 TB
State: Optimal
Stripe Size: 64 KB
Number Of Drives per span:3
Span Depth:3
....
Check Consistency : Completed 46%, Taken 254 min.
Virtual Disk: 1 (Target …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置 Tomcat 以从新贵开始。我发现以下作品:
description "Tomcat Server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
setuid tomcat
env JAVA_HOME=/usr/lib/jvm/default-java
env CATALINA_HOME=/opt/apache-tomcat-7.0.34
script
chdir $CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh run
end script
Run Code Online (Sandbox Code Playgroud)
但是如果我删除chdir,tomcat 会启动,但是FileNotFound当我.wars加载时有很多例外。(也就是说:.wars它们自己确实加载了但它们在加载时抛出异常。)
请注意,此行为与我从命令行调用时所看到的不同catalina.sh。从命令行调用,我可以/opt/apache-tomcat-7.0.34/bin/catalina.sh run 从任何目录(没有 chdiring)运行,一切都很好。
那么为什么chdir在我的新贵脚本中是必要的呢? (新贵环境与我的命令行环境有何不同?)
我不使用 chdir 时看到的错误示例:
Feb 22, 2013 3:00:11 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive my-war.war
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: my-war.log …Run Code Online (Sandbox Code Playgroud) 在我尝试更改服务器外壳后,我无法再以 root 身份登录。
首先,我以 root 身份安装了 z-shell (zsh),然后我想将其更改为我的默认 shell。因此我使用了“chsh”。我的错是,我输入了错误的路径。通过 Putty 注销并重新登录后,我收到消息“拒绝访问”。
当 shell 的路径不存在时,这是可以预见的。所以我登录到我的控制面板,并通过文件管理器更改了 /etc/passwd 文件:我更正了第一行的最后一部分 - root 用户:
root:x:0:0:root:/root:/usr/bin/zsh
即使我将其更改为旧的 shell /bin/bash 或 /bin/sh 它也不起作用。我读到 passwd 和 shadow 不是实时文件,所以我重新启动了服务器,但仍然存在同样的问题
任何想法,我还能做什么?
操作系统:Debian 5 + Parallels Plesk 11