我正在运行 OpenSUSE。我通常使用交互式非登录shell打开控制台,并且经常在登录后bash
使用。tcsh
我正在编写一些C
代码,使用 进行编译gcc
,并且我希望在可执行文件失败时创建核心转储文件。
我知道我可以手动选择核心转储大小不受限制,但我不想输入
limits coredumpsize unlimited
在tcsh
或
ulimit -c unlimited
bash
每次我以用户身份登录时都在默认 shell 中。
有没有办法在我以用户身份登录bash
和/或时自动设置核心转储大小tcsh
?
答案1
经过一番研究后,我可能已经解决了这个问题。一旦我登录到 UNIX 计算机,它就会home
根据所选的 shell 从系统上的文件中的可用目录中将我重定向到目录,\etc\passwd
如下所示:
alandella:x:1000:100:alandella:/home/alandella:/bin/bash
这解释了非登录交互式bash
shell (konsole)。 shell 就这样bash
运行吧tcsh
,登录/注销时会读取以下文件:
~/.login -> Executes cmds at login
~/.tcshrc -> same as ~./bashrc in bash and ~./cshrc in csh
~/.logout -> at logout
因此,通过将以下行添加到~/.tcshrc
和~/.bashrc
文件中:
~/.bashrc -> ulimit -Sc X
~/.tcshrc -> limit coredumpsize X
其中X
是一个值 (kB) 或unlimited
,它应该可以解决问题。
有时,系统还会告诉您要编辑该~/.profile
文件。我没有编辑它,即使我的bash
shell 在登录时获取它。为什么没有区别呢?因为我总是使用非登录 shell,所以我双击 konsole 打开终端。该~/.profile
文件在启动时仅在登录 shell 中获取(通常sh
是我不使用的)。我bash
按顺序查看以下文件:
.bash_profile -> .bash_login -> .profile
就我而言,前两个文件不存在,因此如果我使用登录 shell,则bash
源文件不存在。.profile
笔记。此操作必须以 root 身份完成,并且为了使此技巧发挥作用,必须/应该满足以下条件:
该文件
/etc/security/limits.conf
为用户和根设置合适的硬/软限制。如果将核心转储大小硬性限制为 2000 kB,那么当我们修改~/.bashrc
为 3000 kB 时,核心转储大小限制将继续为 2000 kB。抬头limits.conf
。下面的文件
/etc/pam.d
包含该session required pam_limits.so
行,以便允许/etc/security/limits.conf
进行设置。该文件
/etc/sysctl.conf
包含kernel.core_pattern = core.%e.%p
,这设置了生成的核心文件的格式,其中 %e 是可执行文件名,%p 是 pid。