我之前看过关于 ELF 魔法的讨论,最近是在这个安全堆栈交换问题中的评论。我之前已经看到它提到过,我在我自己的引导日志中也看到过它。但我不确定它是什么。
elf 上的手册页有点超出我的理解,因为我不使用 C 或更低级别的语言。
作为使用 Linux 作为日常操作系统的人,ELF 是什么?
我发现这个问题解释了如何使用 vim 编辑远程文件:
vim scp://user@myserver[:port]//path/to/file.txt
Run Code Online (Sandbox Code Playgroud)
是否可以sudo
在远程主机上以 root(通过)身份执行此操作?
我已经尝试在远程主机上创建一个具有 root 权限的文件并使用上述内容进行编辑。Vim 可以看到内容,可以编辑它,可以保存它,但在远程主机上没有任何变化(可能是因为 vim 只是保存它的临时文件,然后把它交给 scp 放回去?)
使用我的用户保存的文件执行此操作时,它的行为符合预期。
我的 SSH 使用密钥进行身份验证,并且远程服务器具有用于我的 sudo 访问的 NOPASSWD
这个问题是类似的,但唯一的投票答案使用了 puppet,这绝对不是我想要使用的。
编辑:为了回应@drewbenn 在下面的评论,这是我的完整编辑过程:
vim scp://nagios//tmp/notouch
Run Code Online (Sandbox Code Playgroud)
/tmp/notouch
root拥有的文件在哪里,我看vim很快就显示
:!scp -q 'nagios:/tmp/notouch' '/tmp/vaHhwTl/0'
Run Code Online (Sandbox Code Playgroud)
这会自动消失以产生带有文本的空黑屏
"/tmp/vaHhwTl/0" 1L, 12C
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
按 Enter 允许我编辑文件
保存弹出和开头一样的scp命令,很快自动消失(很难及时读取但是scp和/tmp/...文件肯定在那里)
我在 nfs 挂载上有一个目录,它在服务器上位于 /home/myname/.rubies
Root 无法访问此目录:
[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
File: `/home/mitchell.usher/.rubies'
Size: 4096 Blocks: 8 IO Block: 32768 directory
Device: 15h/21d Inode: 245910 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 970/mitchell.usher) Gid: ( 100/ users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000
[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat `/home/mitchell.usher/.rubies': Permission denied
Run Code Online (Sandbox Code Playgroud)
我试图从该目录中复制一些/opt
只有 root 有权访问的内容:
[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory `/opt/ruby-2.1.3': Permission denied
[mitchell.usher@server ~]$ …
Run Code Online (Sandbox Code Playgroud) 当我通过 SSH 连接到一台机器ssh machine
并运行yum list
它时,它会输出按预期安装的所有内容,重要的是每个项目都在一行上,如下所示:
xz-devel.i386 4.999.9-0.3.beta.20091007git.el5 base
xz-devel.x86_64 4.999.9-0.3.beta.20091007git.el5 base
xz-libs.i386 4.999.9-0.3.beta.20091007git.el5 base
xz-lzma-compat.x86_64 4.999.9-0.3.beta.20091007git.el5 base
Run Code Online (Sandbox Code Playgroud)
但是在远程执行ssh machine 'yum list'
或什至通过管道将其传输到 grep 而在服务器上时yum list | grep xz -C 3
,输出的行被“截断”并变得更短,如下所示:
xz-devel.i386 4.999.9-0.3.beta.20091007git.el5
base
xz-devel.x86_64 4.999.9-0.3.beta.20091007git.el5
base
xz-libs.i386 4.999.9-0.3.beta.20091007git.el5
base
xz-lzma-compat.x86_64 4.999.9-0.3.beta.20091007git.el5
base
Run Code Online (Sandbox Code Playgroud)
我怎样才能使线条的大小不像这样缩小?我的最终愿望是将其通过管道传输到tee
,然后通过 ansible 对所有主机的输出文件进行一些处理。
这似乎是由于某种“虚拟终端”作为 SSH/管道的一部分而发生的,因为如果我缩小我的终端大小,在运行时断线,我可以获得相同的行为yum list
。因此,我假设管道的添加以某种方式告诉yum list
终端的宽度仅为 X 列
目前我有netcat
管道输出tee
,正在写入 output.txt
nc -l -k -p 9100 | tee output.txt
Run Code Online (Sandbox Code Playgroud)
我想监视这个输出,所以我tail -f | egrep -i 'regex'
通过 PuTTY观看它,这样我只能看到相关的位。
我时不时地想清除输出文件。问题出现了,如果我这样做> output.txt
然后再次尝试tail -f | egrep ...
我没有输出。如果我对文件进行 grep,尽管知道应该有匹配项(因为cat output.txt
正确地吐出文件),但我没有得到匹配项
mitch@quartz:~$ grep output.txt -e 'regex'
Binary file output.txt matches
Run Code Online (Sandbox Code Playgroud)
虽然在清空之前output.txt 上的相同命令工作正常。
基本上:>
让grep
我认为我的文件是一个二进制文件,它不会正确搜索。有没有更好的方法来清除文件?
我正在尝试在 android 设备上安装一些命令(即file
更好的版本ls
),我正在寻找它的 ARM 二进制文件(即 5TE 架构),但我找不到下载它们的地方. 谷歌搜索诸如“arm ls binary”或“ls binary”之类的东西给了我除我想要的之外的一切。
有没有一个地方可以找到二进制文件?
我有一大堆的是那些获得覆盖日志文件(file.log.1
,file.log.2
等)。当我将它们从制作它们的设备复制到我的本地机器上时,我丢失了原始时间戳。所以我想把它们按时间顺序排列。问题是我不一定知道哪个是最新的,哪个是最旧的。
我希望能够做的是,如果所有日志都在一个目录中,则打印如下内容:
file: file.log.1
first line: [first line that isn't whitespace]
last line: [last line that isn't whitespace]
Run Code Online (Sandbox Code Playgroud)
我可以编写一个 python 脚本来执行此操作,但如果可能的话,我更愿意使用 linux 内置程序来执行此操作。这是 awk/sed 的工作吗?或者这对于脚本语言来说真的更好吗?如果 awk/sed 是肯定的,你将如何去做?
我通过搜索找到了这个 awk 命令,但它只接受一个文件名,并且会打印最后一行的任何内容(并且末尾可能有可变数量的空行)
awk 'NR == 1 { print }END{ print }' filename
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 systemd 服务,该服务仅在文件系统上不存在某个文件时才启动。
如果我使用ConditionPathExists
这将使服务仅在有问题的文件存在时启动,这与我想要的行为相反。
有没有办法反转这些条件?