我有一个充满文本文件的目录。我的目标是将文本附加到所有这些的开头和结尾。每个文件的开头和结尾的文本都是相同的。
根据我从网上得到的代码,这是附加到文件开头的代码:
echo -e 'var language = {\n$(cat $BASEDIR/Translations/Javascript/*.txt)' > $BASEDIR/Translations/Javascript/*.txt
Run Code Online (Sandbox Code Playgroud)
这是附加到文件末尾的代码。目标是};
在每个文件的末尾添加文本:
echo "};" >> $BASEDIR/Translations/Javascript/*.txt
Run Code Online (Sandbox Code Playgroud)
我从中提取的示例用于对单个文件进行操作。我想我会尝试使用通配符对多个文件进行操作,*.txt
.
我也可能犯了其他错误。无论如何,如何将文本附加到多个文件的开头和结尾?
在尝试从发生故障的硬盘驱动器恢复数据的过程中,我正在运行该命令ddrescue
。
该命令已经运行了 9 天,我从磁盘活动的声音中认为它可能正在执行某些操作。命令行输出一直看起来或多或少是静态的:
$ sudo ddrescue -r3 /dev/sdb /home/dave/RECOVERY/usb500.image /home/dave/recovery_usb500.logfile
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued: 0 B, errsize: 0 B, errors: 0
Current status
rescued: 0 B, errsize: 500 GB, current rate: 0 B/s
ipos: 2539 MB, errors: 1, average rate: 0 B/s
opos: 2539 MB, time from last successful read: 9.7 d
Splitting failed blocks...
Run Code Online (Sandbox Code Playgroud)
一直在变化的一个部分是它说ipos
和的地方opos
。花了 9 天时间才恢复到大约500000 MB
,这是发生故障的磁盘驱动器的大小。然而,当它到达那里时,它又下降到0
并开始再次上升。在我写这篇文章的时候,它大约在2580 MB …
我有一个通过 定期运行的脚本cron
,它创建一个tar.gz
文件以备份目录。
由于我无法控制的原因,唯一可以通过执行脚本cron
的用户是 root 用户。因此tar
,任何其他用户都无法移动或删除生成的文件。
因此,作为脚本的一部分,我想在文件上执行chown
and以便其他用户可以操作它。chmod
tar
但是仅更改tar
文件的权限就足够了,还是将 root 用户权限也保存到tar
. 当用户解压缩tar
文件时,他们是否能够像他们自己创建文件一样处理这些文件?
我想找到文件中的最后一行文本,并删除其末尾的逗号。我已经问过这个问题了,但是,在得到答案后,我意识到我的问题不够具体。
该sed
命令将转到文件的最后一行并对其执行操作。就我而言,我想删除结尾的逗号:
sed -i '$ s/",/"/g' file.txt
Run Code Online (Sandbox Code Playgroud)
所以这:
blah blah blah,
blah blah blah,
blah blah blah,
Run Code Online (Sandbox Code Playgroud)
...变成这样:
blah blah blah,
blah blah blah,
blah blah blah
Run Code Online (Sandbox Code Playgroud)
但是,如果文件中最后一行文本后面有空行,则此方法将不起作用。
我一直在寻找获取最后一行文本的方法,但还没有想出任何我可以理解和应用的方法。我还寻找了删除所有尾随空白行的方法,并找到了以下命令:
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' *.txt
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用(它似乎只是在命令行上输出我的文件的内容)。无论如何,这都是不优雅的。我不想删除尾随的空白行,最好只识别最后一行包含文本的内容并对其采取行动。
如何删除目录中多个文件的最后一行文本中的逗号?
我在我的计算机上设置了一个 Apache 2 服务器,用于本地测试。需要明确的是,它不是在互联网上托管网站。它仅用于本地调试和设计。
我使用的是 Ubuntu Linux,但现在我有一台使用 Linux Mint 的新计算机。我想要做的是获取我在旧 Ubuntu 机器上拥有的所有 Apache 站点和设置,并在新的 Linux Mint 机器上复制它们。
我只知道如何手动执行此操作,一次一个站点,从头开始。为目录中的每个站点创建一个文件sites-available
并使用a2ensite
. 然后对任何配置文件进行编辑,例如在我的php.ini
文件中添加一些行以启用 Xdebug,并希望我没有遗漏任何内容。
我确信我这样做的效率很低,而且很容易出现人为错误。
是否不可能以某种方式在我的 Ubuntu 机器上复制整个 Apache 2 设置和站点,然后一次性将它们放在我的 Linux Mint 机器上?或者至少,以最少的步骤重新创建每个站点并从头开始设置?
请注意,我更像是一名设计师而不是管理员,所以请假设我对 Linux 命令和服务器设置的了解很少。
我刚刚在新的 Linux Mint 安装上设置了一个 Apache 2.2 服务器。我正在重新创建以前在旧 Ubuntu 机器上的设置。
在我以前的计算机上,我必须启用FollowSymLinks
in httpd.conf
,因为我将我的网站 HTML 文件存储在我的主目录中,并从/var/www
.
在我的新服务器上,我找不到任何httpd.conf
地方,所以我似乎无法设置跟随符号链接的选项。结果,我收到了一个403 Forbidden: You don't have permission to access / on this server
错误。
另外,在我的错误日志中,它说:
[Sun May 05 02:12:17 2013] [error] [client 127.0.0.1] Symbolic link not allowed or link target not accessible: /var/www/Websites
Run Code Online (Sandbox Code Playgroud)
允许符号链接的方式有什么改变吗?还是我的设置有误httpd.conf
?无论如何,如何让我的新 Apache 遵循符号链接?
更新:根据下面的答案,我检查了文件/etc/apache2/sites-enabled/000-default
和/etc/apache2/sites-available/default
,它们都有FollowSymLinks
选项。我可能会收到上述错误,还有其他原因吗?
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个Bash shell 脚本来对一些 HTML 文件进行一些文件操作。
在我执行的许多操作中,我有一个非常有效的sed
命令:
find $DIR -type f -name '*.html' -exec sed -i 's/.*<script type="text\/javascript" charset="utf-8" src="file.js"><\/script>.*/<script type="text\/javascript" charset="utf-8" src="file2.js"><\/script>/g' {} \;
Run Code Online (Sandbox Code Playgroud)
它查看相关目录中的每个 HTML 文件,并替换一行文本。
我想做一些类似的事情,在两个 HTML 注释之间替换多行。
所以我想采取这个:
<!-- STARTREPLACE1 -->
Blah
Blah
Blah
<!-- ENDREPLACE1 -->
Run Code Online (Sandbox Code Playgroud)
并将其更改为:
<!-- STARTREPLACE1 -->
A whole new world!
<!-- ENDREPLACE1 -->
Run Code Online (Sandbox Code Playgroud)
我发现这个awk
命令在我在一个文件上运行时似乎有效:
awk '/<!-- STARTREPLACE1 -->/{p=1;print;print "A whole new world!"}/<!-- ENDREPLACE1 -->/{p=0}!p' justonefile.html
Run Code Online (Sandbox Code Playgroud)
所以我想我可以执行find
我使用的相同功能sed
并在此处应用该方法,以便awk
在目录中的每个 HTML 文件上运行此命令:
find $DIR …
Run Code Online (Sandbox Code Playgroud) 我有一个批处理文件,除其他外,它使用该命令mmv
重命名一些文件。相关行是这样的:
mmv "$BASEDIR/files/*.txt" "$BASEDIR/files/#1.strings"
Run Code Online (Sandbox Code Playgroud)
本质上它是有效的,但问题是当文件碰巧已经存在时,它不断要求我确认覆盖文件。我希望它在没有确认的情况下继续执行,所以我检查了手册页mmv
,它说只需使用该-o
选项,如下所示:
mmv -o "$BASEDIR/files/*.txt" "$BASEDIR/files/#1.strings"
Run Code Online (Sandbox Code Playgroud)
不过,这没有任何区别。每次我运行我的脚本时,当涉及到mmv
部分时,它开始要求我确认。
为什么该-o
选项不起作用,我如何在mmv
不要求确认的情况下覆盖?
我正在使用 Bash shell 脚本来构造一个包含 Javascript 数组的文本文件。据我了解 Javascript,数组中的最后一项不能有逗号。在我的 Javascript 中,这给了我错误。
我有一个用其他代码生成的项目列表,结果如下所示:
text0161: "blah",
text0162: "blah blah",
text0163: "blah blah blah",
Run Code Online (Sandbox Code Playgroud)
我需要取最后一行,text0163: "blah blah blah",
并删除结尾的逗号,所以它变成text0163: "blah blah blah"
.
在我的处理过程中, 之后没有任何内容text0163: "blah blah blah"
,因此我可以查找文件中的最后一行并删除逗号。但是,该行的内容可能会更改,因此它并不总是完全相同的text0163: "blah blah blah",
. 它可能会变成其他任何东西,例如text2020: "doobie doobie doo",
.
我知道我可以使用 sed 删除逗号,如下所示:
sed -i 's@,@@g' file.txt
Run Code Online (Sandbox Code Playgroud)
但我不知道如何只在最后一行做到这一点。
我在另一个大陆的远程位置有一台 Ubuntu 11.04 服务器,所以我无法物理访问它。我只通过ssh
(和scp
)与它交互,并且打算只以这种方式与它交互。
出于安全目的,我想确保服务器上的所有端口都绝对关闭,除了 ssh
.
尽管试图在网上找到说明,但我的理解仍然很模糊。到目前为止,我收集到的是我需要“刷新”“iptables”,还需要编辑一些文件(/etc/hosts
,也许?),然后重新启动机器。
显然,尽管如此,我想对此非常小心,因为如果我做错了,我最终可能会意外关闭 ssh 端口,使我无法访问服务器。
在我这样做之前,我希望建立一套简单的步骤。
那么,如何在保留访问权限的同时关闭所有端口?
额外问题:在执行此操作时,我是否应该并且可以将ssh
端口从 22 更改为非标准端口?真的有区别吗?
apache-httpd ×2
awk ×1
bash ×1
chmod ×1
chown ×1
cloning ×1
command-line ×1
ddrescue ×1
files ×1
find ×1
firewall ×1
hard-disk ×1
iptables ×1
linux ×1
mmv ×1
permissions ×1
sed ×1
shell-script ×1
tar ×1