小编Rus*_*lan的帖子

我可以在没有可执行文件的情况下执行一个全新的进程吗?

假设我的非 root 32 位应用程序在 64 位系统上运行,其中所有文件系统都以只读方式挂载。该应用程序在内存中创建了一个 64 位 ELF 的图像。但是由于只读文件系统,它无法将此图像转储到文件中进行操作execve。是否仍有支持的方式从此映像启动进程?

注意:这里的主要问题是从 32 位模式切换到 64 位模式,而不是进行任何可能不可靠的黑客攻击。如果这解决了,那么整个问题就变得微不足道了——只需制作一个自定义加载器。

linux process exec

5
推荐指数
1
解决办法
1322
查看次数

为什么我用 grep -I 得到“二进制文件匹配”?

在下面的例子中,grep行为很奇怪:它提供了-I选项,根据手册页,它应该grep忽略二进制文件(类似于--binary-files=without-match),但我仍然得到“二进制文件匹配”输出。

$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2\>1`\>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$\&S4_,
MP[G)-)_RVN[!6(S.>F0/M\B(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Run Code Online (Sandbox Code Playgroud)

显然,grep考虑二进制文件,但仍然尝试匹配并报告结果。为什么没有像-I选项规定的那样忽略“二进制文件” ?

我在 Ubuntu 18.04 上使用 GNU grep 3.1。

grep binary

5
推荐指数
1
解决办法
4786
查看次数

如何循环遍历 bash 中不断增加的文件列表?

我有一个正在运行的文件生成器,其中每个文件在前一个文件之后都有一个按字母顺序排列的名称。起初我正在做我的循环for file in /path/to/files*; do...,但我很快意识到 glob 只会在循环之前扩展,并且不会处理循环时创建的任何新文件。

我目前这样做的方式很丑陋:

while :; do
    doneFileCount=$(wc -l < /tmp/results.csv)
    i=0
    for file in *; do
        if [[ $((doneFileCount>i)) = 1 ]]; then
            i=$((i+1))
            continue
        else
            process-file "$file" # prints single line to stdout
            i=$((i+1))
        fi
    done | tee -a /tmp/results.csv
done
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来循环不断增加的文件列表,而没有上述的黑客攻击?

bash files

4
推荐指数
1
解决办法
191
查看次数

为什么“date”在本地化时会以错误的词序打印日期?

我正在使用 Kubuntu 14.04.2 LTS。我使用以下命令设置语言环境:

export LANG=ru_RU.utf8 LANGUAGE=ru_RU.utf8 LC_ALL=ru_RU.utf8
Run Code Online (Sandbox Code Playgroud)

所以locale现在说所有条目都是ru_RU.utf8. 但是当我发出时date,我得到以下信息:

??. ??? 14 12:55:36 MSK 2015
Run Code Online (Sandbox Code Playgroud)

虽然用英语说“May 14”是正常的,但我们从不用俄语说“??? 14”(这意味着“5月14日”而不是“5月14日”)。它应该是“14 ???” 或者,最坏的情况是“???,14”。

根据info coreutils 'date invocation',在C语言环境中,默认格式字符串是'+%a %b %e %H:%M:%S %Z %Y',它看起来正是我在ru_RU.utf8语言环境中得到的。但是同一个信息页面说格式字符串取决于LC_TIME语言环境类别。因此,我得出结论,系统语言环境数据库中某处存在错误。

这确实是一个错误,还是我错过了什么?

locale

2
推荐指数
1
解决办法
661
查看次数

为什么`date`会忽略TZ环境变量?

在 Ubuntu 18.04 上,我有以下行为date

$ date --version | head -n1
date (GNU coreutils) 8.28
$ date
?? ???  8 13:18:18 MSK 2019
$ TZ=UTC date
?? ???  8 10:18:23 UTC 2019
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。但现在我试图在 Raspbian 9 上做同样的事情:

$ date --version | head -n1
date (GNU coreutils) 8.26
$ date
Tue Oct  8 13:18:50 MSK 2019
$ TZ=UTC date
Tue Oct  8 13:18:51 MSK 2019
Run Code Online (Sandbox Code Playgroud)

Raspbian 版本date忽略TZ环境变量的原因是什么?

date timezone raspbian date-utility

2
推荐指数
1
解决办法
773
查看次数

标签 统计

bash ×1

binary ×1

date ×1

date-utility ×1

exec ×1

files ×1

grep ×1

linux ×1

locale ×1

process ×1

raspbian ×1

timezone ×1