linux shell manual,了解bash shell及其基本使用

一、linux命令解释器

linux中命令的执行依赖于shell解释器,shell是用户与操作系统之间的接口,它解释用户输入的命令并将其送入内核。常见的shell有bash(linux系统默认shell),csh,ksh等。shell也是一种特殊的程序,例如bash,其二进制程序文件为/bin/bash

1、查看当前使用的shell类型:echo $SHELL

2、改变用户登录时使用的shell,可使用chsh命令:

用法:chsh [选项] [参数]

常用选项:

-s:指定用户登录的shell(需为完整路径名,如/bin/csh)

-l:列出当前系统可用的shell

例如:chsh -s /bin/csh

二、linux命令类型

根据linux命令与shell的关系,可将命令分为两类:

1、内置命令:是shell内置的一些特殊指令,没有单独的对应的系统文件,随着解释器被自动载入内存,直接供用户使用

2、外部命令:本身是一个独立的可执行文件,命令名即为程序文件名

要查看命令的类型,可使用type命令:(内置命令会显示为builtin,外部命令会显示其绝对路径)

用法:type [option]... command

常用选项:

-a:显示该命令所有可能的信息,包括alias

-p:后面接的命令与外部命令时,才会显示完整路径

-t:输出“file”、“alias”或者“builtin”,分别表示给定的命令为“外部指令”、“命令别名”或者“内部指令”[root@localhost ~]# type cd

cd is a shell builtin

[root@localhost ~]# type -a ls

ls is aliased to `ls --color=auto'

ls is /bin/ls

三、bash变量

变量实质上是有名称的内存空间

1、bash变量的类别:

1)本地变量:只对当前shell进程有效,对其它shell进程(包括当前shell进程的子进程)无效

2)环境变量:对当前shell及其子进程有效,对其它shell进程无效,通常是shell内置的一些变量(如PATH,HISTSIZE,LANG,RANDOM,SHELL等)及通过export命令导出的变量,要查看当前shell进程的所有环境变量,可直接使用export,env,printenv命令

3)局部变量:对shell脚本中某代码片断有效,通常用于函数本地,local VAR_NAME=VALUE

4)只读变量:readonlyvar_name

5)位置变量:如$1(第一个参数),$2...

6)特殊变量:

$?:上条命令的状态返回值,主要用于判断程序或脚本是否执行成功,0表示成功,1-255表示失败

$#:参数的个数

$*:参数列表

$0:命令或脚本本身

$$:脚本所有进程ID

$@ 和 $*都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数

2、变量类型:

分为字符型(默认)和数值型,变量类型决定了变量的存储机制、存储空间、参与的运算方式

3、除了shell内置的环境变量,我们也可自定义变量,直接用ValriablName=VALUE(注意:与其它编程语言不同,shell中变量赋值时,等号两边不能有空格)的方式即可,如pretty=beauty

4、查看所有变量(包括环境变量和自定义变量):set

另外,set命令可设置bash的某些特性:

set -C:指定不覆盖已存在的文件   set +C:指定可覆盖已存在的文件

5、要获取某个变量的值,可使用echo $变量名,如echo $PATH

6、取消变量的值:unset 变量名,如unset pretty

7、变量设定的几个重要规则:

1)变量名只能是英文和数字和下划线,且不能使用程序中的关键字,不能以数字开头,如2mouse=bro 错误。应尽量做到见名知义

2)变量名中若包含空格,需要使用引号(或转义字符/),但单双引号的功能是有区别的:

双引号:弱引用,双引号内若包含变量,会被替换,如echo "I love my $HOME"会显示为I love my /home/tesla

单引号:强引用,引号中的内容会直接显示,echo "I love my $HOME"会显示为I love my $HOME

3)使用转义字符\将特殊字符(如空格、ENTER、$、'等)变成一般字符

如name=bluce\ lee  echo $name结果为bluce lee

4)扩增变量内容

变量名="$变量名"新增内容,例如PATH="$PATH":/usr/loca/mysql/bin

5)使用export命令将自定义变量(包括被修改的原环境变量)转为环境变量

export 变量名,如export LANG=en(表示使用英文编码,通常用于临时解决乱码问题)

8、PATH环境变量

当我们执行外部命令时,系统是透过shell内置的PATH环境变量所定义的路径中从左往右依次寻找的,这就是为何我们很多时候只需输入命令名而非其绝对路径的原因,而且我们可以自由地将某个命令的路径添加进PATH变量中,由此给工作带来了很大便利

更改PATH环境变量的方法:

1)直接使用export命令,如export PATH="$PATH:/usr/loca/mysql/bin",该设置会在终端断开后失效,若要持久有效,需修改/etc/profile

2)编辑/etc/profile文件或/etc/profile.d/*.sh,在文档最后添加export PATH="$PATH:新增内容",保存退出,然后重新读取该文件(. file或source file),该设置对全局有效

9、设置命令提示符

bash命令提示符即命令行窗口起头的那一段,如[root@localhost ~]#,是透过shell内置的变量PS1显示的。PS1可用到的一些符号意义说明:

\u:当前用户的名称

\d:可显示出“星期 月 日”的日期格式

\H:完整的主机名称,如web.diaozt.com

\h:仅取主机名称的第一小段,如web

\t:显示精确到秒的24小时格式的时间,如15:20:10

\T:显示精确到秒 的12小时格式的时间,如09:20:10

\@:显示时间,为12小时格式的AM/PM样式,如06:22 AM

\w:完整的工作目录名,家目录为以~取代,如 /home/tesla/test

\W:路径的基名,即以basename命令取得的名称,如test

\$:提示字符,root用户初始时为#,其它为$[root@localhost test]# echo $PS1

[\u@\h \W]\$

[root@localhost test]# export PS1="[\u@\H \@ \w]\$ "

[root@localhost.localdomain 06:45 AM /home/tesla/test]$

10、通过键盘读取变量的值

使用read命令可从键盘读取变量的值,可同时读取多个变量的值,输入时以空格隔开,该命令常用于bash脚本中

用法:read [option]... variable...

选项:

-p:指定读取值时的提示符

-t:指定读取值时的等待时间

例 read -p "Please input two words:" -t 5 a1 a2

四、命令历史

history命令用来显示命令历史

用法:

直接使用该命令显示所有历史命令

history N:显示最近N条命令(包括当前history命令自身)

history -d 命令编号 :删除指定命令条目

history -a [/path/to/some_history_file]:将当前会话的命令历史写入指定文件

与命令历史相关的几个环境变量:

history -c:清空命令历史

HISTFILE:用户退出时命令历史的持久保存位置,默认为~/.bash_history

HISTFILESIZE:命令历史文件所能记录的最大条目数

HISTSIZE:history所能显示的命令历史的最大条目数

在我们登出bash时,我们下达过的命令的历史默认为会被保存至用户家目录的~/.bash_history文件中,每次登录bash时,系统会自动读取该文件,这就是为何使用history命令还能看到以前bash进程中命令历史的原因。那么~/.bash_history会记录多少条历史条目呢?这个数据保存于环境变量HISTFILESIZE中,默认为1000。当命令历史条目超过该数值时,旧的记录会被冲掉。区别于HISTFILESIZE,HISTSIZE变量保存的是history的条目数

使用命令历史可简化命令的操作:

!N:执行命令历史中的第N条命令

!!:执行上一个命令

!string:执行命令历史中最近一次以string开头的命令

!$(加在命令command后):调用上一个命令的最后一个参数

command后按ESC松开然后按【.】:功能同!$[root@localhost tesla]# ls /home/tesla

inittab  iron  test

[root@localhost tesla]# ls !$

ls /home/tesla

inittab  iron  test

[root@localhost tesla]# !!

ls /home/tesla

inittab  iron  test

[root@localhost tesla]# date

Tue Aug 11 13:05:30 CST 2015

[root@localhost tesla]# !d

date

Tue Aug 11 13:05:34 CST 2015

[root@localhost tesla]#

五、命令别名

有时要输入一长串的命令比较麻烦,可使用alias命令指定其为一个较短的别名

用法:

不带任何参数则直接显示所有已定义的别名

指定别名:aliasname(别名)=value(原命令),如alias rm='rm -i',alias ls='ls --color=auto'

若别名与原命令相同,而想执行原命令,可使用绝对路径或\command

撤消指定别名:unalias name

撤消所有别名:unalias -a

注意:命令行中定义的别名,其生效范围为当前会话,若要定义的别名持久有效,可将其写入/etc/bashrc(或~./bashrc)文件。例如echo "alias dt=date" >> /etc/bashrc[root@localhost tesla]# alias

alias cp='cp -i'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@localhost tesla]# date

Tue Aug 11 13:00:47 CST 2015

[root@localhost tesla]# alias dt=date

[root@localhost tesla]# dt

Tue Aug 11 13:01:04 CST 2015

[root@localhost tesla]# unalias dt

[root@localhost tesla]# dt

-bash: dt: command not found

[root@localhost tesla]

六、如何获取命令帮助?内部命令:command help

外部命令:

1、command--help

2、手册manual(简写为man):man [章节] COMMAND,例如man ifconfig

①手册有章节之分(1-9),一个命令可能存在于多个章节中,可使用whatisCOMMAND查看一个命令执行什么功能及其手册存在于哪些章节中。whatis命令相当于man -f

②帮助中的格式字串:[ ]表示可省略    < >表示不可省略    |表示二选一或多选一   ……表示同类内容可以出现多个

③在man中翻屏:

空格键:向文件尾部翻一屏,b:向文件首部翻一屏,回车键:向文件尾部翻一行,k:向文件首部翻一行,ctrl+d:向文件尾部翻半屏,ctrl+u:向文件首部翻半屏

④在man中也可搜索字串,方法同vim中字串搜索

⑤man能够为除命令之外的配置文件、系统调用、库调用等提供帮助手册,它们分别位于不同的章节中   1:用户命令  2:系统调用  3:库调用  4:设备文件  5:配置文件  6:游戏  7:杂项  8:管理命令

3、info命令:获取在线文档,仅在man手册无法获取到足够信息,或想了解程序的开发历史时才使用

七、命令的搜索顺序

1、以绝对/相对路径执行命令

2、由alias找到该命令来执行

3、作为bash内置命令来执行

4、通过PATH环境变量搜索到的第一个命令执行

例如,ls的别名与其自身名称相同,由于alias优先于搜索PATH,所以我们使用ls实际是执行其别名命令,即ls --color=auto,若要执行原命令,则使用绝对路径/bin/ls

八、bash快捷键:

ctrl+a:跳至行首(或home键)  ctrl+e:跳至行尾(或end键)

ctrl+u:删除命令行首至当前光标处的所有内容

ctrl+k:删除当前光标处至命令行尾的所有内容

ctrl+l:清屏(或clear)

ctrl+c:中止或取消

ctrl+z:将当前命令送至后台执行

九、bash重要特性之命令(或路径)补全

如果用户指定的开头字符串能惟一标识某命令(或路径),则按tab键能补全该命令,否则,再次tab键可显示所有以指定字符开头的命令

十、shell特殊符

单引号' '(硬引用)、双引号" "(软引用)和转义符【\】,这三种字符前面已作说明,此处不再赘述

十一、shell登录类型

交互式(login shell):

1)直接通过终端输入帐号和密码登录的

2)使用su -l username 或 su - username登录的

非交互式(non-login shell):

1)su username

2)图形界面下打开的终端

3)执行脚本

十二、bash配置文件分为两类:

profile类:为交互式登录的用户提供配置

全局:/etc/profile,/etc/profile.d/*.sh

用户:~/.bash_profile

功用:1、设定环境变量  2、运行命令或脚本

bashrc类:为非交互式的用户提供配置

全局:/etc/bashrc

用户:~/.bashrc

功用:1、设定本地变量   2、定义命令别名/etc/profile文件说明:

每个交互式登录用户在取得bash时都会读取该文件,该配置文件根据用户的UID来设定很多变量的值,如PATH,MAIL,MAIL,HOSTNAME,USER以及umask值通过编辑配置文件修改的配置如何生效?

1、退出并重新登录   2、让bash重读此配置文件( . file或source file)bash配置文件的读取顺序:

①交互式登录用户:/etc/profile→/etc/profile.d/*.sh→~/.bash_profile→~/.bashrc→/etc/bashrc

交互式登录用户读取的配置文件其实只有/etc/profile,但此文件会呼叫其它配置文件

②非交互式登录用户:~/.bashrc→/etc/bashrc→/etc/profile.d/*.sh

十三、几个重要命令

1、exec:用于调用并执行指定的命令。

我们知道,在bash shell进程中执行命令即开启了一个子进程,该子进程终止后又回到父进程;而exec会启动command为一个进程,此进程会取代当前shell进程,指定的命令结束后会立即退出终端

用法:exec COMMAND[root@node2 ~]# su - tesla

[tesla@node2 ~]$ exec mail   #查看邮箱后自动退出当前shell进程

No mail for tesla

[root@node2 ~]# exec echo "See you later"

See you later

Connection closed by foreign host.

Disconnected from remote host(192.168.30.20:22) at 20:13:27.

Type `help' to learn how to use Xshell prompt.

[c:\~]$

2、screen

想象一种场景,当我们远程登录linux,运行一些程序(如下载),如果这些程序需要运行很长时间,而程序运行过程中出现网络故障导致连接中断,则远程服务器上没有正常结束的命令将被迫中止。而scree工具就能很好地避免这种问题

screen:用户可以通过该工具同时连接多个本地或远程的的命令行会话,并在其间自由切换

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存,用户可以通过快捷键在不同的窗口下切换。只要Screen本身没有终止,在其内部运行的会话都可以恢复

用法:

screen:启动新屏幕,默认是attached模式,即建好之后就连上去

screen -S NAME:启动一个带名称的新屏幕

screen -dm [NAME]:以detached模式启动一个新屏幕,也即建好之后不会连上去

screen -ls:查看所有被隐藏的屏幕ID

exit:退出新屏幕(关闭)

Ctrl+a,d(detach):拆除新屏幕(临时隐藏)

screen -r SID:恢复某隐藏的屏幕;若屏幕只有一个,SID可省略

screen -d -r SID:拆除当前屏幕并恢复到指定屏幕

Ctrl+a,n(next):下一个屏幕

Ctrl+a,p(previous):上一个屏幕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值