小编sda*_*aau的帖子

搜索/grep ftp 远程文件名

我已经看过如何在 FTP 上执行 grep?- 这个问题意味着grep需要远程文件内容中的 a ;因此,答案是该ftp协议不支持(需要在本地下载所有远程文件,然后才能启动对其内容的搜索)。

我正在寻找更“简单”的东西 - 我只想 grep/搜索远程文件名;我想这需要以某种方式下载远程目录树。我怎么能通过命令行做到这一点?

command-line ftp

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

Bash one-liner 临时附加链接命令的路径而不需要额外的 bash 调用?

考虑一下:

$ 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)

我可以临时修改PATHmyprog按名称调用,如下所示:

$ 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)

bash path environment-variables

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

tmux 是否没有为会话中的进程询问 sudo 密码(事先进行身份验证)?

我已经看到[解决] 为什么 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 密码验证?

tmux sudo

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

使用“locate”进行通配?

我在 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)

嗯,这是有效的 - 所以它已经足够好了。

但是让我感到困惑的是 - 如果手册页说在不使用正则表达式时支持通配符,我应该如何格式化我的通配符模式以使其工作?

wildcards locate

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

“最后的手段”Linux 终端命令在内核错误的情况下重新启动(通过 ssh)?

我有一台装有 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)

linux-kernel reboot

4
推荐指数
2
解决办法
7394
查看次数

在实时系统上更改 /tmp (以增加可用空间)?

我在一台系统驱动器有限的机器上使用 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)

hard-disk tmp disk-image

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

grep 两个条件,一个否定,没有管道?

假设我们有以下内容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显然,平凡的匹配所有内容并且不会避免以数字/哈希字符开头的行#

term1.png

带有-v, --invert-match选项的第二个 grep 的管道通常会弄乱颜色,并且为了保留-H文件名,我将无法为^#(即行首的数字/哈希字符)指定否定匹配,所以我有使用野兽喜欢grep -H app test.txt --color=always | grep -v '\[K:.\[m.\[K#'保留颜色:

term2.png

...但只有在做类似这样的事情之后grep -H app test.txt --color=always | hexdump -C,我才能看到正确的字符组合,温和地说,这是乏味的。

不幸的是,似乎不能使用该-v选项在-e …

grep

3
推荐指数
1
解决办法
294
查看次数

将目录及其内容打包为差异补丁?

我有一个包含文本文件的小项目文件夹,我想将其张贴在某处以便在论坛上提问。在最简单的情况下,让我们假设我有这样的事情:

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)

bash diff patch

3
推荐指数
1
解决办法
1871
查看次数

在系统范围内更改用户和组 ID(包括文件系统属性)?

这个问题可能与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)

filesystems users permissions group chown

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

如何摆脱 cpio 给出的“blocks”消息?

我正在尝试研究这个:如何将目录内容的 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)

pipe io-redirection shell-script

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