Unix & Linux

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

2
全屏应用后清除GNU屏幕
在正常的xterm(不确定“真正的”终端)上工作时,关闭诸如man或vim之类的全屏程序时,它会消失,并离开屏幕,以便您可以看到您的提示以及以前的提示,包括您在何处启动了关闭的程序。 但是,当我在GNU屏幕上运行时,关闭程序时不会清除它,而只是向上移动以显示提示。对我来说,这很丑陋,我想知道是否可以恢复“正常”行为。 我知道我可以自己手动清除屏幕,但是a)我不想清除屏幕,b)会导致屏幕完全清晰,而不是我想要的(虽然可能更好,但如果效果还不错) 。

3
100%分页到页面缓存中的文件被另一个进程修改后会发生什么
我知道修改页面缓存页面后,它会被标记为脏页面并需要回写,但是在以下情况下会发生什么: 方案: 文件/ apps / EXE是可执行文件,已完全分页到页面缓存中(所有页面都在缓存/内存中),并由进程P执行 然后,连续发行版将/ apps / EXE替换为全新的可执行文件。 假设1: 我假设进程P(以及其他任何具有引用旧可执行文件的文件描述符的人)将继续使用旧的/ apps / EXE内存,并且尝试执行该路径的任何新进程都将获得新的可执行文件。 假设2: 我假设,如果不是文件的所有页面都映射到内存中,那么在出现页面错误要求文件中的页面已被替换之前,一切都会好起来的,并且可能会发生段错误? 问题1: 如果用vmtouch等文件锁定文件的所有页面,这是否会完全改变方案? 问题2: 如果/ apps / EXE位于远程NFS上,那会有什么不同吗?(我认为不是) 请更正或验证我的2个假设,并回答我的2个问题。 我们假设这是一个带有某种3.10.0-957.el7内核的CentOS 7.6盒子 更新:进一步考虑,我想知道这种情况是否与其他脏页情况没有区别。 我猜写新二进制文件的过程将进行读取并获取所有缓存页面,因为它们都已被分页,然后所有这些页面都将被标记为脏。如果它们被锁住了,则在ref计数变为零后,它们将只是无用的页面而占用核心内存。 我怀疑当前执行的程序结束时,其他任何东西都将使用新的二进制文件。假设一切正确,我猜只有在仅部分文件进入页面时才有意思。

1
为什么需要插入12个字符来清除此bash命令行?
我打开一个xterm终端(80列x 24行),然后运行$ bash --norc --noprofile,然后$ tty获取终端的文件名:输出为/dev/pts/9。 从另一个终端运行: $ printf foo >/dev/pts/9 foo在第一个终端的shell命令行上打印。 如果我按C-u运行unix-line-discard(由给出的函数名称$ bind -P | grep -i c-u),foo则不会删除。 如果我插入11个空格并按C-u,空格将被删除,但不会被删除foo。 如果我插入12个空格并按C-u,空格也会被删除foo。 为什么在光标紧靠其后foo按下C-u时无法删除?为什么需要插入12个字符才能删除? 环境: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial $ bash --version | head -n1 GNU bash, …

2
为什么在使用$ RANDOM时得到的结果分布不均?
我在Wikipedia$RANDOM上阅读了有关RNG的内容,并在TLDP上了解了其功能,但是它并不能真正解释这个结果: $ max=$((6*3600)) $ for f in {1..100000}; do echo $(($RANDOM%max/3600)); done | sort | uniq -c 21787 0 22114 1 21933 2 12157 3 10938 4 11071 5 为什么大约2倍以上的值更倾向于0、1、2而不是3、4、5,但是当我更改最大模数时,它们几乎均等地分布在所有10个值上? $ max=$((9*3600)) $ for f in {1..100000}; do echo $(($RANDOM%max/3600)); done | sort | uniq -c 11940 0 11199 1 …
14 random 


5
为什么仍使用驱动器/分区号?
很多时候,尤其是在与引导加载程序打交道时,我会看到使用了数字驱动器和分区号。例如,在我/boot/grub/grub.cfg看来set root='hd0,gpt2',我的UEFI引导条目经常引用驱动器/分区号,并且在涉及引导加载程序的几乎所有情况下,它似乎都是出现的。 现在我们有了UUID和PARTUUID,以这种方式寻址分区似乎异常不稳定(afaik,不能保证驱动器总是以相同的顺序安装,用户可以移动将驱动器插入其主板的顺序,等等)。 因此,我的问题是双重的: 这种寻址方案是否像我上面概述的那样不稳定?我是否在标准中遗漏了一些东西,这意味着该方案比我预期的要可靠得多,还是由于仅在驱动器中识别出驱动器,该寻址方案会真正使您的系统无法启动(至少要修复启动项)。不同的顺序或将它们插入主板上的不同插槽? 如果以上问题的答案为是,那么为什么继续使用此寻址方案?使用UUID或PARTUUID进行所有操作是否会更加稳定和一致?

4
如何在Linux中实现文件系统驱动程序驱动程序?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 11个月前关闭。 假设我已经发明了一个新的文件系统,现在我想为其创建文件系统驱动程序。 如何使用内核模块完成此文件系统驱动程序? 文件系统驱动程序如何访问硬盘,文件系统驱动程序应包含访问硬盘的代码,还是Linux包含设备访问所有文件系统驱动程序使用的硬盘的驱动程序?

3
是否存在一个始终存在的文件,并且“普通”用户无法对其进行统计?
我需要此单元测试。有一个函数对作为其参数传递的文件路径执行lstat。我必须在lstat失败的地方触发代码路径(因为代码覆盖率必须达到90%) 该测试只能在单个用户下运行,因此我想知道Ubuntu中是否存在一个始终存在的文件,但普通用户对该文件或文件夹没有读取权限。(因此lstat除非以超级用户身份执行,否则将失败。) 不存在的文件不是解决方案,因为有一个单独的代码路径已由我触发。 编辑:仅缺少对该文件的读取访问权是不够的。这样lstat仍然可以执行。通过在/ root中创建一个文件夹并在其中创建文件,我能够触发它(在我具有root访问权限的本地计算机上)。并在文件夹上设置权限700。因此,我正在搜索只能由root用户访问的文件夹中的文件。

2
以双连字符(-)开头的shebang如何工作?
我在RosettaCode页中发现了以下类型的shebang: --() { :; }; exec db2 -txf "$0" 它适用于Db2,适用于Postgres。但是,我不了解整条线。 我知道双破折号是SQL中的注释,此后它使用一些参数将文件本身作为文件传递给Db2可执行文件。但是圆括号,卷曲的小节,冒号和分号又如何替换真正的shebang#呢?? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL


2
CentOS上的iotop命令出错
在新安装的CentOS 7.5的终端中使用sudo iotop(最新版本0.6-2.el7)时,出现以下错误消息: Traceback (most recent call last): File "/sbin/iotop", line 17, in <module> main() File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 620, in main main_loop() File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 610, in <lambda> main_loop = lambda: run_iotop(options) File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 508, in run_iotop return curses.wrapper(run_iotop_window, options) File "/usr/lib64/python2.7/curses/wrapper.py", line 43, in wrapper return func(stdscr, *args, …
14 centos  python  iotop 


3
如果我的应用程序从一开始就可以运行在较低级别,为什么还要使用chroot进行沙箱安全管理?
我正在用C语言编写HTTP服务器守护程序(有原因),并使用systemd单元文件对其进行管理。 我正在重写一个20年前设计的应用程序,大约在1995年。他们使用的系统是先创建chroot,然后设置setuid,再执行标准过程。 现在,在我以前的工作中,通常的策略是永远不要以root用户身份运行任何进程。您为此创建一个用户/组并从那里运行。当然,系统确实以root身份运行某些东西,但是我们无需root即可完成所有业务逻辑处理。 现在,对于HTTP守护程序,如果不在应用程序内部chroot,则可以在没有root的情况下运行它。那么,永远不要以root用户身份运行应用程序是否更安全? 从一开始就以mydaemon-user身份运行它是否更安全?不用以root身份启动,chroot,然后将setuid设置为mydaemon-user?
14 chroot  daemon 

3
为什么不使用systemctl \ {restart,status} \ sshd \; 工作?
当通过echo传递时,上述命令的输出为: # echo systemctl\ {restart,status}\ sshd\; systemctl restart sshd; systemctl status sshd; 即使我将输出粘贴到终端,该命令仍然有效。但是当我尝试直接运行命令时,我得到: # systemctl\ {restart,status}\ sshd\; bash: systemctl restart sshd;: command not found... 我有两个问题。 这种替代和扩展方法到底叫什么?(以便我可以对其进行研究并了解更多信息以及如何正确使用它)。 我在这里做错了什么?为什么不起作用?


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.