我在装有 OS X 10.10 的 Mac 上的 VirtualBox VM 中运行 Oracle Linux 7(基于 CentOS/RedHat 的发行版)。我有一个 Synology Diskstation 作为 iSCSI 目标。
我已成功连接到 Synology,对磁盘进行了分区并创建了一个文件系统。它被称为/dev/sdb并且分区是/dev/sdb1。现在,我想做的是创建一个挂载点,以便我可以轻松访问它:
mount /dev/sdb1 /mnt/www
Run Code Online (Sandbox Code Playgroud)
该命令有效。但显然,它在重新启动后不是持久的。不用担心...进入/etc/fstab我们去。
首先,我获得了分区的 UUID,以确保我始终使用正确的设备:
blkid /dev/sdb1
Result:
/dev/sdb1: UUID="723eb295-8fe0-409f-a75f-a26eede8904f" TYPE="ext3"
Run Code Online (Sandbox Code Playgroud)
现在,我将以下行插入到我的 /etc/fstab
UUID=723eb295-8fe0-409f-a75f-a26eede8904f /mnt/www ext3 defaults 0 0
Run Code Online (Sandbox Code Playgroud)
重新启动后,系统崩溃并进入维护模式。如果我删除我插入的行,一切都会再次工作。但是,我正在按照Oracle-Base 的逐字说明进行操作
我知道我错过了一些东西..有人能指出我正确的方向吗?
我正在 bash 中尝试 printf 格式,我遇到了这段代码:
#/bin/bash
divider===============================
divider=$divider$divider
header="\n %-15s %8s %10s %11s\n"
format=" %-15s %08d %10s %11.2f\n"
width=55
printf "$header" "ITEM NAME" "ITEM ID" "COLOR" "PRICE"
printf "%$width.${width}s\n" "$divider"
printf "$format" \
Triangle 13 red 20 \
Oval 204449 "dark blue" 65.656 \
Square 3145 orange .7
Run Code Online (Sandbox Code Playgroud)
我感兴趣的那一行是这样的:
printf "%$width.${width}s\n" "$divider"
Run Code Online (Sandbox Code Playgroud)
那个变量引用在做什么?这是什么意思?
我有一个简单的 bash 脚本;我基本上想确保该文件存在于远程机器上。我找到了许多关于如何执行此操作的示例,但缺少的组件是如何使用正在评估的路径和/或文件名中的空格执行此操作。
#!/bin/bash
HOST=server.local
DIR=/foo/bar
FILE="Foo Bar File With Spaces"
if ssh $HOST [[ -f ${DIR}/${FILE} ]]
then
echo "The file exists"
else
echo "The file doesn't exist."
fi
Run Code Online (Sandbox Code Playgroud)
所以,它失败了。它让我在条件表达式中出现语法错误。但是,如果我将 FILE 变量更改为:
FILE="Foo\ Bar\ File\ With\ Spaces"
Run Code Online (Sandbox Code Playgroud)
脚本工作(它找到文件,因为它在那里)。
我对我的条件表达式尝试了以下变体:
if ssh $HOST [[ -f "${DIR}/${FILE}" ]]
Run Code Online (Sandbox Code Playgroud)
和
if ssh $HOST [[ -f "${DIR}"/"${FILE}" ]]
Run Code Online (Sandbox Code Playgroud)
两者都不起作用;我知道我错过了一些简单的东西。有人可以指出我正确的方向吗?
我正在尝试编写一个 bash 函数来获取 VirtualBox VM 的 UUID。我很新,awk所以我试图专注于学习如何使用它解决问题。我知道我可以使用sed甚至cut解决这个问题。
我的“原始”输出VBoxManage list vms如下:
$ VBoxManage list vms
"FreeBSD" {1aac7062-bd59-47ee-9261-2f6aa8d9ef53}
"Windows 10" {64942de7-beb9-418c-9f52-5befcb6f577b}
"High Sierra" {07f73e1a-a0c4-4190-ade1-79a2e432b4d6}
"Test Machine" {9d0953a7-ca2a-4667-8c5b-1a9f550b2956}
Run Code Online (Sandbox Code Playgroud)
我想要的输出只是获取特定 VM 的 UUID。在这种情况下使用“测试机”,我正在寻找9d0953a7-ca2a-4667-8c5b-1a9f550b2956(没有括号{和})。
经过相当多的搜索和测试,我想出了
$ VBoxManage list vms | awk '/Test Machine/{ sub("{" ,""); sub("}", ""); print $3 }'
9d0953a7-ca2a-4667-8c5b-1a9f550b2956
Run Code Online (Sandbox Code Playgroud)
它有效,但我必须使用sub命令来提取它。
我的问题是,有没有办法用类型运算符简化操作的替换部分,or这样我就不必使用两个sub命令?
例如,如果我尝试awk '/Test Machine/{ sub("{" || "}", ""); print $3' …
我正在尝试通过 printf 对其进行不同的操作来以编程方式创建一个文件。(即printf %s\\n hostname >> file.txt)
我想发送一个 Esc 代码来清除屏幕(它将是第一行)。
在 bash 中,我只使用printf $'\033[2J'$'\033[;H'(\033作为 的八位字节Esc)并清除屏幕。一切正常;作为文件中的第一行,当您cat打开文件时,它首先清除屏幕。
在 tcsh(FreeBSD root 的默认 shell)中,我似乎无法弄清楚如何“逃避转义”并获得等效的 bash 转义代码。
我一直在试验(printf和echo)
如果有人能指出我正确的方向,我将不胜感激!
谢谢!
我正在尝试编写一个脚本,在新的 FreeBSD 安装上自动安装端口/包。为此,执行脚本的用户必须是 root。
系统“应该”是处女的意思bash,sudo可以安装也可以不安装;所以我试图解释它。为此,我正在检查用户 ID 是否等于 0。
问题是,在 bash 和 sh 之间,环境变量是不同的:
除了环境变量之外,还有其他方法可以检查 root 用户,还是应该根据环境调整用户的检查?