如果您运行hash它,它会显示自上次重置哈希后运行的所有命令的路径 ( hash -r)
[root@c04c ~]# hash
hash: hash table empty
[root@c04c ~]# whoami
root
[root@c04c ~]# hash
hits command
1 /usr/bin/whoami
[root@c04c ~]# whoami
root
[root@c04c ~]# hash
hits command
2 /usr/bin/whoami
Run Code Online (Sandbox Code Playgroud)
根据手册页,哈希的目的是:
/usr/bin/hash 实用程序影响当前 shell 环境记住找到的实用程序位置的方式。根据指定的参数,它将实用程序位置添加到其记住的位置列表或清除列表的内容。当没有指定参数时,它报告列表的内容。该
-r选项会导致外壳忘记所有记住的位置。散列不报告作为 shell 内置程序提供的实用程序。
除了查看我输入了多少次命令之外,我看不到hash.
它甚至出现在 thegeekstuff.com 的前 15 个有用命令中
在哪些方面hash有用?
根据这个页面, $@ 和 $* 做几乎相同的事情:
The $@ holds list of all arguments passed to the script.
The $* holds list of all arguments passed to the script.
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索所有热门搜索后,我找不到任何解释为什么会有 2 个看似重复的语法。
它们在我的脚本中的工作方式似乎相同。
cat foo.sh
#!/bin/bash
echo The parameters passed in are $@
echo The parameters passed in are $*
./foo.sh herp derp
The parameters passed in are herp derp
The parameters passed in are herp derp
Run Code Online (Sandbox Code Playgroud)
其他来源
bash.cyberciti.biz
我注意到如果我在目录上运行 ls -F ,某些条目后面会有 * 或 @ 。
spuder@ubuntu:~$ ls -F /sbin
acpi_available* getpcaps* lvmconf* ntfscp* start-stop-daemon*
agetty* getty* lvmdiskscan@ ntfslabel* status@
alsa* halt@ lvmdump* ntfsresize* stop@
alsactl* hdparm* lvmsadc@
spuder@ubuntu:~$ ls -F ~
daq-0.6.1/ examples.desktop noname-cache.lib snort-2.9.1/ Templates/
Desktop/ jpgraph-1.27.1/ noname.sch snortfiles/ Ubuntu One/
Documents/
Run Code Online (Sandbox Code Playgroud)
根据 ls 手册页
spuder@ubuntu:~$ man ls
...
-F, --classify
append indicator (one of */=>@|) to entries
...
Run Code Online (Sandbox Code Playgroud)
我猜这@意味着符号链接,
这些其他指标是什么意思 ( */=>@|) ?
我需要备份一个文件,我希望将时间戳作为名称的一部分,以便更容易区分。
您如何将当前日期注入复制命令?
[root@mongo-test3 ~]# cp foo.txt {,.backup.`date`}
cp: target `2013}' is not a directory
[root@mongo-test3 ~]# cp foo.txt {,.backup. $((date)) }
cp: target `}' is not a directory
[root@mongo-test3 ~]# cp foo.txt foo.backup.`date`
cp: target `2013' is not a directory
Run Code Online (Sandbox Code Playgroud) 我需要使用 wget 下载文件,但是我不知道文件名到底是什么。
https://foo/bar.1234.tar.gz
Run Code Online (Sandbox Code Playgroud)
根据手册页,wget 允许您在处理 ftp 站点时关闭和打开 globbing,但是我有一个 http url。
使用 wget 时如何使用通配符?我正在使用 gnu wget。
我尝试过的事情。
/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp
Run Code Online (Sandbox Code Playgroud)
更新
使用 -A 会导致下载服务器上以 .tar.gz 结尾的所有文件。
/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"
Run Code Online (Sandbox Code Playgroud)
更新
从答案来看,这是最终起作用的语法。
/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"
Run Code Online (Sandbox Code Playgroud) 您将如何在 systemd 服务单元上设置 ulimit?
这个stackoverflow 问题解释了 systemd 忽略了系统 ulimits
设置以下 ulimit 的语法是什么样的?
ulimit -c
ulimit -v
ulimit -m
[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
SOLR_INSTALL_DIR=/opt/solr
SOLR_ENV=/etc/default/solr.in.sh
RUNAS=solr
SOLR_PID_DIR="/var/solr"
SOLR_HOME="/opt/solr/server/solr"
LOG4J_PROPS="/var/solr/log4j.properties"
SOLR_LOGS_DIR="/opt/solr/server/logs"
SOLR_PORT="8389"
PIDFile=/var/solr/solr-8389.pid
ExecStart=/opt/solr/bin/solr start
ExecStatus=/opt/solr/bin/solr status
ExecStop=/opt/solr/bin/solr stop
Restart=on-failure
User=solr
SuccessExitStatus=143 0
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 我的 ~/.ssh/config 中有以下内容。
HOST 10.2.192.*
USER foo
PreferredAuthentications publickey
IdentityFile ~/.ssh/foo/id_rsa
Run Code Online (Sandbox Code Playgroud)
上面的配置让我在输入一半的单词的同时连接到一台机器。
ssh 10.2.192.x
Run Code Online (Sandbox Code Playgroud)
在我的 ssh 配置之前,我必须输入所有这些:
ssh foo@10.2.192.x -i ~/.ss/foo/id_rsa
Run Code Online (Sandbox Code Playgroud)
但是,我想使用基于密码的身份验证而不是基于密钥的身份验证连接到 10.2.192.x 子网中的一台机器。
因为 ssh 查看我的配置文件并找到匹配项,PreferredAuthentications publickey因为我无法仅使用我的密码登录。
我不打算经常 ssh 进入这个特殊的雪花虚拟机,以保证向我的 ssh 配置添加新规则。
我怎样才能让 ssh 忽略我的配置文件一次,并允许我使用密码进行身份验证?
你如何知道一个正在运行的进程需要多长时间才能完成?
例子:
date; dd bs=1m if=/foo of=bar; date
Run Code Online (Sandbox Code Playgroud)
^这个例子只有 1 秒的分辨率。
任何外壳都是可以接受的。
我经常登录到服务器,然后 cd 进入特定目录。是否可以将这两个命令简化为一个?
ssh bob@foo
cd /home/guest
Run Code Online (Sandbox Code Playgroud)
如果可能,我想避免更改 'foo' 上的任何内容,因为我必须与服务器管理员一起清除它。我使用 bash,但我愿意接受其他 shell 中的答案。
[root@localhost ~] vgdisplay
--- Volume group ---
VG Name vg_root
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 297,59 GiB
PE Size 4,00 MiB
Total PE 76182
Alloc PE / Size 59392 / 232,00 GiB
Free PE / Size 16790 / 65,59 GiB
VG UUID XXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
光伏:
[root@localhost ~] pvdisplay
--- …Run Code Online (Sandbox Code Playgroud)