Linux基础
Linux前言
linux的哲学思想
优点,优势
- 一切都是一个文件。容易看(包括硬件,文本,二进制,源代码)
- 系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)
- 当遇到复杂任务,通过不同功能用途的程序组合起来完成。 轻量级,一台服务 dhcp ip 数据库服务 网页
- 避免令人困惑的用户界面就是没有复杂的图形界面。
- 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型
shell
shell的定义
shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。
用户使用应用程序发布指令比如 (使用浏览器访问网页)
shell去通知操作系统需要进行什么样的操作(相当于解释层)
内核相当于操作系统去指挥硬件
硬件才能工作,否则无法交互。
不同的shell环境
bash是linux里面默认的shell程序位于/bin/bash csh ksh 语言不同比如中文英文都是交流的语言
显示当前shell
[root@localhost ~]# echo $SHELL
/bin/bash
显示当前系统所有的shell
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
切换shell环境
[root@localhost ~]# sh
sh-4.2# csh
[root@localhost ~]# tcsh
[root@localhost ~]# bash
[root@localhost ~]#
查看使用过的shell环境
[root@localhost ~]# pstree
systemd─ ··++·· -sshd───sshd───bash───sh───csh───tcsh───bash───pstree
内、外部命令
shell 分为内部命令 和外部命令,一般先执行内部命令,hash 再执行外部命令(别名最大)
内部命令 | 外部命令 |
---|---|
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
help命令可以查看内部命令
[root@localhost ~]# 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 偏移量] [n] 或 histor>
(( 表达式 )) if 命令; then 命令; [ elif 命令; the>
. 文件名 [参数] jobs [-lnprs] [任务声明 ...] 或 jobs >
: kill [-s 信号声明 | -n 信号编号 | >
[ 参数... ] let 参数 [参数 ...]
[[ 表达式 ]] local [option] 名称[=值] ...
alias [-p] [名称[=值] ... ] logout [n]
bg [任务声明 ...] mapfile [-n 计数] [-O 起始序号] [-s >
bind [-lpvsPVS] [-m 键映射] [-f 文件厾 popd [-n] [+N | -N]
break [n] printf [-v var] 格式 [参数]
builtin [shell 内嵌 [参数 ...]] pushd [-n] [+N | -N | 目录]
caller [表达式] pwd [-LP]
case 词 in [模式 [| 模式]...) 命令 ;> read [-ers] [-a 数组] [-d 分隔符] [-i>
cd [-L|[-P [-e]]] [dir] readarray [-n 计数] [-O 起始序号] [->
command [-pVv] 命令 [参数 ...] readonly [-aAf] [name[=value] ...] or read>
compgen [-abcdefgjksuv] [-o 选项] [-A 刾 return [n]
complete [-abcdefgjksuv] [-pr] [-DE] [-o 达 select NAME [in 词语 ... ;] do 命令; d>
compopt [-o|+o 选项] [-DE] [名称 ...] set [-abefhkmnptuvxBCHP] [-o option-name] >
continue [n] shift [n]
coproc [名称] 命令 [重定向] shopt [-pqsu] [-o] [选项名 ...]
declare [-aAfFgilrtux] [-p] [name[=value] .> 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] [名称[=值] ...] 或 export > typeset [-aAfFgilrtux] [-p] name[=value] .>
伪 ulimit [-SHacdefilmnpqrstuvx] [限制]
fc [-e 编辑器名] [-lnr] [起始] [终繾 umask [-p] [-S] [模式]
fg [任务声明] unalias [-a] 名称 [名称 ...]
for 名称 [in 词语 ... ] ; do 命令; do> unset [-f] [-v] [名称 ...]
for (( 表达式1; 表达式2; 表达式3 )> until 命令; do 命令; done
function 名称 { 命令 ; } 或 name () { > variables - 一些 shell 变量的名称吾
getopts 选项字符串 名称 [参数] wait [编号]
hash [-lr] [-p 路径名] [-dt] [名称 ...> while 命令; do 命令; done
help [-dms] [模式 ...] { 命令 ; }
type可以区分内、外部命令
内部命令
[root@localhost ~]# type cd
cd 是 shell 内嵌 ---- 内嵌代表内部命令
关闭内部命令
关闭:enable -n 内部命令
开启:enable 内部命令
[root@localhost ~]# enable -n cd
[root@localhost ~]# cd ..
[root@localhost ~]# enable cd
[root@localhost ~]# cd ..
[root@localhost /]#
外部命令
[root@localhost ~]# type find
find 是 /usr/bin/find ---- 外部命令显示路径
[root@localhost ~]# type ls
ls 是 `ls --color=auto' 的别名 ---- 别名属于外部命令
[root@localhost ~]# type -a ls ---- -a显示全部信息
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@localhost ~]# type -a cd
cd 是 shell 内嵌
cd 是 /usr/bin/cd
#cd既在内部,也在外部,优先使用内部cd
[root@localhost ~]# whereis ls ---- 查找命令的具体位置
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# echo $PATH ---- 外部命令存在于$PATH中
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# type head
head 已被哈希 (/usr/bin/head)
[root@localhost ~]# hash
命中 命令
1 /usr/bin/tail
1 /usr/bin/pstree
10 /usr/bin/head
4 /usr/bin/cat
1 /usr/bin/whereis
4 /usr/bin/man
#外部命令被使用过后会存在哈希表中在内存(缓存,但是会占用内存,临时性的)加快读取速度
#hash可以查看哈希表
清除哈希表
[root@localhost ~]#hash -d tail ---- 清除tail命令缓存
[root@localhost ~]#hash -r ---- -r全清
[root@localhost ~]#hash
hash: 哈希表为空
#清除所有缓存