linux命令执行过程详解

1、执行命令
输入命令后回车
提请shell程序找到键入命令所对应的可执行程序或者代码,并且由其分期后,提交给内核分配资源将其运行起来。
在shell中可执行的命令有俩类:
内部命令:由shell自带的内部集成命令
help 可以查看内部命令列表

[[email protected] ~]# help
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally.  Type `help‘ to see this list.
Type `help name‘ to find out more about the function `name‘.
Use `info bash‘ to find out more about the shell in general.
Use `man -k‘ or `info‘ to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 job_spec [&]                                                    history [-c] [-d offset] [n] or history -anrw [filename] or >
 (( expression ))                                                if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; >
 . filename [arguments]                                          jobs [-lnprs] [jobspec ...] or jobs -x command [args]
 :                                                               kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... o>
 [ arg... ]                                                      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 c>
 bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name]>  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 >
 cd [-L|[-P [-e]]] [dir]                                         readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C>
 command [-pVv] command [arg ...]                                readonly [-aAf] [name[=value] ...] or readonly -p
 compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat]>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] >  select NAME [in WORDS ... ;] do COMMANDS; done
 compopt [-o|+o option] [-DE] [name ...]                         set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
 continue [n]                                                    shift [n]
 coproc [NAME] command [redirections]                            shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilrtux] [-p] [name[=value] ...]                  source filename [arguments]
 dirs [-clpv] [+N] [-N]                                          suspend [-f]
 disown [-h] [-ar] [jobspec ...]                                 test [expr]
 echo [-neE] [arg ...]                                           time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [name ...]                    times
 eval [arg ...]                                                  trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [arguments ...]] [redirection .>  true
 exit [n]                                                        type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or export -p                    typeset [-aAfFgilrtux] [-p] name[=value] ...
 false                                                           ulimit [-SHacdefilmnpqrstuvx] [limit]
 fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [comma>  umask [-p] [-S] [mode]
 fg [job_spec]                                                   unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMANDS; done                    unset [-f] [-v] [name ...]
 for (( exp1; exp2; exp3 )); do COMMANDS; done                   until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name () { COMMANDS ; }          variables - Names and meanings of some shell variables
 getopts optstring name [arg]                                    wait [id]
 hash [-lr] [-p pathname] [-dt] [name ...]                       while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]                                       { COMMANDS ; }

enable 也可以查看命令列表

[[email protected] ~]# enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
enable command
enable compgen
enable complete
enable compopt
enable continue
enable declare
enable dirs
enable disown
enable echo
enable enable
enable eval
enable exec
enable exit
enable export
enable false
enable fc
enable fg
enable getopts
enable hash
enable help
enable history
enable jobs
enable kill
enable let
enable local
enable logout
enable mapfile
enable popd
enable printf
enable pushd
enable pwd
enable read
enable readarray
enable readonly
enable return
enable set
enable shift

外部命令:在文件系统路径下有对应的可执行的文件
查看路径命令
一、wheris

[[email protected] ~]# whereis ls     #多了帮助文档,更加详细
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

二、which -a

[[email protected] ~]# which -a ls
alias ls=‘ls --color=auto‘
    /usr/bin/ls

如果判断命令是内部命令还是外部命令
命令:type

实例:[[email protected] ~]# type pwd
pwd is a shell builtin            #内部命令
[[email protected] ~]# type hostname
hostname is /usr/bin/hostname      #外部命令表示为一个文件

也有可能一个命令既是外部命令也是内部命令,可以这样查看

[[email protected] ~]# type -a pwd
pwd is a shell builtin
pwd is /usr/bin/pwd

那么问题来了,输入命令是执行内部命令,还是外部命令呢?
命令执行是过程是这样的:
先看下是不是内部命令(内部命令执行速度更快),内部命令优先级更高,然后再去检查hash表(记录外部命令的路径),如果找到,找到后再执行。如果找不到这个命令在磁盘下的路径,就会以下面的方式寻找。
外部命令寻找路径的过程(首次执行)

[[email protected] bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

在我们再执行一个命令时,当确认不是内部命令后,就会当成外部命令在以上的目录文件中寻找,找到了(找到就停下)就执行,比如这个:

[[email protected] bin]# type hostname
hostname is /usr/bin/hostname     #在/usr/bin 下面找到

如果找不到就会报错。

[[email protected] bin]# lsls
bash: lsls: command not found...     #命令输入有误

再找到这个命令后,就会将这个命令的路径记录在hash表中,再次使用时,就可以很快执行,提高命令调用速率。
实例:

[email protected] bin]# hash
hits    command
   2    /usr/bin/whereis
   2    /usr/bin/man
   3    /usr/bin/ls

再次查看命令:

[[email protected] bin]# type whereis
whereis is hashed (/usr/bin/whereis)
[[email protected] bin]# type ifconfig
ifconfig is hashed (/usr/sbin/ifconfig)

清除hash缓存

[[email protected] etc]# hash
hits    command
   6    /usr/sbin/ifconfig
   1    /usr/bin/rm
   1    /usr/bin/cat
   9    /usr/bin/whereis
   3    /usr/bin/cp
   2    /usr/bin/man
   4    /usr/bin/ls
   1    /usr/bin/clear
[[email protected] etc]# hash -r
[[email protected] etc]# hash
hash: hash table empty

原文地址:https://blog.51cto.com/11620628/2430428

时间: 2024-10-07 17:09:10

linux命令执行过程详解的相关文章

【转】Linux命令工具 top详解

Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序:而且该命令的很多特性都可以通过交互式命令或者在个人定制

Linux命令工具 top详解

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序:而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. 常在linux

Hadoop MapReduce执行过程详解(带hadoop例子)

https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出.Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中.整个流程如图: Mapper任务的执行过程详解 每个Mapper任

Hadoop学习之MapReduce执行过程详解

转自:http://my.oschina.net/itblog/blog/275294 分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出.Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中.整个流程如图: Mapper任务的执行过程详解 每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我

每周一个linux命令之---uptime详解

每周一个linux命令之---uptime详解 linux命令 uptime详解 引言:从今天开始,每周更新一个对程序员有用的linux命令,我真的没敢写每天一个,我怕我坚持不下去,每周一个还是可以的.既然每周一个了,就肯定不能拿ls,chmod这种命令来凑数了.降低数量,保障质量.与大家共勉. 进入正题 uptime 我们先来看一下命令执行结果 11:10:42 up 4 days, 19:23, 2 users, load average: 3.17, 3.45, 3.65 我们来分组解释一

Linux命令之 lsof详解

简介: lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(来源百度百科). lsof在查找进程占用的那些文件或pid号由那些文件发起的等方面作用很大:尤其在Linux系统被黑后的溯源工作上绝对可以称之为一个重量级的命令. 格式详解: [[email protected] ~]# lsof -c httpd | head -5 COMMAND  PID   USER 

linux命令之yum详解

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记. yum的命令形式一般是如下:yum [options] [command] [package ...] 其中的[opt

3.Linux命令基础及详解

在Linux下,我们很多操作都是通过命令来实现的,所接下来我们就详解介绍Linux下命令的使用.首先要使用命令就得先知道他的格式: Linux命令的语法格式是  command options arguments,其中选项和参数是可以省略的.Linux下面命令是有多种的,有系统自身的命令.安装的应用程序命令.脚本执行所用的命令. ls :list directory contents  用来列出目录内容的, ls /path/to/dir|file[路径]  dir是目录名    file文件名

深入了解linux操作系统引导过程详解

Linux操作系统的引导过程:开机自检.mbr引导.grub菜单.加载linux内核.init进程初始化. 1.开机自检,检测硬件后根据启动顺序将控制权交给本机硬盘 2.mbr引导,根据硬盘的主引导记录,将控制权转交给引导分区或者启动菜单 3.grub菜单,启动菜单提供给用户选择进入不同的操作系统(例如windows)的界面.默认进入linux将系统控制权转交给内核. 4.加载linux内核,内核负责分配调度硬件资源与系统程序,内核接过系统控制权,开始管理整个Linux系统. 5.init进程初