我已经看过如何在 FTP 上执行 grep?- 这个问题意味着grep需要远程文件内容中的 a ;因此,答案是该ftp协议不支持(需要在本地下载所有远程文件,然后才能启动对其内容的搜索)。
我正在寻找更“简单”的东西 - 我只想 grep/搜索远程文件名;我想这需要以某种方式下载远程目录树。我怎么能通过命令行做到这一点?
考虑一下:
$ cd /tmp
$ echo "echo YES" >> prog/myprog
$ chmod +x prog/myprog
$ prog/myprog
YES
$ myprog
myprog: command not found
Run Code Online (Sandbox Code Playgroud)
我可以临时修改PATH为myprog按名称调用,如下所示:
$ PATH="$PATH":$(readlink -f prog) myprog
YES
Run Code Online (Sandbox Code Playgroud)
...但是我不能用这种方法链接命令:
$ PATH="$PATH":$(readlink -f prog) myprog && myprog
YES
myprog: command not found
Run Code Online (Sandbox Code Playgroud)
...显然修改后的PATH显然没有传播到第二次调用。
我知道我可以这样做:
$ PATH="$PATH":$(readlink -f prog) bash -c "myprog && myprog"
YES
YES
Run Code Online (Sandbox Code Playgroud)
...但是我必须调用一个额外的bash过程 - 更糟糕的是,我必须引用。
有没有什么方法可以将单行中的链接命令临时附加到 PATH 中,而不必调用 extrabash和引用?尝试反引号,它们不起作用:
$ PATH="$PATH":$(readlink -f prog) `myprog && myprog` …Run Code Online (Sandbox Code Playgroud) 我已经看到[已解决] 为什么 sudo 在 tmux/ssh 会话中要求输入用户密码?· GitHub Gist,看起来这是设计使然,但我想我还是会问:
假设我使用这样的命令:
tmux new-session -d 'sudo udevadm monitor -e' \; attach
Run Code Online (Sandbox Code Playgroud)
一旦tmux开始新会话,它就会sudo按预期要求输入密码。但后来我尝试通过sudo事先验证来“作弊” :
$ sudo --validate
[sudo] password for user:
$ tmux new-session -d 'sudo udevadm monitor -e' \; attach
Run Code Online (Sandbox Code Playgroud)
...这要求再次对sudo密码尽快tmux启动对话-即使我已输入密码成功提前。
那么有没有一种方法可以tmux在内部使用 (a) sudo 处理的进程启动会话,并且事先只有一个 sudo 密码验证?
我在 Ubuntu 11.04 上,我有:
$ locate --version
mlocate 0.23.1 [...]
Run Code Online (Sandbox Code Playgroud)
该man locate页面说:
如果未指定 --regex,则 PATTERN 可以包含通配符。如果任何 PATTERN 不包含通配符,则 locate 的行为就像模式是 *PATTERN* 一样。
好的,所以做一个小测试:首先,只搜索 'lua' 工作 - 但返回一吨(500+)的结果:
$ locate 'lua' | head -5
/boot/grub/hwmatch.lua
/etc/alternatives/lua-compiler
/etc/alternatives/lua-compiler-manual
/etc/alternatives/lua-interpreter
/etc/alternatives/lua-manual
$ locate 'lua' | wc -l
560
Run Code Online (Sandbox Code Playgroud)
我想搜索.so文件lua名中的文件,所以我尝试使用通配符模式:
$ locate 'lua*so*'
Run Code Online (Sandbox Code Playgroud)
没有,0 个结果。所以我正在尝试使用正则表达式:
$ locate --regex 'lua.*so.*' | head -5
/usr/lib/libipelua.so.7.0.10
/usr/lib/liblua5.1.so
/usr/lib/liblua5.1.so.0
/usr/lib/liblua5.1.so.0.0.0
/usr/lib/gtk-2.0/2.10.0/engines/libluaengine.so
Run Code Online (Sandbox Code Playgroud)
嗯,这是有效的 - 所以它已经足够好了。
但是让我感到困惑的是 - 如果手册页说在不使用正则表达式时支持通配符,我应该如何格式化我的通配符模式以使其工作?
我有一台装有 Ubuntu 10.04 的小型服务器;我通过从另一台计算机操作此服务器ssh,并尝试使用nfs它来共享文件。这主要是有效的,直到其中一个客户端卸载并且我想nfs-kernel-server在服务器上关闭。虽然停止似乎是正确的:
$ sudo service nfs-kernel-server stop
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
Run Code Online (Sandbox Code Playgroud)
...我确实在日志中得到了这样的信息:
Feb 5 11:50:17 user init: statd main process (3806) killed by KILL signal
Feb 5 11:50:17 user init: statd main process ended, respawning
Feb 5 11:50:17 user init: idmapd main process (3808) killed by KILL signal
Feb 5 11:50:17 user init: idmapd main process ended, respawning …Run Code Online (Sandbox Code Playgroud) 我在一台系统驱动器有限的机器上使用 Ubuntu 20.04。
我遇到了一个构建脚本,用于检查 中的可用大小/tmp,如果它没有看到 12 GB 可用空间(我的系统驱动器上没有该空间),它就会拒绝运行。
不过,我的这台机器上确实有另一个 NTFS 驱动器;由于它是NTFS,我不能真正直接使用它,但我可以创建一个磁盘映像。
因此,我想到在 NTFS 分区上创建一个 16 GB 的 ext3 映像,然后将其挂载为 /tmp。
所以,我尝试过:
dd if=/dev/zero of=tmp16.img bs=16M count=0 seek=1024
mkfs.ext3 ./tmp16.img
fdisk -l ./tmp16.img
e2label ./tmp16.img tmp16
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好——所有这些都有效;但后来我尝试安装:
$ sudo mount -o remount /path/to/ntfs/tmp16.img /tmp
mount: /tmp: mount point not mounted or bad option.
Run Code Online (Sandbox Code Playgroud)
Ups,一定是我在某个地方的旧记忆,那/tmp是一个单独的安装 - 事实证明,在这台机器上,/tmp不是一个单独的安装:
$ mount | grep tmp
udev on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=3970256k,nr_inodes=992564,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=802768k,mode=755)
tmpfs on …Run Code Online (Sandbox Code Playgroud) 假设我们有以下内容test.txt:
# commented line, no match
# commented line, would match /app/
# again commented, would match app
non commented line, matchin /app
non commented line, no match
Run Code Online (Sandbox Code Playgroud)
我想获取所有包含单词“ app”的行 - 但不是那些有注释的行 - 我希望输出文件名。
grep -H 'app' test.txt显然,平凡的匹配所有内容并且不会避免以数字/哈希字符开头的行#:
带有-v, --invert-match选项的第二个 grep 的管道通常会弄乱颜色,并且为了保留-H文件名,我将无法为^#(即行首的数字/哈希字符)指定否定匹配,所以我有使用野兽喜欢grep -H app test.txt --color=always | grep -v '\[K:.\[m.\[K#'保留颜色:
...但只有在做类似这样的事情之后grep -H app test.txt --color=always | hexdump -C,我才能看到正确的字符组合,温和地说,这是乏味的。
不幸的是,似乎不能使用该-v选项在-e …
我有一个包含文本文件的小项目文件夹,我想将其张贴在某处以便在论坛上提问。在最简单的情况下,让我们假设我有这样的事情:
mkdir aaa
cd aaa
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
Run Code Online (Sandbox Code Playgroud)
显然,我想要子文件夹结构:
aaa/
??? aaa.txt
??? bbb
??? bbb.txt
Run Code Online (Sandbox Code Playgroud)
......当我分享这个时会被保留下来。所以我想首先使用https://gist.github.com/并为每个文件输入子目录名称;不幸的是 github 回应:
内容文件不能在子目录中或在名称中包含“/”
...而且我不打算在那里注册,只是为了能够通过 检出子目录并将子目录提交到要点git,对于这样的事情(人们希望他们接受 openID,但是......呃)。
所以,我想,也许我可以以某种方式将整个目录结构和文件内容打包为一个diff补丁文件;那么作为单个文件,应该很容易上传到一个要点。但是,我不知道如何指定我的文件夹和空文件夹之间的差异;我试过:
$ diff -Naur /dev/null /tmp/aaa
diff: /tmp/aaa/null: No such file or directory
Run Code Online (Sandbox Code Playgroud)
......但显然,这行不通。
但是,原则上应该是可能的 - 这是一个测试用例git:
mkdir aaa
cd aaa
git init
git config user.name test
git config user.email test@test.com
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
git …Run Code Online (Sandbox Code Playgroud) (这个问题可能与Linux的:模拟/后安装的屏蔽用户所有权“外部”分区-堆栈溢出)
我通常使用 Ubuntu(目前是 11.04)作为我的桌面操作系统;假设在那里,我是myselfuid=1000的用户,是myselfgid=1000的组的一部分;所以基本上主目录权限如下所示:
> stat ~
File: `/home/myself'
...
Access: (0755/drwxr-xr-x) Uid: ( 1000/ myself) Gid: ( 1000/ myself)
Run Code Online (Sandbox Code Playgroud)
现在,在同一台机器上,我有时需要通过 LiveUSB (Live-CD) 启动 OpenSuse(当前为 11.2)。所有这些对我来说都很好,除了 Live-CD 环境中的默认用户是linuxuid=999,属于usersgid=100的组;所以主目录权限如下所示:
> stat ~
File: `/home/linux'
...
Access: (0755/drwxr-xr-x) Uid: ( 999/ linux) Gid: ( 100/ myself)
Run Code Online (Sandbox Code Playgroud)
因此,基本上,当我在实时 OpenSUSE(其默认用户为 999:100)下安装我的 Ubuntu 驱动器(由 1000:1000 所有)时,我无法像往常一样访问它们,即:
linux@linux:~> touch /media/extdrive/xxx
touch: cannot touch `/media/extdrive/xxx': Permission denied
Run Code Online (Sandbox Code Playgroud)
所以,我想我应该尝试更改linux:usersOpenSUSE 机器上的默认 uid/gud ,所以我尝试了这个:
> sudo /usr/sbin/usermod …Run Code Online (Sandbox Code Playgroud) 我正在尝试研究这个:如何将目录内容的 MD5 总和作为一个总和?,所以我正在尝试:
$ find | LC_ALL=C sort | cpio -o | md5sum
25324 blocks
6631718c8856606639a4c9b1ef24d420 -
Run Code Online (Sandbox Code Playgroud)
嗯...我只想要哈希值,而不是输出中的任何其他内容...因此假设“25324 个块”已打印到 stderr,我尝试将 stderr 重定向到/dev/null:
$ find | LC_ALL=C sort | cpio -o | md5sum 2>/dev/null
25324 blocks
6631718c8856606639a4c9b1ef24d420 -
Run Code Online (Sandbox Code Playgroud)
不,不是这样的。为了测试起见,我们尝试将 stdout 重定向到/dev/null:
$ find | LC_ALL=C sort | cpio -o | md5sum 1>/dev/null
25324 blocks
Run Code Online (Sandbox Code Playgroud)
好的,哈希值按预期消失了 - 但“块”消息仍然存在?!通过文件描述符 3 打印的“25324 个块”到底在哪里?!:
$ find | LC_ALL=C sort | cpio -o | md5sum 3>/dev/null
25324 blocks
6631718c8856606639a4c9b1ef24d420 - …Run Code Online (Sandbox Code Playgroud) bash ×2
chown ×1
command-line ×1
diff ×1
disk-image ×1
filesystems ×1
ftp ×1
grep ×1
group ×1
hard-disk ×1
linux-kernel ×1
locate ×1
patch ×1
path ×1
permissions ×1
pipe ×1
reboot ×1
shell-script ×1
sudo ×1
tmp ×1
tmux ×1
users ×1
wildcards ×1