小编Gra*_*eme的帖子

如何永久设置环境变量

我的变量是

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64
Run Code Online (Sandbox Code Playgroud)

如何永久保存这些变量?

environment-variables

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

adduser 做什么而 useradd 不做什么?

除了更广泛的useraddDebian 系统之外,还包含一个额外的adduser命令,该命令为添加用户和一些相关任务提供了更高级别的界面。其他 SE 站点上有各种问题/答案,其中详细说明了这些命令之间的基本区别,例如:

大多数答案基本上都说adduser为交互式添加用户提供了更好的界面,但没有提供adduser与useradd. 所以:

  1. 什么adduser不做useradd?
  2. 我需要使用哪些命令来产生等效的结果?

users ubuntu debian useradd

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

什么定义了命令单个参数的最大大小?

我的印象是,单个参数的最大长度在这里不是问题,而是整个参数数组的总大小加上环境的大小(仅限于ARG_MAX. 因此,我认为类似以下的事情会成功:

env_size=$(cat /proc/$$/environ | wc -c)
(( arg_size = $(getconf ARG_MAX) - $env_size - 100 ))
/bin/echo $(tr -dc [:alnum:] </dev/urandom | head -c $arg_size) >/dev/null
Run Code Online (Sandbox Code Playgroud)

这- 100足以解释 shell 和echo进程中环境大小之间的差异。相反,我收到了错误:

bash: /bin/echo: Argument list too long
Run Code Online (Sandbox Code Playgroud)

玩了一段时间后,我发现最大值小了一个完整的十六进制数量级:

/bin/echo \
  $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) \
  >/dev/null
Run Code Online (Sandbox Code Playgroud)

当减一被删除时,错误返回。看似单个参数的最大值实际上是放置在参数数组中字符串末尾的空字节ARG_MAX/16的-1帐户。

另一个问题是,当参数重复时,参数数组的总大小可以接近ARG_MAX,但仍然不完全:

args=( $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) )
for x in {1..14}; …
Run Code Online (Sandbox Code Playgroud)

kernel echo arguments

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

在创建进程时打印进程的 pid 和名称

从这里的问题来看,OP 想要反复轮询pidof在 shell 脚本中使用的进程的 pid 。当然,这是低效的,因为必须pidof每秒多次为程序启动一个新进程(我不知道这是问题中 CPU 峰值的原因,但似乎很可能)。

通常在 shell 脚本中解决这种事情的方法是使用单个程序来输出您需要的数据stdout,然后在必要时进行一些文本处理。虽然这涉及更多的程序同时运行,但它可能会降低 CPU 密集度,因为不会为了轮询目的而不断创建新进程。

因此,对于上述问题,一种解决方案可能是让一些程序在创建进程时输出进程的名称和 pid。然后你可以做这样的事情:

pids-names |
  grep some_program |
  cut -f 2 |
  while read pid; do
    process-pid "$pid"
  done
Run Code Online (Sandbox Code Playgroud)

这样做的问题是它提出了一个更基本的问题,如何在创建 pid 和进程名称时打印它们?

我找到了一个名为 的程序ps-watcher,尽管它的问题在于它只是一个perl重复运行的脚本,ps所以它并没有真正解决问题。另一种选择是使用auditd如果日志直接通过tail -f. 一个理想的解决方案会比这更简单、更便携,但auditd如果它是最好的选择,我会接受一个解决方案。

process monitoring

11
推荐指数
1
解决办法
1008
查看次数

即使分区挂载有丢弃,fstrim 也会修剪超过一半的分区大小

当我安装我的 SSD 时,我只是安装了discard它,并没有出汗。然而,今天我正在阅读有关使用它的利弊的信息,fstrim并决定运行该程序以了解实际需要多长时间(仍然使用 安装我的分区discard)。该命令在我的根分区和主分区上都花费了几分钟。对于我的主分区,我使用-v并得到了这个:

$ sudo fstrim -v /home
/home: 137494052864 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)

这比分区上的可用空间量还多!

$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       206G   78G  118G  40% /home
Run Code Online (Sandbox Code Playgroud)

随后的运行在不到一秒的时间内完成,例如:

$ sudo fstrim -v /home
/home: 0 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)

当然,如果我一直用 挂载分区discard,fstrim不应该像这样修剪大量数据吗?该discard选项肯定已启用,以下是相关fstab行:

UUID=xxxxxxxx...    /          ext4   noatime,discard,errors=remount-ro  0      1
UUID=xxxxxxxx...    /home      ext4   noatime,discard,errors=remount-ro  0      2
Run Code Online (Sandbox Code Playgroud)

和mount输出行:

/dev/disk/by-uuid/xxxxxxxx... on / type …
Run Code Online (Sandbox Code Playgroud)

linux filesystems fstab trim

9
推荐指数
1
解决办法
9115
查看次数

Shell 脚本无法 awk 创建的文件

我正在尝试创建一些简单的通过/失败测试脚本,但我遇到了一些挑战,如下所述。我的目的是将命令(例如 ping)的完整结果results.txt保存到一个文件中,但results.txt如果检测到问题,还要解析文件以进行不同的检查:

#!/bin/bash
ping -c 20 google.com > results.txt
packetloss = `awk '/packet loss/{x=$6} END{print x}' results.txt`
echo "$packetloss" >> debug.txt
#  if packetloss > 0, add to an error.txt to fail
#  if avg ping time > 5ms, add to an error.txt to fail
Run Code Online (Sandbox Code Playgroud)

packetloss 变量没有awk从results.txt文件中获取信息(发送到调试文件进行查看)。我想知道是否有关于 shell 脚本的东西可以防止这种情况以及相关的解决方法?

手动运行awk上results.txt返回“0%”,这是预期的结果。

bash

7
推荐指数
1
解决办法
1047
查看次数

ext3 文件系统对大多数应用程序显示已满,但对 DF 只有 77% 已满

Var 在 Nagios、Puppet 和 LVM 工具(pvs、vgs 等)等许多应用程序中显示为完整

df -h 输出

6.0G  4.3G  1.4G  77% /var
Run Code Online (Sandbox Code Playgroud)

视频输出

/var/lock/lvm/V_rootvg:aux: open failed: No space left on device
  Can't get lock for rootvg
  Skipping volume group rootvg
Run Code Online (Sandbox Code Playgroud)

lsof +L1var 下不再显示任何内容,因此我认为没有尚未从/var文件系统中清除的未链接文件。我不明白为什么 6G 文件系统上的 1.4G 免费被认为是满的。我知道系统在每个文件系统上都保留了一些空间,但这不可能,空间太大了。文件系统ext3在 Red Hat 5 上。

dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          c8f44510-e8f7-4e2e-950a-1410b069910e
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype …
Run Code Online (Sandbox Code Playgroud)

filesystems ext3 df

6
推荐指数
1
解决办法
3373
查看次数

如何离线升级 Debian Wheezy 内核?

我在内核版本中使用 Debian ( Wheezy )3.2.0-4 amd64并希望将我的内核升级到最新版本,例如3.13.3 stable,但我的 Debian 操作系统没有互联网连接。我已经安装了“usb-modeswitch”和“usb-modeswitch-data”软件包,但是 Debian 没有检测到我的 3g-modem-usb 加密狗。

我已经3.13.3 tar.xz从kernel.org. 如何在没有互联网连接的情况下从 3.2 编译和升级到 3.13.3?

kernel debian

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

如何在不关心区分大小写的情况下遍历多个文件扩展名?

我已经看到有关如何遍历多个文件扩展名的各种主题,但在大多数情况下,列表已定义。

例子:

for file in ${arg}/**/*.{txt,h,py}
do
    ....
done
Run Code Online (Sandbox Code Playgroud)

可以看出,.TXT文件将被忽略。可悲的是,回答它的人说它只适用于 bash4。但我的设置使用 bash3.x。

关于如何做到这一点的任何想法?

scripting bash shell-script

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