标签: bash

在 *nix 中,如何确定特定文件在哪个文件系统上?

在通用的现代 unix 环境(例如 GNU/Linux、GNU/Solaris 或 Mac OS X)中,是否有一种好方法可以确定特定绝对文件路径所在的挂载点和文件系统类型?

我想我可以执行mount命令并手动解析该命令的输出并将其与我的文件路径进行字符串比较,但在此之前我想知道是否有更优雅的方法。

我正在开发一个使用扩展属性的 BASH 脚本,并希望让它为各种文件系统和主机环境做正确的事(在可能的范围内)。

unix files filesystems bash unix-shell

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

Mac OS X 中命令行的最大长度是多少?

我在 Ruby on Rails 中生成模型,其中一些表有很多列。Mac OS X 中命令的最大长度是多少?

bash mac-osx

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

将 unix 中时间命令的输出重定向到 bash 中的变量?

我只想捕获时间命令的输出,即:

X=$(time ls)

或者

$(time ls) | grep real

不过,时间函数会将其吐到控制台。我该怎么做呢?

linux bash

13
推荐指数
3
解决办法
2万
查看次数

Ubuntu dpkg,非交互式安装

我正在尝试安装一堆 .deb 文件而无需与它们交互。例如,MySQL 服务器将提示交互式菜单,以根据 dpkg 的配置输入管理密码。

我试过了。

export DEBIAN_FRONTEND=noninteractive && export DEBIAN_PRIORITY=critical && sudo /usr/bin/dpkg -i ./files/*
Run Code Online (Sandbox Code Playgroud)

我知道我可以在没有配置的情况下提取文件。我正在尝试创建一个 bash 脚本来部署一个预先配置了 Apache、php、mySQL 等默认安装的服务器。但是,这种“交互式安装”导致了问题。

关于如何禁用它的任何想法?或解决方法?

谢谢

ubuntu installation bash dpkg apt

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

使用终端/ssh时,不同机器的不同颜色提示?

我有 5 台机器,我经常通过 ssh 来完成工作。当我在错误的盒子上发出错误的命令时,它变得越来越令人沮丧。幸运的是我还没有做坏事。我想知道是否有任何我可以硬编码的 hack 会根据我使用 ssh 的机器以不同的颜色显示我的提示?例如台式机1的蓝色,笔记本电脑的紫色,服务器的红色等?这可能吗?

目前我正在使用这个命令 export PS1="\e[0;31m[\u@\h \W]\$ \e[m " 取自http://www.cyberciti.biz/faq/bash-shell -change-the-color-of-my-shell-prompt-under-linux-or-unix/ 但它显然不适用于 ssh。

另外,如果您有任何其他很酷的 bash 技巧可以帮助我缓解视力,那将会很棒。我得到了为手册页着色的提示。

http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/

bash command-line-interface

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

你能向我解释一下#ln -s :“目标不是目录”吗?

我这样做:

sudo ln –s /etc/apache2/sites-available/LoginProject /etc/apache2/sites-enabled/LoginProject
Run Code Online (Sandbox Code Playgroud)

我得到:

ln: target `/etc/apache2/sites-enabled/LoginProject' is not a directory
Run Code Online (Sandbox Code Playgroud)

/etc/apache2/sites-available/LoginProject 这是一个文件

编辑:

这个命令:

ls -l /etc/apache2/sites-enabled/LoginProject /etc/apache2/sites-available/LoginProject
Run Code Online (Sandbox Code Playgroud)

输出:

ls: cannot access /etc/apache2/sites-enabled/LoginProject: No such file or directory
-rw-r--r-- 1 root root 526 2011-09-27 18:40 /etc/apache2/sites-available/LoginProject
Run Code Online (Sandbox Code Playgroud)

编辑2:

$ls /etc/apache2/sites-available/
default  default-ssl  LoginProject
$

$ls /etc/apache2/sites-enabled/
$
Run Code Online (Sandbox Code Playgroud)

linux bash

13
推荐指数
3
解决办法
4万
查看次数

如何在bash函数中使用heredoc?

是否可以在 bash 函数中插入一个heredoc

下面的简单示例会导致错误: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function
Run Code Online (Sandbox Code Playgroud)

环境:

  • Ubuntu 11.04 (GNU/Linux 2.6.38-8-server x86_64)
  • GNU bash,版本 4.2.8(1)-release (x86_64-pc-linux-gnu)

ubuntu bash

13
推荐指数
1
解决办法
7653
查看次数

使用 rsync 移动文件夹时如何删除空的源目录?

rsync可以mv使用以下选项非常相似地将文件夹哄入移动文件夹中,并且优于传统文件夹:

rsync -axvvES --remove-source-files source_directory /destination/
Run Code Online (Sandbox Code Playgroud)

但是,我似乎还无法完成的一件事是删除原始目录。该--remove-source-files标志就是这样做的,删除源文件,但不删除源目录。我也希望有--remove-source-directories一面旗帜,但没有。

我该如何处理? 我想我可以rm -fr在移动后发出一个,但是我更愿意将整个过程保持在一个过程中,而不是引入潜在的错误。

shell bash rsync zsh

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

来自 bash 的 smtp.gmail.com 给出“证书错误:无法识别对等方的证书颁发者。”

如果出现问题,我需要我的脚本给管理员发送电子邮件,而该公司只使用 Gmail。按照一些帖子说明,我能够使用 .mailrc 文件设置 mailx。首先是 nss-config-dir 的错误,我通过从 firefox 目录复制一些 .db 文件解决了这个问题。到 ./certs 并在 mailrc 中瞄准它。发了一封邮件。

但是,出现了上面的错误。奇迹般地,.db 中有一个 Google 证书。它出现了这个命令:

~]$ certutil -L -d certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

GeoTrust SSL CA                                              ,,
VeriSign Class 3 Secure Server CA - G3                       ,,
Microsoft Internet Authority                                 ,,
VeriSign Class 3 Extended Validation SSL CA                  ,,
Akamai Subordinate CA 3                                      ,,
MSIT Machine Auth CA 2                                       ,,
Google Internet Authority                                    ,,
Run Code Online (Sandbox Code Playgroud)

最有可能的是,它可以被忽略,因为邮件无论如何都可以工作。最后,在拉了一些头发和许多谷歌之后,我找到了如何摆脱烦恼。

首先,将现有证书导出到 ASSCII 文件:

~]$ certutil -L -n 'Google Internet Authority' …
Run Code Online (Sandbox Code Playgroud)

ssl bash gmail

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

管道 stderr 和 stdout 到不同的命令(不仅仅是文件)

我正在为 ldap 制作备份脚本。我希望错误转到 /var/log 中的文件,并将输出转到备份文件夹中的另一个文件。目前我正在重定向到一个临时文件,然后将临时文件发送到日志。不过,我宁愿将其作为 1 个班轮使用...

/usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err |
  gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz || 
  logger -t ldapbackup -p local6.err error exit $?

cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" | 
  grep -v "filter: (objectclass=\*)" |
  grep -v "requesting: All userApplication attributes" >$ERR_LOG
rm -f /tmp/ldaptmp.err
Run Code Online (Sandbox Code Playgroud)

关于如何将 stderr 和 stdout 重定向到不同管道以将此命令压缩为 1 行的任何想法?或者,还有更好的方法?

linux bash

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