我有一个包含目录列表的文件。例如
/foo/bar/dir1
/foo/bar/dir2
/foo/bar/dir3
Run Code Online (Sandbox Code Playgroud)
我想创建所有这些目录。这是我所做的:
for dir in $(cat myfile); do mkdir $dir; done
Run Code Online (Sandbox Code Playgroud)
在避免“无用的使用 cat”的同时,这样做的正确方法是什么?
理想情况下,答案将集中在 Ksh88,但我也对其他 shell 感兴趣
考虑到我有一个非常大的数组$large_list,有没有办法编写一个将数组作为参数的函数?例如:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Run Code Online (Sandbox Code Playgroud)
做这样的事情的通常策略是什么?我尝试给出变量,$large_list但它是空的。
我愿意修改该函数以使其适应参数列表中的任何更改。
作为记录,我正在使用 ksh88,并且我正在寻找尽可能便携的答案。
编辑:到目前为止,我能想到的最好方法是遍历数组并将每个元素作为参数发送给函数。这看起来非常丑陋且容易出错,更不用说它很快就会达到某个极限。这是我所做的:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Run Code Online (Sandbox Code Playgroud)
难道没有更好的事情要做吗?
我试图更改登录外壳。
这是第一行的/etc/passwd样子(在 Debian Wheezy 安装上):
rootx:0:0:root:/root:/:zsh
Run Code Online (Sandbox Code Playgroud)
当我尝试以以下身份登录时root:
Cannot execute zsh: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我知道zsh可用:
$ which zsh
/usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)
好的,zsh用它的完整路径替换似乎是合乎逻辑的。但是我该怎么做呢?
我在系统上有一个其他用户 ( user),但是它没有 root 权限并且sudo没有安装在系统上。
假设无论出于何种原因(加密、物理访问等),我都无法在 Live CD 上启动以修改文件。
但是,我确实知道该root帐户的凭据。
我的问题是:有没有办法,甚至以编程方式,在root不首先启动其登录 shell 的情况下使用该帐户启动进程?
我在本地安装了 Dokuwiki,我定期使用 rsync 将其同步到我的服务器。我还将给我的一个朋友一个 ssh 帐户,并托管他的公共 Dokuwiki 安装。但是,我在访问权限方面遇到了问题 - 即使镜像是只读的,Dokuwiki 仍然需要对数据目录的写权限以进行缓存等。Apache 服务器以用户 www-data 的身份运行,并且每次我都这样做rsync,它会重置权限。
根据本网站上的其他一些答案,我尝试使用 setfacl 设置默认权限,但它似乎不起作用 - getfacl 表示权限存在,但 Dokuwiki 不会运行,并且当我尝试将文件写入为用户 www-data,它也不起作用。我错过了什么?
wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)
这是我用来设置权限的命令:
setfacl -R -d -m u:www-data:7 /var/www/*
Run Code Online (Sandbox Code Playgroud) stdin、stdout、stderr 是一些整数,它们索引到一个数据结构中,该数据结构“知道”哪些 I/O 通道将用于该过程。我知道这个数据结构对于每个流程都是独一无二的。I/O 通道只是一些具有动态内存分配的数据数组结构吗?
根据这个问题,学习系统编程的一个好方法是实现现有的工具。我决定尝试重写ls和ps.
我的问题是如何获得此类文件?
我在哪里可以找到查询内核、文件系统等所需的系统调用 API...
我想也许我可以看看 GNU 工具的源代码。我在哪里可以找到它?
有没有(希望可以在线免费获得)好的文档,你们会推荐从哪里开始?
我希望在 KSH 中做这样的事情:
if (( $var = (foo|bar)[0-9]*$ )); then
print "variable matched regex"
fi
Run Code Online (Sandbox Code Playgroud)
有可能吗?
作为记录,我在Version M-11/16/88iSolaris 10 机器上使用 Ksh 。
我需要摆脱 Ksh shell 中的所有环境变量。我可以 fork 一个新实例,但它不可避免地会获取一些 init 文件(据我所知.profile,.kshrc)。有没有办法绕过这些文件和任何其他可能在初始化时读取的文件的来源?
希望我足够清楚。
我们今天启动了我们的 CentOS(6.4 Final,内核版本 2.6.32.... i686)VM(在 Windows 机器上运行,是的,我知道...)并且出于某种奇怪的原因,“哪个”二进制文件丢失了。(上周,一切都很好)。
ls -la /usr/bin显示没有which。虽然另一件奇怪的事情是:有一个“which-nodejs”符号链接指向一个丢失的文件。我们虽然重新安装了 Node.js(现在没有'which-nodejs',但它没有帮助)。我们刚刚注意到我们还缺少“清除”命令。
请问有人可以建议我们可以在不重新安装所有内容的情况下恢复“哪个”的方法?