git bash操作指南
每个交易都有最常使用该交易的工具。 对于许多系统管理员来说,该工具就是他们的shell 。 在大多数Linux和其他类似Unix的系统上,默认shell是Bash。
Bash是一个相当古老的程序,它起源于1980年代后期,但是它建立在许多更老的shell之上,例如C shell( csh ),很早就已经十年了。 因为外壳的概念太旧了,所以有大量的奥术知识需要等待使用,以使系统管理员或gal的生活变得更加轻松。
让我们看一些基本知识。
举手我很确定我们很多人曾经是那个家伙或女孩。 非常痛苦。 这里有一些非常简单的技巧,可以防止您再次撞到那块石头。
首先,为指向mv -I
和rm -I
命令mv
和rm
设置别名。 这将确保运行rm -f /boot
至少要求您进行确认。 在Red Hat Enterprise Linux中,如果您使用root帐户,则默认情况下会设置这些别名。
如果您也想为普通用户帐户设置这些别名,只需将这两行放在主目录中的.bashrc文件中(它们也将与sudo一起使用):
alias
mv =
'mv -i'
alias
rm =
'rm -i'
可以防止发生意外的另一件事是,确保您在使用root帐户时有所了解。 通常,我可以通过使根提示符与我在日常日常工作中使用的提示符非常好来做到这一点。
如果将以下内容放到root的主目录中的.bashrc文件中,您将看到一个根目录提示,该提示是红色的黑色,这使您(或其他任何人)应谨慎行事。
export PS1 = "\[ $(tput bold) $(tput setab 0) $(tput setaf 1) \]\u@\h:\w # \[ $(tput sgr0) \]"
实际上,您应该避免尽可能以root用户身份登录,而是通过sudo运行大多数sysadmin命令,但这是另一回事。
已经实施了一些小技巧来帮助防止使用root帐户的“意外副作用”,让我们看一下Bash在日常工作中可以帮助您完成的一些工作。
您可能知道,当您按Bash中的向上箭头键时,您可以看到并重复使用以前的所有(很多)命令。 这是因为这些命令已保存到主目录中的.bash_history文件中。 该历史记录文件附带了一堆非常有用的设置和命令。
首先,您可以通过输入history
来查看整个最近的命令历史history
,或者可以通过输入history 30
来将其限制为最后30条命令。 但这真是香草。 您可以更好地控制Bash保存的内容以及保存方式。
例如,如果将以下内容添加到.bashrc中,则所有以空格开头的命令都不会保存到历史记录列表中:
HISTCONTROL =ignorespace
如果您需要以明文形式将密码传递给命令,这将很有用。 (是的,这太可怕了,但仍然会发生。)
如果您不想在历史记录中显示频繁执行的命令,请使用:
HISTCONTROL =ignorespace:erasedups
这样,每次使用命令时,所有先前出现的命令都会从历史记录文件中删除,并且只有最后一次调用会保存到历史记录列表中。
我特别喜欢的历史记录设置是HISTTIMEFORMAT
设置。 这将在历史记录文件中的所有条目前面加上时间戳。 例如,我使用:
HISTTIMEFORMAT = "%F %T "
当我输入history 5
,我会得到很好的完整信息,例如:
1009
2018 -06-
11
22 :
34 :
38
cat
/ etc
/ hosts
1010
2018 -06-
11
22 :
34 :
40
echo
$foo
1011
2018 -06-
11
22 :
34 :
42
echo
$bar
1012
2018 -06-
11
22 :
34 :
44
ssh myhost
1013
2018 -06-
11
22 :
34 :
55
vim .bashrc
这样一来,浏览我的命令历史记录和查找我两天前用来建立到我的家庭实验室的SSH隧道(我一次又一次,一次又一次地忘记了)的SSH通道变得容易得多。
在编写Bash脚本时,我将以最佳实践(或者至少是良好的;至少我并不要求全知的)的前11名列表进行总结。
Bash脚本可能变得复杂,注释也很便宜。 如果您不确定是否要添加评论,请添加评论。 如果您在周末之后返回,并且不得不花时间弄清楚上周五您想做什么,那么您忘记添加评论了。
${myvariable}
。 养成这种习惯可以使${variable}_suffix
类的事情${variable}_suffix
可能,并提高整个脚本的一致性。 $()
语法。 因此使用: for file in $ ( ls ) ; do
不 for file in ` ls ` ; do
前一个选项是可嵌套的,更易于阅读,并且使一般的sysadmin用户满意。 不要使用反引号。 $()
语法而不是反引号,并将变量包装在花括号中,我会更喜欢。 如果人们使用两个或四个空格(而不是制表符)来缩进,但我宁愿这样做,但即使您选择做错了,也要始终如一地做错。 #!/usr/bin/bash
作为我的工具。 不要使用#!/bin/sh
或#!/usr/bin/sh
。 您的脚本将执行,但将在兼容模式下运行-可能会带来很多意想不到的副作用。 (当然,除非您需要兼容模式。)
if
[
${myvar} ==
"foo"
] ;
then
echo
"bar"
fi
并针对以下行将其评估为false:
if
[
" ${myvar} " ==
"foo"
] ;
then
echo
"bar"
fi
另外,如果不确定变量的内容(例如,在解析用户输入时),请引用变量以防止某些特殊字符的解释,并确保将变量视为单个单词,即使它包含空格也是如此。 ==
)。 这是一个一致性问题,即使(仅用于字符串比较)单个等号也会起作用,但我立即想到“单个等号是赋值运算符!”
# we have failed
echo
"Process has failed to complete, you need to manually restart the whatchamacallit"
exit
1
这样可以更轻松地从另一个脚本中以编程方式调用您的脚本并验证其是否成功完成。
# this sets the value of $myvar to redhat, and prints 'redhat'
echo
${myvar:=redhat}
# this throws an error reading 'The variable myvar is undefined, dear reader' if $myvar is undefined
${myvar:?The variable myvar is undefined, dear reader}
local
关键字。 local
关键字将创建一个局部变量,该局部变量仅在该函数中可见。 这限制了冲突变量的可能性。 我真的很喜欢Bash。 我可以花一些时间来撰写相关文章,或者与其他爱好者交流一些不错的技巧。 确保在评论中删除您的收藏夹!
翻译自: https://opensource.com/article/18/7/admin-guide-bash
git bash操作指南