目录
Linux优点
-
一切都是一个文件。(包括硬件,文本,二进制,源代码)
-
系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)
-
当遇到复杂任务,通过不同功能用途的程序组合起来完成。
-
避免令人困惑的用户界面就是没有复杂的图形界面。
-
连配置文件都存储在文本中,方便增删改查。
-
不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
一、Shell
1、Shell定义
Linux系统中运行的一种特殊程序,在用户和内核之间充当“翻译官”
用户登录Linux系统时,自动加载一个Shell程序
2、不同的Shell环境
Bash是Linux系统中默认使用的Shell程序
文件位于/bin/bash
[root@localhost ~]# echo $SHELL //显示当前shell
/bin/bash
[root@localhost ~]# cat /etc/shells //显示当前系统所有使用的shell
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhost mnt]# sh 切换shell环境
sh-4.2#
[root@localhost mnt]# pstree 查看使用过的shell环境
├─sshd───sshd───bash───csh───bash───tcsh───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
二、Linux命令的分类
1、Shell与内部命令、外部命令
内部命令 | 外部命令 |
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
2、help命令可以查看内部命令
[root@localhost opt]# help
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表.
输入 `help 名称' 以得到有关函数`名称'的更多信息.
使用 `info bash' 来获得关于 shell 的更多一般性信息
使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息.
名称旁边的星号 (*) 意味着该命令被禁用.
job_spec [&] history [-c] [-d 偏移量] >
(( 表达式 )) if 命令; then 命令; [ el>
. 文件名 [参数] jobs [-lnprs] [任务声明 >
: kill [-s 信号声明 | -n
[ 参数... ] let 参数 [参数 ...]
[[ 表达式 ]] local [option] 名称[=值] >
alias [-p] [名称[=值] ... > logout [n]
bg [任务声明 ...] mapfile [-n 计数] [-O 起
bind [-lpvsPVS] [-m 键映射> popd [-n] [+N | -N]
break [n] printf [-v var] 格式 [参
builtin [shell 内嵌 [参数> pushd [-n] [+N | -N | 目录>
caller [表达式] pwd [-LP]
case 词 in [模式 [| 模式> read [-ers] [-a 数组] [-d >
cd [-L|[-P [-e]]] [dir] readarray [-n 计数] [-O 賾
command [-pVv] 命令 [参数> readonly [-aAf] [name[=value>
compgen [-abcdefgjksuv] [-o 缠 return [n]
complete [-abcdefgjksuv] [-pr> select NAME [in 词语 ... ;>
compopt [-o|+o 选项] [-DE] > set [-abefhkmnptuvxBCHP] [-o>
continue [n] shift [n]
coproc [名称] 命令 [重嬾 shopt [-pqsu] [-o] [选项厾
declare [-aAfFgilrtux] [-p] [> source 文件名 [参数]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [任务声传 test [表达式]
echo [-neE] [参数 ...] time [-p] 管道
enable [-a] [-dnps] [-f 文乾 times
eval [参数 ...] trap [-lp] [[参数] 信号
exec [-cl] [-a 名称] [命乾 真
exit [n] type [-afptP] 名称 [名称>
export [-fn] [名称[=值] ..> typeset [-aAfFgilrtux] [-p] >
伪 ulimit [-SHacdefilmnpqrstuvx>
fc [-e 编辑器名] [-lnr] [> umask [-p] [-S] [模式]
fg [任务声明] unalias [-a] 名称 [名称 >
for 名称 [in 词语 ... ] ;> unset [-f] [-v] [名称 ...]>
for (( 表达式1; 表达式2> until 命令; do 命令; don>
function 名称 { 命令 ; } > variables - 一些 shell 变>
getopts 选项字符串 名祾 wait [编号]
hash [-lr] [-p 路径名] [-d> while 命令; do 命令; don>
help [-dms] [模式 ...] { 命令 ; }
3、使用type命令来区分内外部命令
[root@localhost /]# type cd
cd 是 shell 内嵌 //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名 //别名代表外部命令
ls 是 /usr/bin/ls //外部命令会有程序路径
[root@localhost /]# whereis ls //whereis 可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
外部命令存放于 echo $PATH 一个一个找,找到为止,找不到就报无命令
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时性的)加快读取速度
[root@localhost ~]# type useradd
useradd 是 /usr/sbin/useradd
[root@localhost ~]# useradd wu
[root@localhost ~]# type useradd
useradd 已被哈希 (/usr/sbin/useradd)
[root@localhost ~]# hash //或者使用hash
使用过一次 外部命令 将会把该外部命令 缓存在hash
命中 命令
1 /usr/bin/dd //前面数字代表用过几次
2 /usr/sbin/useradd
1 /usr/bin/whoami
3 /usr/bin/ls
[root@localhost ~]# hash -d dd //清楚dd命令缓存 -r全清
[root@localhost ~]#hash -r
[root@localhost ~]#hash
hash: 哈希表为空
#清除所有缓存
[root@localhost ~]# hash
命中 命令
2 /usr/sbin/useradd
1 /usr/bin/whoami
3 /usr/bin/ls
[root@localhost ~]# which ping //外部命令的磁盘路径 -a 所有
/usr/bin/[root@localhost ~]# which help //内部命令找不到
/usr/bin/which: no help in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# whereis echo //相关文档的帮助的命令
echo: /usr/bin