我用了将近 10 年的 Linux 才问出这个问题。这都是反复试验和随机深夜上网。
但是人们不应该为此需要10年。如果我刚开始使用 Linux,我想知道:何时使用别名、何时编写脚本以及何时编写函数?
就别名而言,我将别名用于不带参数的非常简单的操作。
alias houston='cd /home/username/.scripts/'
Run Code Online (Sandbox Code Playgroud)
这似乎很明显。但有些人这样做:
alias command="bash bashscriptname"
Run Code Online (Sandbox Code Playgroud)
(并将其添加到.bashrc文件中)
这样做有充分的理由吗?我真的很努力,但我真的想不出任何我想要这样做的情况。因此,如果存在会产生影响的边缘情况,请在下面回答。
因为那是我将一些东西放入我的 PATH 和chmod +x它的地方,这是经过多年 Linux 反复试验后出现的另一件事。
这让我进入下一个话题。例如,我.scripts/通过在我的.bashrc( PATH=$PATH:/home/username/.scripts/) 中添加一行,在主目录中添加了一个隐藏文件夹 ( ) 到我的 PATH ,因此那里的任何可执行文件都会自动自动完成。
如果我需要的话。
不过,我真的不需要那个,不是吗?我只会将它用于不是 shell 的语言,比如 Python。
如果是 shell,我可以在里面写一个函数.bashrc:
funcname () {
somecommand -someARGS "$@"
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,我通过反复试验发现了很多。只有当我的电脑没电了,我才真正看到了功能之美,我不得不在周围人不使用它们的时候使用它们。
我没有将整个脚本目录从计算机移动到计算机,而是将其他人的 .bashrc 替换为我自己的,因为他们甚至从未进行过任何修改。
但我错过了什么吗?
那么,关于何时使用别名、何时编写脚本以及何时编写函数,您会告诉 Linux 初学者什么?
如果这不明显,我假设回答这个问题的人会使用所有三个选项。如果你只使用别名,或者只使用脚本,或者只使用函数——或者如果你只使用别名和脚本或别名和函数或脚本和函数——这个问题并不是真正针对你的。
所以我开始使用zsh. 我喜欢就好。它看起来非常酷和光滑,并且当前工作目录和实际命令行在不同的行上这一事实很好,但与此同时,我注意到它zsh可能比 慢一点bash,尤其是在将文本打印到屏幕。
我最喜欢的一点是它zsh与我在.bashrc.
一个抱怨虽然。这些功能都完美运行,但我无法弄清楚导出系统是如何工作的。
我.bashrc导出了其中一些函数,以便我可以在其他地方使用它们,例如在脚本和外部程序中使用export -f.
在 zsh 中,似乎甚至没有谈论导出。是自动加载吗?这两件事是一样的吗?我很难弄清楚这一点。
有时我需要将一个数除以另一个数。如果我可以为此定义一个 bash 函数,那就太好了。到目前为止,我被迫使用诸如
echo 'scale=25;65320/670' | bc
Run Code Online (Sandbox Code Playgroud)
但如果我能定义一个看起来像的 .bashrc 函数就太好了
divide () {
bc -d $1 / $2
}
Run Code Online (Sandbox Code Playgroud) 我在使用 NFS 时遇到了一些问题,我想尝试仅使用普通的旧 TCP。
不过,我不知道从哪里开始。
在硬件方面,我使用以太网交叉电缆连接两台上网本。
为了联网它们,我输入
$ sudo ifconfig eth0 192.168.1.1 up && ping -c 10 -s 10 192.168.1.2 && sudo /etc/init.d/nfs-kernel-server start
Run Code Online (Sandbox Code Playgroud)
在第一台上网本和
$ sudo ifconfig eth0 192.168.1.2 up
$ ping -c 10 -s 10 192.168.1.1
$ mount /mnt/network1
Run Code Online (Sandbox Code Playgroud)
在第二
其中/mnt/network1在 /etc/fstab 中指定为
192.168.1.1:/home /mnt/network1 nfs noauto,user,exec,soft,nfsvers=2 0 0
以及/etc/exports(使用该文件的语法),在第一台上网本上。
以上工作正常,但文件和目录很大。这些文件平均每块大约半 GB,目录大小都在 15 到 50 GB 之间。
我正在rsync用来传输它们,命令(上192.168.1.2)是
$ rsync -avxS /mnt/network1 ~/somedir
Run Code Online (Sandbox Code Playgroud)
我不确定是否有办法调整我的 NFS 设置以更好地处理大文件,但我想看看rsync在普通旧 TCP 上运行守护程序是否比 …
我有一些 Python 脚本,我正在努力重写它们。我对他们都有同样的问题。
我不清楚如何编写程序以使它们表现得像适当的 unix 工具。
因为这
$ cat characters | progname
Run Code Online (Sandbox Code Playgroud)
和这个
$ progname characters
Run Code Online (Sandbox Code Playgroud)
应该产生相同的输出。
我能在 Python 中找到的最接近的东西是 fileinput 库。不幸的是,我真的不知道如何重写我的 Python 脚本,所有这些脚本都是这样的:
#!/usr/bin/env python
# coding=UTF-8
import sys, re
for file in sys.argv[1:]:
f = open(file)
fs = f.read()
regexnl = re.compile('[^\s\w.,?!:;-]')
rstuff = regexnl.sub('', fs)
f.close()
print rstuff
Run Code Online (Sandbox Code Playgroud)
fileinput 库在有标准输入时处理标准输入,如果有文件则处理文件。但它迭代单行。
import fileinput
for line in fileinput.input():
process(line)
Run Code Online (Sandbox Code Playgroud)
我真的不明白。我想如果您正在处理小文件,或者您对文件没有做太多事情,这似乎很明显。但是,就我而言,这比简单地打开整个文件并将其读入字符串要慢得多,如上所述。
目前我运行上面的脚本
$ pythonscript textfilename1 > textfilename2
Run Code Online (Sandbox Code Playgroud)
但我希望能够在管道中运行它(及其兄弟),比如
$ grep pattern textfile1 | pythonscript | pythonscript | pythonscript > …Run Code Online (Sandbox Code Playgroud) 我想打印文件中的奇数行和偶数行。
我找到了这个使用 echo 的 shell 脚本。
#!/bin/bash
# Write a shell script that, given a file name as the argument will write
# the even numbered line to a file with name evenfile and odd numbered lines
# in a text file called oddfile.
# -------------------------------------------------------------------------
# Copyright (c) 2001 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit …Run Code Online (Sandbox Code Playgroud) 我知道我以前做过这个,所以我确定这是可能的,我只是忘记了怎么做。有一种方法可以告诉 convert 抓取 PDF 的特定页面,我想将该页面的格式保留为 PDF。
最近我需要删除很多重复项。我正在合并三个或四个文件系统,我希望能够经济地使用空间。起初,fdupes它似乎是这项工作的最佳工具,但我越来越遇到限制。
考虑命令fdupes -rdN somedirectory/。这会对 somedirectory 的子目录中的所有文件进行散列。
当它遇到重复项时,它会删除它们,因此所有内容都只有一个副本。
但是如果我想保留somedirectory/subdirectory1/somefile并且实际上有四个重复项,并且程序首先遇到其中一个重复项怎么办?然后它删除了somedirectory/subdirectory1/somefile我不想要的。
我希望能够以某种方式指定要保留的重复项。到目前为止,处理重复项的标准程序(duff、FSLint)似乎都不允许这种行为的自动化。我不想自己动手,所以这就是我问这个问题的原因。
我希望能够写出类似的东西
killdupes -rdN --keep=filesin,somedirectories,separated,by,commas somedirectory/
Run Code Online (Sandbox Code Playgroud) 我最近尝试了 simh 模拟器pdp11。
我使用的磁盘映像可以在 Internet 上找到,启动说明在此处。
据推测,它属于 Dennis Ritchie,因为用户名是“dmr”。
在 /usr/games 文件夹中大约有 20 个游戏和娱乐,用于浪费昂贵的计算资源。
一种“游戏”被称为“bcd”。
如果我通过键入运行它./bcd,则没有任何反应。但随后我执行的下一个命令被打印为 ascii art:
________________________________________________
/WC -L * |
| ] |
| ]] ] |
|] |
|111111111111111111111111111111111111111111111111|
|222222222222222222222222222222222222222222222222|
|3]33]3333333333333333333333333333333333333333333|
|444444]44444444444444444444444444444444444444444|
|555555555555555555555555555555555555555555555555|
|]66666666666666666666666666666666666666666666666|
|777777777777777777777777777777777777777777777777|
|888888]88888888888888888888888888888888888888888|
|999999999999999999999999999999999999999999999999|
|________________________________________________|
________________________________________________
/LS |
| |
|] |
| ] |
|111111111111111111111111111111111111111111111111|
|2]2222222222222222222222222222222222222222222222|
|]33333333333333333333333333333333333333333333333|
|444444444444444444444444444444444444444444444444|
|555555555555555555555555555555555555555555555555|
|666666666666666666666666666666666666666666666666|
|777777777777777777777777777777777777777777777777|
|888888888888888888888888888888888888888888888888|
|999999999999999999999999999999999999999999999999|
|________________________________________________|
Run Code Online (Sandbox Code Playgroud)
有谁知道这些代表什么?
我有一个文本文件,我想根据易经的 64 卦将其分成 64 个不相等的部分。由于每个卦的段落都以一些数字、一个句点和两个换行符开头,因此正则表达式应该很容易编写。
但是如何根据这个正则表达式将文本文件实际拆分为 64 个新文件?似乎更像是perl. 但也许有一种更明显的方式让我完全失踪。
function ×3
shell-script ×2
alias ×1
arithmetic ×1
awk ×1
bash ×1
bashrc ×1
bc ×1
command-line ×1
disk-usage ×1
fdupes ×1
file-copy ×1
files ×1
games ×1
history ×1
imagemagick ×1
networking ×1
nfs ×1
pdf ×1
pipe ×1
python ×1
sed ×1
split ×1
stdin ×1
stdout ×1
tcp ×1
zsh ×1