Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答

3
如何在后台运行无限循环
在继续执行脚本的同时,如何在后台运行无限循环? 示例“脚本”: while true; do something_in_the_background; done do_something_while_the_loop_goes_on_in_the_background for 1 2 3; do somethingelse; done exit 0 &不久后,这(注意)似乎使整个系统崩溃: while true; do something_in_the_background & done do_something_while_the_loop_goes_on_in_the_background for 1 2 3; do somethingelse; done exit 0
17 bash 


1
锁定该进程(忽略SIGKILL)是可运行的(不是僵尸或处于不间断的睡眠状态)。它处于什么状态?
我有一个进程,现在已经有几次停止响应了,并且似乎已完全锁定。它不会响应任何使用gdb进行strace或偷看的尝试(gdb挂在wait4()syscall上)。该进程是可运行的,并且不等待syscall(/ proc / X / syscall:)running或处于不间断的睡眠状态(/ proc / X / status:)State: R (running)。 这个过程到底处于什么状态?这可能是某种类型的内核错误吗? 该过程是redis,现在已经发生了几次。看来,唯一可以杀死该进程的是重新启动。操作系统为美分7。 编辑:内核版本是3.10.0-123.13.2.el7.x86_64。尝试更新到3.10.0-229.11.1.el7,以查看是否有任何区别。


2
允许所有者创建和读取文件,但不允许修改或删除
我想授予用户在特定目录中创建和读取文件的权限,但不允许修改或删除文件。如果用户可以将文件追加到确定的位置,但是我宁愿不这样做。这是在Ubuntu Linux上。 我认为使用标准的Unix文件权限是不可能的,但是使用ACL可能做到这一点吗?用户将始终使用SFTP进行连接,因此,如果有某种方法可以在SFTP中进行控制(相对于OS权限),那就很好了。 绝对清楚,我想要以下几点: echo hello> test#成功,因为测试不存在,并且允许创建 echo hello >> test#是成功还是失败,取决于是否允许附加 echo hello2> test#失败,因为测试已经存在,并且不允许修改 cat test#成功,因为允许读取 rm test#失败,因为不允许删除 如果您想知道为什么要这样做,那就是制作一个能够抵抗勒索软件的Duplicati备份系统。
17 linux  files  permissions  acl 

4
如何将一个程序的标准输入作为arg传递给另一个程序?
假设存在一个有两个参数的程序;输入文件和输出文件。 如果我不想将此输出文件保存到磁盘上,而是直接将其传递给stdin另一个程序怎么办?有没有办法做到这一点? 我在Linux上遇到的许多命令都提供了一个选项来传递“-”作为输出文件参数,这与我上面指定的功能相同。这是因为stdin无法将程序的作为参数传递吗?如果是,我们该怎么做? 我如何使用此图像的示例是: pdftotext "C BY BRIAN W KERNIGHAN & DENNIS M RITCHIE.pdf" stdin(echo) 我正在使用的外壳是bash。


2
重新安装缺少/损坏的文件的软件包
不正常的关机和色彩斑f的fsck之后,一堆文件丢失了。'rpm -Va'的输出长度为几百行(主要是丢失的文件,而且还有一些校验和和其他不匹配项)。有没有简单的方法可以重新安装缺少文件和/或损坏的软件包? 有问题的操作系统是Fedora 22。
17 fedora  yum  rpm  dnf 

3
如何“删除”名为“-”的文件?
我不小心创建了一个名称为-(例如seq 10 > -)的文件。然后我尝试使用less它来查看它,但是它只是挂起了。 我知道发生这种情况是因为less -期望从输入stdin,所以它不会将解释-为文件名。我试过了,less \-但是也不行。 那么,有没有办法表明less它-是文件而不是stdin? 我能得到的最好的是: find -name '-' -exec less {} +
17 less  stdin 

2
在Linux中,unix域套接字路径开头的@符号表示什么?
当我运行时,netstat --protocol unix或lsof -U看到某些unix套接字路径前面带有@符号,例如@ / tmp / dbus-qj8V39Yrpa。然后,当我运行时,我在ls -l /tmp那里看不到名为dbus-qj8V39Yrpa的文件。 问题是,@符号前面表示什么?第二个相关的问题是-我实际上在文件系统上哪里可以找到该unix套接字文件(@ / tmp / dbus-qj8V39Yrpa)?
17 linux  path  socket 


1
如果给定不完整的目录名称,cd自动选择是否是标准行为?
我有三个文件夹ProjectA,分别为ProjectB和ProjectC。当我tab-complete cd到cd Project并按Enter,它选择ProjectC。我发现其他类似情况也是如此。它默认为按字典顺序排列的最后一个(但这也可能是最近更改/添加的)。 这是预期的默认行为cd,还是我在这里意外设置了某些内容? 我正在使用bash 4.3运行OSX 10.10.3。

2
用环境设置的可执行路径编写系统单元文件
我正在为Java应用程序编写一个systemd单元文件,我想控制用于启动它的Java版本。我的(简化)服务文件是 [Service] Type=simple EnvironmentFile=%h/Documents/apps/app/app-%i/app.cfg ExecStart=${JAVA_HOME}/bin/java ${JAVA_OPTS} -jar %h/Documents/apps/app/app-%i/myapp.jar SuccessExitStatus=143 尝试启动时,出现错误提示 Apr 28 12:43:37 rombert systemd[1613]: [/home/robert/.config/systemd/user/app@.service:7] Executable path is not absolute, ignoring: ${JAVA_HOME}/bin/java ${JAVA_OPT Apr 28 12:43:37 rombert systemd[1613]: app@1.0.0.service lacks both ExecStart= and ExecStop= setting. Refusing. 我知道这JAVA_HOME是正确设置的;如果我将ExecStart行更改为开头,/usr/bin/java然后添加一些内容,就像-DsomeOption=${JAVA_HOME}我看到的一样。 显而易见的解决方法是创建一个包装器脚本,但是我觉得它超出了使用服务文件的目的。 如何使用单元文件为Java应用程序设置JAVA_HOME?
17 systemd  java 


3
找出哪些文件描述符共享相同的“打开文件描述”
如果我这样做(在类似Bourne的外壳中): exec 3> file 4>&3 5> file 6>> file 由于3是dup()ed的4,所以文件描述符3和4 共享相同的打开文件描述(相同的属性,文件中的相同偏移量...)。虽然该过程的文件描述符5和6在不同的打开文件描述中(例如,它们各自在文件中都有自己的指针)。 现在,在lsof输出中,我们看到的是: zsh 21519 stephane 3w REG 254,2 0 10505865 /home/stephane/file zsh 21519 stephane 4w REG 254,2 0 10505865 /home/stephane/file zsh 21519 stephane 5w REG 254,2 0 10505865 /home/stephane/file zsh 21519 stephane 6w REG 254,2 0 10505865 /home/stephane/file 更好lsof +fg: …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.