考虑以下文件:
file1:
boo,8,1024
foo,7,2048
Run Code Online (Sandbox Code Playgroud)
file2:
foo,0,24,154
noo,0,10,561
Run Code Online (Sandbox Code Playgroud)
file3:
24,154,7,1024,0
Run Code Online (Sandbox Code Playgroud)
我需要的是去File1并检查是否$2==7;如果为真,取$1,$2和$3来自File1 ; 现在我必须比较$1来自File1 是否等于$1来自File2;如果为真,我必须从File1中不存在的File2取$3和,然后我必须转到File3并检查from File3是否等于from File2,以及from File3等于from File2;如果是,那么我必须检查是否来自File1$4$1$3$2$4$2等于$3from File3,那么如果这个条件为真,我必须比较$3from File1和$4from File3,如果$3from File1大于$4from File3。
我尝试了以下脚本: …
我尝试按照 shell 脚本删除所有带下划线的空格:
find $1 -depth -name "* *" -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
Run Code Online (Sandbox Code Playgroud)
如果我有一个目录,/home/user/g h/y h/u j/它会将y h目录修改为y_h,然后它会给出以下错误/home/user/g h/y h/u j:
No such file or directory
Run Code Online (Sandbox Code Playgroud) 我有一组 linux 文件夹,我需要以数字方式获取文件夹的权限。
例如在下面的目录中,我需要文件夹的权限值是什么...无论是 755、644 还是 622 等...
drwxrwsr-x 2 dev puser 4096 Jul 7 2014 fonts
Run Code Online (Sandbox Code Playgroud) man man页面摘录:
默认操作是按照预定义的顺序搜索所有可用部分(默认为“1 nl 8 3 2 3posix 3pm 3perl 5 4 9 6 7”)
手册的n,l和3pm部分是什么?
我正在STDIN使用read如下方式将数据传递到数组中:
prompt$ cat myfile
a "bc" "d e" f
prompt$ read -a arr < myfile
Run Code Online (Sandbox Code Playgroud)
但read似乎没有注意引用的字符串并为我提供了一个包含 5 个元素的数组:
prompt$ echo ${#arr[@]}
5
prompt$ echo ${arr[@]:0}
a "bc" "d e" f
prompt$ echo ${arr[2]}
"d
prompt$ echo ${arr[3]}
e"
Run Code Online (Sandbox Code Playgroud)
我正在使用默认IFS设置:\t\n在bash. 有几种方法可以使用不同的工具完成任务,但令我惊讶的是 read 不支持带引号的字符串。
将带引号的分隔列表放入数组中的任何其他建议?
我想知道我是否可以将条目/etc/ld.so.conf排序。
我ld.so.conf现在看起来像这样:
/usr/X11R6/lib64/Xaw3d
/usr/X11R6/lib64
/usr/lib64/Xaw3d
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib
/usr/lib/Xaw3d
/usr/x86_64-suse-linux/lib
/usr/local/lib
/opt/kde3/lib
/usr/local/lib64
/opt/kde3/lib64
/lib64
/lib
/usr/lib64
/usr/lib
/usr/local/cuda-6.5/lib64
Run Code Online (Sandbox Code Playgroud)
当我排序时,它看起来像这样 - 我可以安全地进行排序还是它们是我会“破坏”排序的一些依赖项?
/lib
/lib64
/opt/kde3/lib
/opt/kde3/lib64
/usr/X11R6/lib
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib64
/usr/X11R6/lib64/Xaw3d
/usr/lib
/usr/lib/Xaw3d
/usr/lib64
/usr/lib64/Xaw3d
/usr/local/cuda-6.5/lib64
/usr/local/lib
/usr/local/lib64
/usr/x86_64-suse-linux/lib
include /etc/ld.so.conf.d/*.conf
Run Code Online (Sandbox Code Playgroud) 这里是输出ps:
$ ps aux | grep blob
ubuntu 4286 0.0 0.1 34748 9592 ? S Jan14 0:00 /usr/bin/python /usr/local/bin/pynt start_blob_reader
ubuntu 4287 0.0 0.1 34748 9596 ? S Jan14 0:00 /usr/bin/python /usr/local/bin/pynt start_blob_reader
ubuntu 4288 0.0 0.0 4444 656 ? S Jan14 0:00 /bin/sh -c python -m blob_manager blob
ubuntu 4289 1.2 0.2 65512 20668 ? S Jan14 1974:18 python -m blob_manager blob
ubuntu 4290 0.0 0.0 4444 656 ? S Jan14 0:00 /bin/sh -c python -m blob_manager …Run Code Online (Sandbox Code Playgroud) 所以这应该很简单。我正在尝试测试脚本顶部的条件并在条件失败时退出整个脚本,并且我有两个语句要在退出时执行。有一个单独的exit没有第二个语句,这很好,但是无论我如何添加第二个语句,我都无法让它完全退出。隐含的装饰规则是这一切都必须在一行上。当对脚本的这种单行更改没有按预期工作时,我发现了这一点。剧本一直在进行。
首先让我展示一下什么是有效的。如果 $USER 变量不是“x”,则以下行完全退出,这很好。我知道这是有效的,因为在终端窗口中输入这一行将关闭该终端窗口(除非您的用户 ID 确实是“x”),因此它实际上是在执行顶级退出:
[ $USER = 'x' ] || exit 1
Run Code Online (Sandbox Code Playgroud)
所以这很好,就像我想要的那样,除了我想在退出之前回显一条消息;但是,如果我尝试添加回声,则退出不再发生,或者它似乎以“不同的方式”发生,例如可能在 bash 函数上下文或其他内容中。下一行不会关闭您的终端,这很糟糕。
[ $USER = 'x' ] || (echo "Time to bail" ; exit 1)
Run Code Online (Sandbox Code Playgroud)
我想也许分号被回声吃掉了,但不,出口似乎被击中了。我怎么知道?我更改了上面的代码,然后回显了 $? 我看到了我在上面看到“1”的地方放的任何值。当然,我是在我想关闭的终端窗口中查看这些值,但它并没有关闭。
下一个变体还显示了执行 echo 和第二个语句的第二种方法,但在使用 exit 时会再次发生完全相同的行为:
[ $USER = 'x' ] || (echo "Time to bail" && exit 1)
Run Code Online (Sandbox Code Playgroud)
我希望这里有人能让这一切不仅不奇怪而且看起来很合理。
那么这不可能在一条线上完成吗?
( bash --version: GNU bash, version 4.3.30(1)-release)
鉴于来自 hashdeep 的输出文件的以下组成部分:
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
Run Code Online (Sandbox Code Playgroud)
我将如何将其格式化为:
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
Run Code Online (Sandbox Code Playgroud)
我想使用 sed (因为这是我开始掌握的),但是有没有办法告诉 sed 仅在特定列或特定列中出现字符时才更改字符?
当然,如果有其他方法可以做到这一点,我也会很高兴听到这个消息。
这样做的原因是我想根据文件名对输出进行排序,以便我可以比较两个输出文件,而不必-j0在 hashdeep 上使用(单线程)选项。
sudo启动时被提升为 root,因为它的二进制文件已setuid启用。但是,当我赋予/bin/login确切的权限时sudo,并尝试从非 root 用户运行它时,出现错误:
No utmp entry. You must exec "login" from the lowest level "sh"
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,这个错误是什么意思?我的第二个是,为什么当我sudo login从同一个用户运行时它会起作用?除了使用asetuuid提升到root之外,还有什么sudo工作?我写了一个简单的dash脚本~/root来运行whoami和退出,但它返回我的非特权用户的用户名。
$ ls -l ./root /usr/bin/sudo
-rwsr-xr-x 1 root root 29 Jul 15 02:40 ./root
-rwsr-xr-x 1 root root 157760 Jan 10 2016 /usr/bin/sudo
$ ./root
unprivileged user
Run Code Online (Sandbox Code Playgroud)
所以我有三个问题:
login?login与sudo?whoami不起作用?