Linux命令这么多,记不住,怎么玩?
Linux命令虽然非常多,但是:
下面我就带大家来玩一下Linux命令
你的Linux上有多少个可用的命令呢?我们在 CL 中 输入compgen -c就知道了
~]# component -c
...
cp
curlbd
digbd
grep
ifa
l.
ll
ls
mv
pingbd
...
sqlite3
comm
db_stat
lesskey
gdbus
yum
gpg
zsoelim
newaliases.postfix
newaliases
...
~]#
好多哦,具体有多少呢?我们用wc命令来统计一下行数就知道了
~]# component -c | wc -l
1160
显示是有一千来个
这些命令,基于上位于/bin, /sbin, /usr/bin, /usr/sbin这几个目录下——即命令的搜索路径下,我们可以先来看一下PATH系统或shell参数的值
~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
~]#
~]# ls /sbin
addpart dmsetup grub-terminfo kpartx mke2fs pvscan thin_delta
agetty dmstats halt ldconfig mkfs rdisc thin_dump
arp dracut hwclock load_policy amfs reboot thin_ls
arping dumpe2fs ifcfg logsave 2 reload thin_metadata_size
audispd e2fsck ifconfig losetup 3 resize2fs thin_repair
auditctl e2image ifdown lsinitrd 4 restart thin_restore
auditd e2label ifenslave lsmod 4dev restorecon thin_rmap
augenrules e2undo ifup lspci mkhomedir_helper rmmod thin_trim
...略
~]#
是不是有好多命令呀,仅/sbin下就二百多个呢?
~]# ls /sbin | wc -l
251
~]#
总之呢,compgen -c命令,告诉我们,我们的Linux系统上有一千多个命令,echo $PATH,我们可以看到PATH变量定义的命令搜索路径,我们的命令CMDs就放在这些路径下,其中以s开头的目录如/sbin,通常放的都是些系统级的命令,而不是s开头的,比如/bin通常放的是一些用户引进的三方命令。
Linux命令,可以简单地分为两类:内部命令和外部命令。
我们可以使用type命令来检测一个命令是否属于内部命令,如果是,则会显示builtin信息,否则就不显示builtin。比如我们用type来测试一下man和help两个命令:
~]# type man
man is /usr/bin/man
~]# type help
help is a shell builtin
~]#
显然,man是外部命令,而help是内部命令。
我们同样使用compgen命令,带上-b选项,来列举出所有的内建命令了。
~]# compgen -b
.
:
[
alias
bg
bind
break
builtin
caller
cd
command
compgen
complete
。。。
dirs
disown
echo
enable
eval
。。。
help
history
jobs
kill
let
local
logout
。。。
type
typeset
ulimit
umask
unalias
unset
wait
~]# compgen -b | wc -l
61
~]#
而且,我们很容易就知道了Linux或bash自带的内建命令,有61个。
所谓内建命令,就是它们是linux或shell自带的,不需要去搜索命令搜索路径(即不在命令搜索路径下),即可直接运行的命令,这样的命令是shell进程的一部分,调用的是shell内部的函数或功能,所以不用另开线程去执行,执行效率上比外部命令更高、也更稳定和安全。
内部命令的使用是可以启用或禁用的,我们使用enable -a或直接enable就可以看到所有的内部命令了
~]# enable
。。。
。。。
enable ulimit
enable umask
enable unalias
enable unset
enable wait
~]#
我们可以通常enable -n来禁用一个指定的内建命令,也可以通过enable来直接启用一个封禁的内建命令。
~]# enable -n unalias #禁用unalias命令
~]#
~]# enable | tail -5
enable typeset
enable ulimit #禁用后,ulimit命令后看不到alias命令了
enable umask
enable unset
enable wait
~]# enable unalias #重新启用
~]# enable | tail -5
enable ulimit
enable umask
enable unalias #unalais命令又出现了
enable unset
enable wait
~]#
我们可以通过输入help直接回车,得到help命令的基本用法或简易语法清单
~]# help
。。。A star (*) next to a name means that the command is disabled.job_spec [&] history [-c] [-d offset] [n] or history -anrw [filename] or history -ps >(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else >. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x command [args]: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [s>[ ] let arg [arg ...][[ expression ]] local [option] name[=value] ...alias [-p] [name[=value] ... ] logout [n]bg [job_spec ...] mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c>bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq]> popd [-n] [+N | -N]break [n] printf [-v var] format [arguments]builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]caller [expr] pwd [-LP]case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p >cd [-L|-P] [dir] readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [>command [-pVv] command [arg ...] readonly [-af] [name[=value] ...] or readonly -pcompgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlis> return [n]complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat]> select NAME [in WORDS ... ;] do COMMANDS; donecompopt [-o|+o option] [-DE] [name ...] set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]continue [n] shift [n]coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname
。。。
。。。
~]#
可以通过 help CMD 获得指定内建的具体用法,比如 help alias 我们就可以显示得到内建命令 alias 的具体用法。
~]# help alias
alias: alias [-p] [name[=value] ... ]Define or display aliases.Without arguments, `alias' prints the list of aliases in the reusableform `alias NAME=VALUE' on standard output.Otherwise, an alias is defined for each NAME whose VALUE is given.A trailing space in VALUE causes the next word to be checked foralias substitution when the alias is expanded.Options:-p Print all defined aliases in a reusable formatExit Status:alias returns true unless a NAME is supplied for which no alias has beendefined.
~]#
man命令和info命令不能用来获取指定的内建命令的帮助信息,但可以得到整个bash的内建命令的一份用法清单或手册,我们以 info alias为例,只要是 man或info命令后接某个内建命令名都会出现这份清单。man和info显示的内容都是一样的,info援引的man的内容,只是info显示得更窄一点、半屏显示的样子。
~]# info aliasFile: *manpages*, Node: alias, Up: (dir)BASH_BUILTINS(1) BASH_BUILTINS(1)NAMEbash, :, ., [, alias, bg, bind, break, builtin, caller, cd, command,compgen, complete, compopt, continue, declare, dirs, disown, echo,enable, eval, exec, exit, export, false, fc, fg, getopts, hash, help,history, jobs, kill, let, local, logout, mapfile, popd, printf, pushd,pwd, read, readonly, return, set, shift, shopt, source, suspend, test,times, trap, true, type, typeset, ulimit, umask, unalias, unset, wait -bash built-in commands, see bash(1)BASH BUILTIN COMMANDSUnless otherwise noted, each builtin command documented in this sectionas accepting options preceded by - accepts -- to signify the end of theoptions. The :, true, false, and test builtins do not accept optionsand do not treat -- specially. The exit, logout, break, continue, let,and shift builtins accept and process arguments beginning with - with-out requiring --. Other builtins that accept arguments but are notspecified as accepting options interpret arguments beginning with - asinvalid options and require -- to prevent this interpretation.: [arguments]No effect; the command does nothing beyond expanding argumentsand performing any specified redirections. A zero exit code isreturned.. filename [arguments]source filename [arguments]Read and execute commands from filename in the current shellenvironment and return the exit status of the last command exe-cuted from filename. If filename does not contain a slash, filenames in PATH are used to find the directory containing file-name. The file searched for in PATH need not be executable.When bash is not in posix mode, the current directory issearched if no file is found in PATH. If the sourcepath
... 按q退出
~]#
事实上,如果我们要获得Linux命令的帮助信息,大体上可以这样做:
当然,你也可以上网查,但以上显示的命令语法帮助信息,显然是最为权威的。
Bash是sh,csh,ksh的集大成者。在原有shell特性的基础上,又开发出了许多自己独有的特性。
总之,我们将它都可以笼罩地称之为Bash特性,毕竟Bash兼容了原有shell的特性。
Bash特性,让使用Bash的人变得非常顺手和高效,有点唯快不破的意思。
1)自动补全
比如,你可以通常连接两次Tab键来实现命令或路径的自动补全,而按Tab键实现补全,其实就是调用的compgen内建命令的功能。比如 compgen -w "abc bcd aaa axy" a,就为会a列出在-W中指定字串中匹配到的补全名单(注意选项-W是大写的W)
~]# compgen -W "abc bcd aaa axy" a
abc
aaa
axy
~]#
2)命令历史
除了自动补全,Bash还提供了History基础设施,支持history,fc等使用历列举敲过的历史命令,
~]# history #显示所有命令历史记录
...
...1050 info alias1051 compgen -w "abc bcd aaa axy" a1052 compgen -W "abc bcd aaa axy" a1053 c1054 history
~]#
~]# history 10 #显示最近10条历史命令1047 c1048 help alias1049 man alias1050 info alias1051 compgen -w "abc bcd aaa axy" a1052 compgen -W "abc bcd aaa axy" a1053 c1054 history1055 c1056 history 10
~]#
~]# fc -l #默认显示最近16条
1042 enable | tail -5
1043 enable unalias
1044 enable | tail -5
1045 c
1046 help
1047 c
1048 help alias
1049 man alias
1050 info alias
1051 compgen -w "abc bcd aaa axy" a
1052 compgen -W "abc bcd aaa axy" a
1053 c
1054 history
1055 c
1056 history 10
1057 fc -l 4
~]#
~]# fc -l 1045 1050 #限定显示第1045到1050条的命令历史记录
1045 c
1046 help
1047 c
1048 help alias
1049 man alias
1050 info alias
~]#
并支持以Bang(!)的方式进行历史命令扩展(history expansion)
~]# !he
help alias
alias: alias [-p] [name[=value] ... ]Define or display aliases.Without arguments, `alias' prints the list of aliases in the reusableform `alias NAME=VALUE' on standard output.Otherwise, an alias is defined for each NAME whose VALUE is given.A trailing space in VALUE causes the next word to be checked foralias substitution when the alias is expanded.Options:-p Print all defined aliases in a reusable formatExit Status:alias returns true unless a NAME is supplied for which no alias has beendefined.
~]#
注意:扩展(expansion),通常也翻译成 展开
3)命令缓存,又称命令hash
Linux会将执行过的外部命令进行hash缓存。hash是指基于hash算法的hash索引库,这种数据库的哈希索引,在搜索时非常高效。
哪些命令在使用后,被hash库缓存过呢?我们可以通过hash或hash -l可以查看
~]# hash -l
builtin hash -p /usr/bin/tabs tabs
builtin hash -p /bin/vi vi
builtin hash -p /usr/bin/man man
builtin hash -p /usr/bin/info info
builtin hash -p /bin/ls ls
builtin hash -p /usr/bin/clear clear
~]#
~]# hash
hits command1 /usr/bin/tabs1 /bin/vi1 /usr/bin/man1 /usr/bin/info1 /bin/ls
~]#
我们可以看到,缓存的核心内容,是命令的全路径,通常hash命令,我们还可以看到命令缓存后再次使用被命中的次数。
4)命令别名:alias
当你通过 敲 cd /etc/sysconfig/network-script/进行目录切换时,另一个小朋友却只是敲了cdnet几个字符,就实现了同样的切换,你会不会觉得有点亏。
tmp]# cd /etc/sysconfig/network-scripts/
network-scripts]#
network-scripts]#
network-scripts]#cd -
/tmp
tmp]# cdnet
network-scripts]# alias | grep cdnet
alias cdnet='cd /etc/sysconfig/network-scripts/'
network-scripts]#
定义命令别名非常简单,就是:alias 参数
比如上面我们用到的cdnet别名,就可以如下进行定义:
~]#
~]# alias cdnet='cd /etc/sysconfig/network-script/'
~]#
当然,这只是定义的临时别名,如果我们关闭shell,它就消失了。临时命令别名,可以通过 “unalias 别名”进行取消。
如果我们们要定义永久别名,只需要将它添加到/etc/profile或者~/.bashrc当中就可以了,二者的区别在于:
我们来试一下就好了
]# echo "alias cdnet='cd /etc/sysconfig/network-script/'"> /etc/profile
]#
]# source /etc/profile #需要刷新一下配置
]#
是否生效,我们试一下就好了,因为命令别名的使用,和普通命令基本上是一样的。
5)目录栈:pushd,dirs,popd
Bash还提供了目录堆栈的功能特性,Bash会自动将当前目录放入该目录栈的栈顶,当用户切换目录时,又会将新的工作目录放入栈顶,原来的弹出去。
真正要使用好目录栈功能特性,我们需要了解pushd,dirs和popd三个内建命令。
首先,我们可以简单地定义一下命令别名,比如:
~]# alias a=alias
~]#
~]# a c=clear
~]# a cls=clear
~]#
~]# a p='pushd `pwd`'
~]#
这样我们就拥有了一堆简洁的命令别名了,比如c、cls、p,这些别名,其实也是命令。我们用compgen -c是可以看到。
p命令很简单,功能就是在切换到一个新目录后,我们输入p,一回车,就把当前的工作全路径压到目录栈中去了。比如:
network-scripts]# alias p='pushd `pwd`'
network-scripts]#
network-scripts]# cd /tmp
tmp]# p
/tmp /tmp
tmp]# cd /var
var]# p
/var /var /tmp
var]# cd /usr
usr]# p
/usr /usr /var /tmp
usr]# dirs -v0 /usr1 /usr2 /var3 /tmp
usr]# cdnet
network-scripts]# p
/etc/sysconfig/network-scripts /etc/sysconfig/network-scripts /usr /var /tmp
network-scripts]# dirs -v0 /etc/sysconfig/network-scripts1 /etc/sysconfig/network-scripts2 /usr3 /var4 /tmp
network-scripts]# pushd +3
/tmp /etc/sysconfig/network-scripts /etc/sysconfig/network-scripts /usr /var
tmp]# dirs -v0 /tmp1 /etc/sysconfig/network-scripts2 /etc/sysconfig/network-scripts3 /usr4 /var
tmp]# pushd +1
/etc/sysconfig/network-scripts /etc/sysconfig/network-scripts /usr /var /tmp
network-scripts]#
看到没有,我们可以用dirs -v查看当前目录栈里都压了些什么,用pushd +N(N是栈中目录条目的序号)实现目录的快速跳转或切换。当然如果我们想将栈中的哪个路径条目剔除,可以使用popd +N即可实现。
我给Linux中1~3个字符的常用命令,称为极客命令。
称之为极客命令,是因为它符合Linux简洁高效的思想。
比如我们说Linux的“一切皆文件”、“用文本文件进行配置”等思想,
根本目的或灵魂都是想达到“简洁+高效”,文件或文本本身不是智慧,
但如果一样东西能达到“简洁+高效”,那它就是智慧——你能理解这一点吗?
这些极客命令非常简洁,数量算起来却也不算少,使用频度却很高。
比方说一个字符的命令:
单个字符的命令非常少,但两个字符的常用命令,可就不少了,比如:
序号 | 命令 | 说明 | 备注 |
1 | sh | 这个是个软链接,实际指向/bin/bash | |
2 | () | 这个是用来开辟子shell用的 | |
3 | ls | 英文就是list,列举目录内容的意思 | |
4 | ll | ll是ls的一个别名,相当于ls -l | |
5 | l. | 这个如果存在,也是ls的别名 | |
6 | cd | 这个是change directory即切换目录的意思 | |
7 | id | 显示用户的uid、gid等信息 | |
8 | su | switch user,切换用户的意思 | |
9 | vi | vi编辑器,或vim的别名 | |
10 | nl | 带行号显示文件内容 | |
11 | rm | 删除文件或目录。rm -rf / 这是经典的面向监狱运维 | |
12 | cp | 拷贝 | |
13 | mv | 移动或重命名文件目录 | |
14 | tr | 转换或删除字符 | |
15 | wc | 字词统计 | |
16 | od | 八进制或其它进制编码转储 | |
17 | at | 一次性定时任务 | |
18 | dd | 底层机制的复制,0 1 形式的副本拷贝 | |
19 | ln | 创建链接。如果想创建软件接,简单,带上-s吧 | |
20 | df | 磁盘或文件系统的空闲情况 | |
21 | du | 磁盘或文件目录的使用情况 | |
22 | ip | 网络配置命令 | |
23 | ss | 替代netstat,网络统计 | |
24 | nc | 一款多功能网络工具 | |
25 | ps | 进程快照。ps -ef,经典用法之一 | |
26 | fg | 作业送至前台 | |
27 | bg | 作业发至后台 | |
28 | fc | 这个是命令历史(history)的一个剪辑命令 | |
29 | bc | 浮点运算 | |
30 | nm | 这个是看库文件符号用的,看调用了哪些函数 | |
31 | rz | 如果你安装了lrzsz上传下载工具。这个是上传命令 | |
32 | sz | 如果你安装了lrzsz上传下载工具。这个是下载命令 | |
33 | as | 这个是汇编器,as就是assemble的意思 | |
34 | 其它 | 比如xz压缩、pr打印、ar、dc等 |
man (1) - 一个在线参考手册的接口cls - clear命令的定制别名tty (1) - 打印连接到标准输入的终端的文件名who (1) - 显示谁登录了系统cal (1) - 显示日历set (1) - Bash内建变量:设置/更改Shell属性和位置参数的值,或显示Shell变量的名称和值。env (1) - 在修改后的环境中运行程序pwd (1) - 打印当前/工作目录的名称dir (1) - 列出目录内容cat (1) - 连接文件并在标准输出上打印tac (1) - 反向连接和打印文件tee (1) - 从标准输入读取并写入标准输出和文件cut (1) - 从每行文件中删除节col (1) - 从输入过滤反向换行rev (1) - 反转一个或多个文件的行fmt (1) - 简单优化文本格式化程序cmp (1) - 逐字节比较两个文件seq (1) - 打印一系列数字tar (1) - GNU‘tar’将许多文件一起保存到一个磁带或磁盘归档中,并可以从归档中恢复单个文件。let (1) - Bash内建变量:计算算术表达式。arp (8) - 操作系统ARP缓存top (1) - 显示Linux进程ldd - 列出动态依赖库(List dynamic dependencies)sum (1) - 校验和并计算文件中的块vim (1) - Vi-IMCroved,程序员文本编辑器sed (1) - 用于过滤和转换文本的流编辑器awk (1) - 模式扫描与处理语言rpm (8) - RPM包管理器yum (8) - YUM是一个基于RPM的交互式的包管理器yes (1) - 重复输出字符串直到终止lvm (8) - lvm2 工具pvs (8) - 显示有关物理卷的信息vgs (8) - 显示有关卷组的信息lvs (8) - 报告/显示有关逻辑卷的信息
本文发布于:2024-01-28 20:42:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170644572310149.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |