我需要tar在 shell 脚本内的管道中使用来存档和压缩一些文件。
在阅读了手册页后,tar我能够通过将其与参数一起运行来生成tar输出,但我无法找出如何将其从. 由于如果没有指定其他输入,许多命令会从中读取,我尝试过:stdout-Ostdinstdin
pv ~/foo | tar c -O ~/foo.tar
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
如何tar从 读取输入stdin?
由于我主要将笔记本电脑用作台式机,因此我尝试将其 CPU 设置为最大频率。
CPU 是 Intel Core i5-3337U(带超线程的双核),使用 Intel Turbo Boost 技术,最高频率为 2.5GHz(具有 2 个活动核心)和 2.70GHz(具有 1 个活动核心)。
在开始之前,我使用 LINPACK 测试了 CPU 在负载下可以达到的频率,看看尽管有任何主动节能功能,它是否可以达到 2.5GHz 的标称最大值;它可以(测量运行watch -n 1 "cat /proc/cpuinfo | grep \"cpu MHz\"")。
我选择使用这种cpufreq-set方法:我已经安装了cpufrequtils软件包,起初我尝试将 CPU 调节器设置为“性能”运行cpufreq-set -g performance;我不知道这是否以某种方式影响了空闲频率的范围,但结果并不令人满意:在这种状态下,所有 CPU 的频率在 1.0GHZ-2.4GHZ 范围内不断下降并上升。
所以我尝试将CPU调控器设置为“用户空间”,以便最终能够设置一个固定的频率;但是出现了以下错误:
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为a. 有一个阵列中的2项a[1]和a[2]。所以每个元素包含一个数字值。这两个值都有相似的起始数字,但它们有不同的结尾。我将复制类似的部分并忽略其余部分。
所以作为一个例子
$ echo ${a[1]}
.1.3.6.1.4.1.232.13600256
$ echo ${a[2]}
.1.3.6.1.4.1.232.13600276
Run Code Online (Sandbox Code Playgroud)
我需要一些命令来比较这些元素,然后只复制相似的部分,直到第一个不匹配的字段。即,在这个例子中
similar part is .1.3.6.1.4.1.232
Run Code Online (Sandbox Code Playgroud)
$ echo ${a[1]}
.1.3.6.1.4.1.759.2344.454545
$ echo ${a[2]}
.1.3.6.1.4.1.759.3234.454545
Run Code Online (Sandbox Code Playgroud)
similar part is .1.3.6.1.4.1.759
Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 14.04 中运行以下命令:
root@ubuntu:~# service rpki-ca restart
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# sudo service rpki-ca restart
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#
Run Code Online (Sandbox Code Playgroud)
sudo第二个命令的作用是什么?为什么需要root sudo?
./program -a asdf我有一个(专有)程序,可以在终端中启动。当我这样做时,我可以在正确的时间看到所有输出。
但是,当我想在我的脚本中使用程序的输出并运行时./program -a asdf | script.sh,“script.sh”仅包含read line并echo $line在循环中,程序的输出是“奇怪的”。当程序打印第一行块时,脚本不会打印任何内容。当程序(几分钟后)打印第二个行块时,我的脚本将打印第一个块。
为什么?
有没有办法让我自己的脚本“像终端一样工作”,以便在终端显示时立即获取输出?
我已经测试了该cp命令,它只会复制单个文件。例如,我输入cp了确切的文件名,然后输入了目录并复制了文件。但是,当我输入目录和目标目录时,计算机上没有任何变化。我以为cp应该复制目录中的内容。
我已经多次尝试过这个。
因此,在我重新格式化(以摆脱 Windows)之前,我只是使用此命令通过将其放在~/.bashrc文件末尾来打开文档:
alias commandless= 'gnome-open ./Documents/the-linux-command-line.pdf; gnome-open ./Documents/linux.odt'
Run Code Online (Sandbox Code Playgroud)
但是现在每次我启动终端时,它都会说:
bash: alias: gnome-open ./Documents/the-linux-command-line.pdf; gnome-open ./Documents/linux.odt: not found
Run Code Online (Sandbox Code Playgroud)
在输入任何内容之前,当我运行命令时什么也没有发生,甚至没有错误消息。
我打算将此脚本分配给键盘快捷键,以便我可以为 Docky 快速切换自动隐藏。
我将制作第二个脚本,再次关闭自动隐藏,并为其分配不同的键盘快捷键。
关闭并重新启动 Docky 的原因是因为 Docky 否则不会刷新配置的设置。我写了一个sudo命令,我怀疑它不起作用。
我想要:
sudo命令即可执行#!/bin/bash
gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" &
sudo killall dockey &
docky
Run Code Online (Sandbox Code Playgroud) 我想编写一个管道命令序列,它打印出给定目录的所有子目录的列表,并打印在一行中,后面是一个新行。
我无法使以下命令的输出全部位于同一行,然后在末尾添加一个新行。
这是我的管道命令:
ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
我希望输出如下:
file1 file3
[user@linux]$
Run Code Online (Sandbox Code Playgroud)
而不是(我实际得到的:
file1 file3[user@linux]$
Run Code Online (Sandbox Code Playgroud) 我最近在 Ubuntu 14.04 上安装了 Cinnamon,现在我无法使用 GUI 关闭或重新启动系统,我必须注销才能这样做。
我尝试关闭并从小程序重新启动,但没有任何反应,我也尝试重新安装 Cinnamon,但问题仍然存在。