考虑这个示例 C 程序,它写入/dev/tty并且没有命令行选项使其不这样做。
#include <stdio.h>
int main (void) {
FILE* fout = fopen("/dev/tty", "w");
fprintf(fout, "Hello, World!\n");
fclose(fout);
}
Run Code Online (Sandbox Code Playgroud)
如何将它的输出重定向到/dev/nullshell 脚本中?
PS我读了这个答案,但我不太明白。无论如何,我希望得到一个不会修改程序代码源的答案。
我已经Afile做了相当于cat a.gif b.7z > Afile.
如何拆分Afile为原始文件a.gif和b.7z文件?
TL;DR 摘要:将 md 扇区号转换为/dev/mdX设备内的偏移量,以及如何使用xfs_db. 扇区号来自sh->sectorin linux/drivers/md/raid5.c:handle_parity_checks5()。
我不知道 MD 内部结构,所以我不知道如何处理printk我添加的日志记录的输出。
组件设备的偏移(用于dd或十六进制编辑器/查看器)也很有趣。
我想我应该在 Linux-raid 邮件列表上问这个问题。是仅限订阅者,还是可以不订阅就发帖?
我的桌面(没有 LVM)直接在 4 个磁盘的 MD RAID5 上安装了 xfs。最近的mismatch_cnt清理检测到非零值(实际上是 8,因为 md 一次在 4kiB 页面上运行)。
这是 RAID5,而不是 RAID1/RAID10 ,其中mismatch_cnt!= 0 在正常操作期间可能发生。(此 wiki 页面底部的其他链接可能对某些人有用。)
我可以只是盲目地repair,但是除了失去选择重建方式的任何机会之外,我不知道要检查哪个文件可能损坏。 Frostschutz 对类似问题的回答是我找到的唯一建议,用于追踪文件系统中的差异。它既麻烦又缓慢,我宁愿使用更好的方法先将其缩小到几个文件。
奇怪的是,md 的检查功能没有报告发现错误的位置。 我加入了printk在MD / raid5.c记录sh->sector在if该增量分支mddev->resync_mismatches中handle_parity_checks5()(小片在github上发布,最初基于4.5 RC4从kernel.org。)对于这个是确定用于一般用途,它可能会需要避免在修复中大量不匹配的日志(可能只在新值 …
我知道如何替换文件名中的一组字符。例如
for i in *example_text* ;
do
mv "$i" "`echo $i | sed 's/example_text//'`"
done
Run Code Online (Sandbox Code Playgroud)
如果文件名的一部分是“;”,我该怎么做?(引号之间)。每当我尝试运行时都会出现错误:
for i in *;* ;
do
mv "$i" "`echo $i | sed 's/;//'`"
done
Run Code Online (Sandbox Code Playgroud)
有小费吗?
我正在尝试学习操作系统概念。这是两个简单的Python代码:
while True:
pass
Run Code Online (Sandbox Code Playgroud)
和这个:
from time import sleep
while True:
sleep(0.00000001)
Run Code Online (Sandbox Code Playgroud)
问题:为什么运行第一个代码时 CPU 使用率为 100%,但运行第二个代码时 CPU 使用率约为 1% 到 2%?我知道这可能听起来很愚蠢,但为什么我们不能实施类似的事情sleep在不使用睡眠系统调用的情况下实现用户空间模式之类的东西?
注意:我试图理解Linux 内核的睡眠系统调用,但说实话我不明白那里发生了什么。我还搜索了 NOP 汇编代码,结果发现它并不是真的什么都不做做,而是做了一些无用的事情(比如 xchg eax、eax),也许这就是 100% CPU 使用率的原因。但我不确定。
究竟有哪些睡眠系统调用的汇编代码是我们无法在用户空间模式下执行的?是不是类似 HLT 的东西
我还尝试HLT在代码中使用汇编,如下所示:
section .text
global _start
_start:
hlt
halter:
jmp _start
section .data
msg db 'Hello world',0xa
len equ $ - msg
Run Code Online (Sandbox Code Playgroud)
但运行此代码后,我看到内核一般保护错误如下:
[15499.991751] traps: hello[22512] general protection fault ip:401000 sp:7ffda4e83980 error:0 in hello[401000+1000]
Run Code Online (Sandbox Code Playgroud)
不知道是不是和保护环有关,或者是我的代码错误?这里的另一个问题是操作系统是否在系统HLT调用下使用或其他受保护的汇编命令 …
我在终端运行 fortran77 程序
./program
Run Code Online (Sandbox Code Playgroud)
并且程序要求输入和输出文件。当我在一个文件中有输入和输出文件的名称时,我应该向终端写入什么 - 在两列中?我想为带有名称的文件中的所有行运行该程序。
或者 - 如何使用参数等输入信息运行程序?
或者如何直接在脚本中写入文件名?代替
READ(+,'(A)') OUT
Run Code Online (Sandbox Code Playgroud) 我女朋友有一个外置硬盘,里面有 10 年以上的照片、文档等。许多这些文件来自她的旧 iPhone 5 和她的 MacBook。硬盘本身是 NTFS 格式。由于磁盘太旧,它变成了数据丢失的危险(多么讽刺)。
当我们尝试将所有文件上传到 OneDrive 以安全存储它们时,由于文件名无效,我们遇到了 1,000 多个错误。我开始意识到与很多文件._,如./pic/92 win new/iphone/._IMG_1604.JPG。我不明白 macOS 以及为什么文件应该这样命名,但可以肯定的是,您永远无法像那样将它们放入 OneDrive。
所以我决定把它挂到我的树莓派上,并从命令行用错误的字符重命名所有文件。在列出了近万个文件后,我在整个硬盘上运行了以下内容。
find . -name "._*" | sed -e "p;s/\._//" | xargs -d '\n' -n2 mv
Run Code Online (Sandbox Code Playgroud)
此外,我使用 zmv 删除了文件名中的一些前导空格。
我首先在测试环境中尝试了该命令,看起来不错。但我没有检查文件大小。
我女朋友将硬盘重新连接到她的 Mac 后,所有重命名的文件都显示文件大小为 4KB(空)!我搞砸了,我不知道如何。
我假设数据仍然存在,但我以某种方式搞砸了文件系统。
有人明白我做错了什么吗?更重要的是,您是否有机会恢复文件?我将不胜感激任何建议。
虽然通常不需要超过 64k 个可用端口,但我对 PoC 感兴趣,即拥有 64 位端口号可以减轻对访问端口(ssh、vpn...)的常规攻击。拥有 64b 端口几乎不可能随机攻击服务,目标是 DoS 或登录。喜欢
ssh -p 141592653589793238 my.site.com
Run Code Online (Sandbox Code Playgroud)
并且实际上
我.jpg.gz在一个目录中有一堆文件需要解压缩。
我知道解压命令是:
tar -xzvf FileNameHere.jpg.gz
但是是否有一个标志可以递归解压缩目录中的文件?我有一百多个压缩文件,我不想手动解压缩每个文件。
此外,由于我通过 SSH 连接到托管服务,因此我只能使用以下命令:
arch
bzip2
cal
cksum
cmp
cp
crontab
basename
cd
chmod
ls
date
df
du
dos2unix
unix2dos
file
getfacl
gzip
head
hostid
tail
mkdir
mv
nslookup
sdiff
tar
uptime
wget
whois
unzip
Run Code Online (Sandbox Code Playgroud) 我有两个大文件,有超过 600 万条记录。这两个文件中的数据可以通过UID关联(如果对文件进行排序,应该在两个文件的同一行)。最终我需要从与第二个文件中的数据连接的第一个文件中获取数据。
问题是执行脚本需要 10 个小时才能处理大约 650,000 条记录!!
我想改进它。
UIDS=`cut -f1 -d',' sorted_UID_data1.txt`
for record in $UIDS
do
echo `grep $record sorted_UID_data1.txt| awk -F ',' '{print $2}'`,`grep $record sorted_UID_data2.txt` >> data.txt
done
Run Code Online (Sandbox Code Playgroud)
为了优化它,我想到了
TOTAL_RECORDS=`wc -l < sorted_UID_data1.txt`
recordId=1
while [ $recordId -le $TOTAL_RECORDS ]
do
echo `sed -n "${recordId}{p;q;}" sorted_UID_data1.txt| awk -F ',' '{print $2}'`,`sed -n "${recordId}{p;q;}" sorted_UID_data2.txt` >> data.txt
recordId=$(( $recordId + 1 ))
done
Run Code Online (Sandbox Code Playgroud)
这也花费了太多时间。
但是,我在想:如果我总是可以抓取文件的第一行怎么办?我已经看到这可以通过sed、tail或AWK来完成,但这似乎效率低下。
我该如何解决这个问题?
根据联机帮助页,readaheadLinux 特定:
符合
readahead() 系统调用是 Linux 特定的,应避免在便携式应用程序中使用它。
并且posix_fadvise是便携式的:
符合
POSIX.1-2001、POSIX.1-2008。请注意,在 POSIX.1-2001 TC1 中,len 参数的类型从 size_t 更改为 off_t。
但他们俩似乎都在做同样的事情。但是,除了冒着可移植性的风险之外,交换这两种功能还会产生什么后果呢?
因此,如果我输入如下命令,PID 4920子 shell 就会创建一个子进程 ( )。
linuxprobe@DESKTOP-TP0G72N:~$ (sleep 2;ps -f --forest;sleep 5)
UID PID PPID C STIME TTY TIME CMD
linuxpr+ 513 512 0 Feb17 pts/0 00:00:00 -bash
linuxpr+ 4920 513 0 01:35 pts/0 00:00:00 \_ -bash
linuxpr+ 4922 4920 0 01:35 pts/0 00:00:00 \_ ps -f --forest
Run Code Online (Sandbox Code Playgroud)
如果我输入如下命令,似乎没有创建子进程
linuxprobe@DESKTOP-TP0G72N:~$ (ps -f --forest)
UID PID PPID C STIME TTY TIME CMD
linuxpr+ 513 512 0 Feb17 pts/0 00:00:00 -bash
linuxpr+ 5511 513 0 01:45 pts/0 00:00:00 \_ ps …Run Code Online (Sandbox Code Playgroud) linux-kernel ×3
bash ×2
linux ×2
shell ×2
shell-script ×2
system-calls ×2
binary ×1
c ×1
cat ×1
corruption ×1
fortran ×1
gzip ×1
io ×1
kernel ×1
macintosh ×1
md ×1
mv ×1
networking ×1
ntfs ×1
port ×1
portability ×1
raid ×1
remote ×1
routing ×1
security ×1
sleep ×1
split ×1
ssh ×1
subshell ×1
tcp ×1
tty ×1
xfs ×1