小编Ste*_*ski的帖子

根据背景颜色更改PS1颜色?

我了解到我可以更改PS1的格式,尤其是字符串的颜色。那么,是否可以根据外壳的背景颜色更改颜色?或者,如何检测外壳的背景颜色?

colors bash prompt terminal

12
推荐指数
1
解决办法
3835
查看次数

如何在 emacs 中为文本着色?

我要查看(和/或编辑)在Emacs着色的文字,如输出的ls -l --color=alwaystree...或者别的什么东西。

我引用的文本存在于文件中。当我在 emacs 中打开该文件时,我希望能够看到它被着色,或者切换它以显示 ANSI (SGR) 转义序列。

ansi-color.el 似乎是我需要的,但我无法让它对 ANSi 转义序列进行任何着色,但我确实看到单个控制字节(例如^A^[)的蓝粗体......我不是确定这是否是 的一个特征ansi-color,但我认为是。

根据ansi-color.el 注释,它可以处理字符串和区域,但即使这样似乎也不起作用.. 例如,该函数ansi-color-apply-on-region不被M-x. 它说,“不匹配”

我已经添加(require 'ansi-color)到我的.emacs文件中,甚至(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on). emacs 启动时我没有收到错误或警告,所以我被卡住了。

如何让标准功能工作,以及在打开名称后缀为 的文件时是否可以自动应用.col

colors emacs

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

为什么按名称删除文件既慢又特别快?

失礼:我在下面提到的“快速”方法并不比慢速方法快 60 倍。它快了 30 倍。我会把错误归咎于这个小时(凌晨 3 点不是我一天中清晰思考的最佳时间:)。

更新:我添加了测试时间摘要(如下)。
速度因素似乎涉及两个问题:

  • 所用命令的选择(时间比较如下所示)
  • 目录中大量文件的性质......似乎“大是坏”。随着数字的增加,事情变得不成比例地变慢。

所有的测试都是用 100 万个文件完成的。
(真实时间、用户时间和系统时间在测试脚本中)
测试脚本可以在paste.ubuntu.com找到

#
# 1 million files           
# ===============
#
#  |time   |new dir   |Files added in  ASCENDING order  
#  +----   +-------   +------------------------------------------------- 
#   real    01m 33s    Add files only (ASCENDING order) ...just for ref.
#   real    02m 04s    Add files, and make 'rm' source (ASCENDING order) 
#                      Add files, and make 'rm' source (DESCENDING order) 
#   real    00m 01s    Count of filenames
# …
Run Code Online (Sandbox Code Playgroud)

filesystems bash ext4

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

FreeBSD:“打开的文件太多”但应该能够再打开 160,000 个文件

我有一个运行 ZFS 的 FreeBSD 8 系统,带有一个大约 355GB 的 MySQL 5.5 服务器,预计会增长到几个 TB。

MySQL 正在触发有关“打开的文件太多”的错误/etc/hosts.allow。我们没有明确使用/etc/hosts.allow,但它被hosts_access(3) ( libwrap.a) 使用,它被很多东西使用。

mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Run Code Online (Sandbox Code Playgroud)

但是当我检查时似乎没有达到任何实际限制。kern.openfiles stays持续一段时间内报告的打开文件数低于 40,000,我们的限制要高得多:

# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191

# ulimit -n
184320
Run Code Online (Sandbox Code Playgroud)

Openfiles 应设置为无限制:

# grep openfiles /etc/login.conf
    :openfiles=unlimited:\
Run Code Online (Sandbox Code Playgroud)

MySQL 说它应该能够打开 184320 个文件句柄:

# mysqladmin variables | grep open_files_limit
| open_files_limit                              |     184320                |
Run Code Online (Sandbox Code Playgroud)

以及一些来自 MySQL 用户的信息。我停止 …

freebsd mysql

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

Bash: `-su: $*: unbound variable` 和 `set -u`

这是一个运行 GNU bash 4.0 版的 FreeBSD 7.x 系统。

在 Bash 中,该set -u选项可以强制 shell 在遇到未设置的变量时打印错误,如下所示:

$ set -u
$ echo $THISISUNSET
-su: THISISUNSET: unbound variable
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

但是,对于 $*,我也遇到了同样的错误:

$ echo $*
-su: $*: unbound variable
$ echo $?
1
$ echo $@
-su: $@: unbound variable
Run Code Online (Sandbox Code Playgroud)

The Bash Manual 4.3.1 The Set Builtin特别指出set -u忽略 $* 和 $@:

-u 执行参数扩展时,将未设置的变量和特殊参数 '@' 或 '*' 以外的参数视为错误。错误消息将写入标准错误,并且非交互式 shell 将退出。

我怎样才能解决这个问题?

freebsd bash

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

比较旧文件和新文件,但忽略只存在于新文件中的行?

我有两个文件:

  1. oldlist- 这包含文件列表和每个文件的 md5 哈希。这是一年前生成的。
  2. newlist- 这还包含文件列表和每个文件的 md5 哈希值。但是,一些文件已更改(例如,它们的 md5 哈希值不同)并添加了一些新文件。

我想查看oldlist和之间的所有差异newlist,但我想忽略oldlist.

也就是说,我不关心新文件。我只想比较每个旧文件的 md5 哈希值,以便我可以查看去年是否有任何文件发生了更改。

我试过diffcomm,但还没有找到解决方案。

diff text-processing file-comparison join

8
推荐指数
1
解决办法
1850
查看次数

Systemd-networkd:DHCP 客户端获取新地址后运行脚本

我在 ubuntu 18.04 服务器上。我需要运行一个更新 CloudFlare 上的 IP 地址的脚本(一种 DynDNS 脚本)。在以前的版本中,我可以使用接口 enp1s0 的 DHCLIENT 退出挂钩来执行此操作。

\n\n

但是,systemd 现在使用自己的内置 DHCP 客户端。如何编写一个 systemd 单元,在向 DCHP 客户端提供新 IP 地址后立即执行 bash 脚本?

\n\n

Systemd 正在管理接口 enp1s0:

\n\n
#sudo  systemctl status systemd-networkd\n\xe2\x97\x8f systemd-networkd.service - Network Service\n   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)\n   Active: active (running) since Tue 2018-09-18 01:54:16 +08; 10h ago\n     Docs: man:systemd-networkd.service(8)\n Main PID: 878 (systemd-network)\n   Status: "Processing requests..."\n    Tasks: 1 (limit: 4915)\n   CGroup: /system.slice/systemd-networkd.service\n           \xe2\x94\x94\xe2\x94\x80878 /lib/systemd/systemd-networkd\n\nSep 18 01:54:27 xxx systemd-networkd[878]: enp1s0: Configured\n …
Run Code Online (Sandbox Code Playgroud)

ubuntu dhcp systemd dyndns systemd-networkd

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

为什么在这个 bourne shell 脚本中 `exec 2>&1` 会失败?

我正在将旧的 ksh 脚本移植到 Bourne shell。旧的 ksh 脚本包含以下代码:

#!/bin/sh

tmpLog=/var/tmp/logfile.$$

exec 1> $tmpLog
exec 2>&1

eval $*
another_command_1
another_command_2
Run Code Online (Sandbox Code Playgroud)

从我读到的内容来看,这两个 exec 语句似乎是为了执行 $*、another_command_1、another_command_2 和所有以下命令;然后将这些命令中的所有 STDERR 和 STDOUT 重定向到/var/tmp/logfile.$$. 但是,当我在脚本中运行它时,脚本在exec 2>&1.

stefanl@host:~ $ sh -xv ./output.sh echo "Hello"
#!/bin/sh

tmpLog=/var/tmp/logfile.$$
+ tmpLog=/var/tmp/logfile.39918

exec 1> $tmpLog
+ exec
exec 2>&1
+ exec
stefanl@host:~ $
Run Code Online (Sandbox Code Playgroud)

当我在命令行上运行它时,我的外壳在我执行后冻结exec 2>&1

stefanl@host:~ $ tmpLog=/var/tmp/logfile.$$
stefanl@host:~ $ exec 1> $tmpLog
stefanl@host:~ $ exec 2>&1
### FREEZE ###
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 什么是exec 2>&1应该做的?
  2. 为什么它对我来说失败了?

io-redirection shell-script

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

在非 GNU 系统上计算 1125 天前的日期?

在 Unix Bash 命令行上,我想使用基本操作系统(例如 No Perl 或 Python)计算 1125 天前的日期。

在运行GNU Date 的系统上,我可以执行以下操作:

ubuntu $ date --date="1125 days ago"
Wed Nov  7 15:12:33 PST 2007
Run Code Online (Sandbox Code Playgroud)

FreeBSD 或 MacOSX 系统不附带 GNU Date,也不支持像“X 天前”这样的值。

freebsd81 $ date --date="+1125 days ago"
date: illegal option -- -
Run Code Online (Sandbox Code Playgroud)

可以在 Mac 或 FreeBSD 系统上计算几天前的日期,但这仅限于几天:

# Today is really Dec 6, 2010. 4 days ago it was:
macosx $ TZ=GMT+96 date +%Y%m%d
20101202

# But that doesn't work if I want to see …
Run Code Online (Sandbox Code Playgroud)

osx freebsd date non-gnu

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

为什么`man -k cron` 会为某些结果显示`vixie-cron (rpm)`,我该如何阅读这些页面?

我试图在 RedHat 系统上找出有关cron 和 /etc/cron.d/ 的一些详细信息。具有讽刺意味的是,我的答案可以在vixie-cron-*.src.rpm 中查看,但其手册页cronvixie-cronRPM提供的文本不匹配。

如果我在 MANPATH 中搜索关键字cron,它会显示一些结果,例如vixie-cron (rpm). 这个(rpm)标签是什么意思,为什么系统上没有安装这些联机帮助页,我可以查看这些联机帮助页吗?

$ man -k cron
/etc/anacrontab [anacrontab] (5)  - configuration file for anacron
anacron              (8)  - runs commands periodically
anacron             (rpm) - A cron-like program that can run jobs lost during downtime.
cron                 (8)  - daemon to execute scheduled commands (ISC Cron V4.1)
crontab              (1)  - maintain crontab files for individual users (ISC Cron V4.1) …
Run Code Online (Sandbox Code Playgroud)

man rpm rhel

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