标签: bash

lsof 用于其他用户打开的文件

如何查看lsof特定目录中由其他用户打开 ( ) 的文件列表?

我可以这样做lsof +D /path,但这只显示当前用户的文件。

有什么方法可以查看其他用户是否打开了目录中的文件?

bash lsof

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

查找不包含目录的目录?

我试图弄清楚如何使用 linux“find”命令(或另一个可以完成工作的命令)来返回不包含特定名称的目录的文件路径/目录列表。

~/web/domain1.com/public_html/bar
~/web/domain2.com/public_html/
~/web/domain3.com/public_html/bar
~/web/domain4.com/public_html/
Run Code Online (Sandbox Code Playgroud)

我想要所有不包含名为“bar”的目录(domain2.com 和domain4.com)的路径。知道如何让 find 输出这样的列表吗?

谢谢!

linux bash command-line-interface find

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

将输出重定向到尚不存在的子文件夹

我目前将 crontab 脚本输出重定向到某个存在的文件夹中的文件,如下所示:

echo "test" > `date "+/tmp/%Y%m%d_%H%M.log"`
Run Code Online (Sandbox Code Playgroud)

我想将输出重定向到子文件夹,该子文件夹可能尚不存在(.../year/month/...,因此应创建子文件夹:

echo "test" > `date "+/tmp/%Y/%m/%d_%H%M.log"`
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

linux bash cron

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

如何找到完整的进程参数和关联的监听端口?

我可以执行netstat -atulpn | grep java查找所有 Java 进程及其附带端口,这很棒,但我还希望还显示进程的完整执行参数。我不相信netstat到目前为止我所探索的一切都是可能的,所以我想我必须编写一个脚本来处理输出netstat,然后将 pid 传递进去ps,然后美化输出以显示ip+端口和完整的命令行。

有没有更好的方法来做到这一点,或者这是唯一的选择?

linux bash netstat lsof ps

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

环境变量在Python中不可用

我有一个关于环境变量的非常有趣的问题,并且谷歌搜索没有显示任何有意义的结果:

$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'BUCKET'
Run Code Online (Sandbox Code Playgroud)

所以我有一个在 bash 中可用但在 python 中不可用的环境变量。怎么会发生这种情况以及如何解决它?以下是一些其他详细信息:

  • source envvars.sh通过命令设置环境变量
  • envvars.sh文件仅包含如下所示的行:KEY=value
  • 我在 bash 和 zsh 中重现了这个
  • 如果我这样做export BUCKET=$BUCKET,它会起作用

python bash environment-variables

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

在 cronjob 中加载用户环境变量

如何在 cronjob 中加载用户环境变量?


我有一个 cronjob,它应该在我的 Ubuntu 机器上每分钟启动一个脚本:

* * * * * /home/user/myscript.sh;
Run Code Online (Sandbox Code Playgroud)

在此脚本中,我想使用 和 等环境变量$JAVA_HOME$M2_HOME自动启动构建过程。问题是这些变量是在.bashrcvia中设置的export JAVA_HOME=/../..

source因此,在执行我的脚本之前我需要这些文件:

* * * * * source ~/.bash_profile; source ~/.bashrc; /home/user/myscript.sh;
Run Code Online (Sandbox Code Playgroud)

但是,变量尚未设置!为了测试这一点,我将echo环境变量添加env到日志文件中:

env >> ~/env.log
echo $M2_HOME >> ~/env.log
Run Code Online (Sandbox Code Playgroud)

日志文件仍然不包含变量。仅将以下内容附加到文件中(无$M2_HOME等):

LANGUAGE=en_US:en
HOME=/home/user
LOGNAME=user
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/user
Run Code Online (Sandbox Code Playgroud)

如果我在 shell 中运行脚本,所有变量都会打印到env.log.

source当我将命令放入脚本文件中时,也会发生同样的情况。仅当我export在变量声明之前删除关键字时,命令才可以看到该关键字echo $var。但这不是解决方案,因为我不管理这些声明。


我尝试了@tripplee的解决方案与有限的sh shell问题,但它仍然不起作用。我进一步将其简化为一个非常简单的 cronjob,无需第二个脚本来显示问题:

* * * * * . …
Run Code Online (Sandbox Code Playgroud)

ubuntu bash environment-variables cron

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

登录 FreeBSD ssh 时使用 bash shell

我正在寻找一种方法来确保我的命令在某些使用 csh 作为默认 shell 的 FreeBSD 11 机器上由 bash 执行。

以下是我在 Linux CentOS / Debian / MacOS X / pfSense 2.3(在 FreeBSD 10.3 上运行)甚至 Windows 10 bash 上运行的代码,但在 FreeBSD 11 上不起作用

cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11  'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'
Run Code Online (Sandbox Code Playgroud)

FreeBSD 11 上前一个命令的输出似乎是一个 csh 错误消息

Unmatched ".
Run Code Online (Sandbox Code Playgroud)

在检查哪个 shell 运行时,似乎是 csh 运行。以下返回“csh”

ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'
Run Code Online (Sandbox Code Playgroud)

根据我的理解,BSD 系统不允许更改 shell,除非使用 heredoc,但我不能使用 heredoc 发送 cat "/some/filelist" …

freebsd ssh shell bash bsd

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

如何创建未精简配置的 qcow2 文件?

当我执行以下操作时,qcow2 文件小于 200KB。

# qemu-img create -f qcow2 /var/lib/libvirt/images/urb-dat0.qcow2 10G
# du -hsc /var/lib/libvirt/images/urb-dat0.qcow2
196K    /var/lib/libvirt/images/urb-dat0.qcow2
Run Code Online (Sandbox Code Playgroud)

如果我将它附加到 KVM 来宾并且 fdisk -l

Disk /dev/vdb: 0 MB, 197120 bytes, 385 sectors
Run Code Online (Sandbox Code Playgroud)

如何制作未精简配置的 10GB qcow2 文件?

linux bash qcow2 kvm-virtualization

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

docker exec 交互式 bash 与 init 命令

为了调试,我想跳入我拥有的任何 docker 容器,并立即在我的交互式 bash shell 上设置一些细节。出于某种原因,下面的 --init-file 样式现在正在工作。

与许多事情一样,我想这是我遗漏的某种转义序列问题。有什么建议?

docker exec -it mycontainer bash --init-file <(echo "PS1='\w\$ '; TERM=xterm256; alias ls='ls -GFh'")
Run Code Online (Sandbox Code Playgroud)

--init-file 中的任何命令都不会应用于在容器中启动的 bash shell。

bash docker

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

Bash:使用变量来动态调整 rsync 的时间安排并在运行时放慢速度?

在命令已经启动后bash 脚本期间运行动态流量整形有哪些解决方案?这甚至可能吗?

我的用例是,我rsync在大量磁盘上运行到远程备份位置,这在 Internet 上需要很多小时,所以我想将流量整形应用于rsync调用的线路,但仅限于指定时间。

因此,例如,当前的计划是在上午 5 点到上午 10 点和下午 3 点到晚上 9 点将上传减少到每秒 1000 KB (1.0MB/s)。

我已经看过了--bwlimit=1000rsync但这会rsync在它运行的整个时间里形成而不仅仅是所需的塑造时间框架

rsync启动后可以减速吗?因为如果以某种方式可能,那将是我的解决方案。

我见过有人建议,wondershaper但我想知道这是否可以以编程方式“打开和关闭”?如果是,如何做到这一点?

这是一个模型,我使用 Stackoverflow 的慷慨贡献对它进行了黑客攻击,它提供了指定和检查时间表的功能(基于小时,这对我目前的需求来说很好)......

#!/bin/bash

declare -A shapingTimes
declare -A keycount

useTrafficShaping=1

# schedule
shapingTimes=([0-from]=5 [0-to]=10)  # 5am to 10am
shapingTimes+=([1-from]=15 [1-to]=21)  # 3pm to 9pm

# because keys and array content differs in order from the way they are defined, …
Run Code Online (Sandbox Code Playgroud)

networking backup bash rsync traffic-shaping

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