认识与学习BASH①——鸟叔的Linux私房菜
文章目录
认识与学习BASH①
认识BASH
壳程序
BASH是一个壳程序,在用户与核心(kernel)之间建立沟通,从而使合适的用户调用操作系统的各项功能。壳程序的功能只是提供操作系统的一个接口,例如通过壳程序bash来调用许多指令:man,chmod,chown,vi,fdisk,mkfs等等,这些指令都是独立应用程序,但是我们可以通过壳程序(就是命令行界面)来操作这些应用程序,让这些应用程序调用核心来运行所需的工作。这就是壳程序。
只要能够操作应用程序的接口这样的程序,都能称之为壳程序。狭义上指命令行方面的软件(包括BASH等),广义上的壳程序包括图形接口的软件。
多种shells
在Linux中有多种shells,存放在/bin目录下,不过Linux默认使用BASH。
- /bin/sh (已经被/bin/bash所取代)
- /bin/bash (Linux默认的shell)
- /bin/tcsh (整合C Shell,提供更多的功能)
- /bin/csh (已经被/bin/tcsh所取代)
系统合法的shell就会被写入/etc/shells这个文件中,某些程序会检查这个文件。也可以在/etc/passwd这个文件内查看每个用户登陆时的默认shell是什么。
Bash shell 的功能
BASH相容于sh,并根据使用者的需求进行了加强,bash主要有以下优点:
历史记忆功能(history)
可以使用键盘的上下键找到前后执行的命令,并可以进行修改,默认记忆的数目可以达到1000之多。这些命令记录都暂时保存在当前内存中,当成功登出系统后,这次的历史记录会被保存到
~/.bash_history中。小心黑客入侵查看!命令与文件补全功能(使用Tab键):
直接在命令或者文件名后面按【tab】键之后,就可以进行命令或文件补齐。安装 bash-completion软件之后,还可以有“选项/参数”的补齐功能。
不过,要想知道环境中的所有以 c 开头的指令,直接输入c之后按两次【tab】键就好了。在bash shell 下面,多按【tab】是一个不错的习惯。
命令别名设置功能(alias):
可以把
ls -lha这个指令替换成lall这个自定义的命令。直接在命令行中输入 alias就可以只扫目前的命令别名有哪些!可以这样设置:alia lm='ls -lha'。工作控制,前景背景控制(job control, foreground, background):
使用前、背景的控制可以让工作进行的更为春丽!工作控制(jobs)用途更广,可以把工作丢到背景中去执行,可以在单一登录的环境中达到多任务的目的。
程序化脚本(shell scripts):
类似于dos的批处理文件。
万用字符(Wildcard):
例如:查询/usr/bin下面有多少以X为开头的文件,使用
ls -l /usr/bin/X*就能知道。
type :查询指令是否为Bash shell 的内置指令
type [-tpa] name 不加任何参数时,type会显示出name时外部指令还是bash的内部指令。相关选项:
- -t :type会显示以下信息:
- file 表示为外部指令;
- alias 表示该指令为命令别名所设置的名称;
- builtin 表示该指令为bash内置的指令功能。
- -p :如果后面接的name为外部指令时,才会显示完整文件名;
- -a :会由PATH变量定义的路径中,将所有含name的指令都列出来,包含alias
指令的换行输入和快速删除
如果指令太长的话,可以使用 反斜杠+回车 来换行继续输入。\是跳脱符,可以跳脱下一个按键,以此为原理。
关于快速删除指令和移动光标:
[ctrl+u] / [ctrl_k]
分别是从光标处向前【ctrl+u】,向后【ctrl+k】删除;
[ctrl+a] / [ctrl+e]
分别是让光标移动到开头和结尾。
Shell的变量功能
什么是变量
变量就是以一组文字或符号等,来取代一些所设置或者是一串保留的数据。
echo,unset,变量设置规则
查看变量内容
直接使用echo ${PATH}或echo $PATH就能够查看变量的内容。
设置变量
使用`name=content(内容)就可以创建一个名为name的变量,并赋以内容。
变量设置规则
- 变量与内容之间用
=号连接; - 等号两边不能直接接空白字符;
- 变量名称只能是英文字母与数字,开头不能是数字;
- 若内容中有空白字符,可以使用双引号或带引号:
- 双引号内的特殊字符保持原有的特性,如:
var="lang is $LANG",则echo $var可以得到"lang is zh_CN_UTF-8" - 单引号内的特殊字符仅为一般字符(纯文本)
- 双引号内的特殊字符保持原有的特性,如:
- 可使用跳脱字符
\将特殊符号(如回车,$,空白字符,‘等)变成一般字符。 - 扩增变量内容时,可使用
"$name"或${name}累加,例如:PATH="$PATH":/home/bin或PATH${PATH}:/home/bin。 - 系统默认变量一般为大写字符,自行设置的变量为小写字符(习惯)。
- 取消变量的方法为使用
unset,例如:unset name
export name可以将变量变成环境变量,这样就可以在bash子程序下应用了。父程序的自定义变量时是无法在子程序内使用的。
可使用uname -r获取当前系统的核心版本。
环境变量的功能
set
可以使用set观察所有的变量(含环境变量与自定义变量),参数说明:
PS1 提示字符的设置
- \d :可显示出“星期 月 日”的日期格式;
- \H :完整的主机名称。
- \h :仅取主机名称在第一个小数点之前的名字;
- \t :显示时间,为 24 小时格式的“HH:MM:SS”
- \T :显示时间,为 12 小时格式的“HH:MM:SS”
- \A :显示时间,为 24 小时格式的“HH:MM”
- @ :显示时间,为 12 小时格式的“am/pm”样式
- \u :目前使用者的帐号名称,如“dmtsai”;
- \v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
- \w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
- \W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
- #:下达的第几个指令。
- $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~
例如我这样设置:PS1='[\u@\h:\w \t#\#]\$,就可以显示时间和已经命令的次数。
其实,$ 就是 关于本shell的PID,可以这样查看echo $$, ?号(关于上一个执行指令的回传值):如果成功执行则返回0,错误则返回非零,例如这样:echo $?。
OSTYPE,HOSTTYPE,MACHTYPE
主机硬件与核心的等级。
export
将自定义变量转换成环境变量。它与env有什么区别呢?区别是:env只是展示环境变量,而set不仅打印环境变量,还展示自定义变量。
子程序仅会继承父程序的环境变量,不会继承父程序的自定义变量。使用以下指令把自定义变量转换成环境变量:export name
locale :影响显示结果的语系变量
直接使用locale -a即可查看系统的所有语系,使用locale即可查看非常具体的设置,这个配置文件在/etc/locale/conf中,而所有的语系文件在/usr/lib/locale中。
如果设置了LANG或者是LC_ALL的话,其他的语系变量就会被这两个变量所取代。
待续。。。真多。。。
认识与学习BASH①——鸟叔的Linux私房菜的更多相关文章
- 学习鸟哥的Linux私房菜笔记(9)——bash1
一.Shell简介 Shell :命令行解释器,是用户与系统沟通时的媒介 在Unix系统中有各种Shell, Linux采用bash为其默认shell 系统可以使用的shell记录在 /etc/she ...
- 学习鸟哥的Linux私房菜笔记(1)——Linux系统入门
今天在阿里云申请了一个centos系统的云服务器,以前对linux了解的只是皮毛,记了几个命令还给忘了,整了半天都弄不好,作为一个做过javaweb开发的coder实在是惭愧啊,决定从今天开始学习Li ...
- [置顶] 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道
一.过滤器 Linux中的应用工具分为三种: 交互工具 过滤器 编辑器 能够接受数据,过滤再输出的工具,称之为过滤器 对过滤器和进程,存在着输入源与输出对象 二.输入.输出.重定向 输入:过滤器的数据 ...
- 学习鸟哥的Linux私房菜笔记(17)——Linux引导流程
一.系统引导流程 第一步:固件fireware(CMOS/BIOS)--POST加点自检(与操作系统无关) 这一步主要是检查硬盘等硬件是否能正常工作 CMOS:是固化在主板上,详细:http://sc ...
- 学习鸟哥的Linux私房菜笔记(16)——Ubuntu中建立ftp服务
1.安装vsftpd,如下图所示:sudo apt-get install vsftpd 2.查看本机是否可以连接ftp 如上图所示,发现login failed了,怎么办呢?我们来看看vsftpd的 ...
- 学习鸟哥的Linux私房菜笔记(15)——文件系统
一.文件结构 为了能在设备上存储与读取文件,我们需要在分区上创立文件系统 文件系统记录目录与文件我们称之为文件结构 每一个文件系统在Linux里都被解释成由一个根目录为起点的目录结构 Linux将各个 ...
- 学习鸟哥的Linux私房菜笔记(14)——硬件配置与管理
一.设备文件 Linux沿袭了Unix的风格,将所有设备看成一个文件 设备文件分为两种: 块设备文件(b):比如硬盘.光驱 字符设备文件(c):比如串口.键盘 设备文件一般存放在/dev目录下 二.常 ...
- 学习鸟哥的Linux私房菜笔记(13)——用户管理
一.检查用户身份 用户可以使用下列指令了解用户身份 who :查询当前在线的用户 groups :查询用户所属组 id :显示当前用户信息 finger :查询用户信息 二.添加用户 用指令添加命令 ...
- 学习鸟哥的Linux私房菜笔记(10)——bash2
七.命令行表达式 命令行输出--" " 将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义. 双引号不能将 \ $ ` ! 符号的特殊功能禁止 命令行输出--' ...
随机推荐
- Python Ethical Hacking - Persistence(1)
PRESISTENCE Persistence programs start when the system starts. Backdoors -> maintain our access. ...
- express中是如何处理IP的?
express获取client_ip req.ip // 获取客户端ip req.ips // 获取请求经过的客户端与代理服务器的Ip列表 查看源码 定义获取ip的入口, // 源码 request. ...
- 一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~
前言 公司有一个 Web 管理系统,使用 Tomcat 进行部署.由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作. 起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部 ...
- Atlassian Confluence 5.1.2 破解版部署
Atlassian Confluence(简称Confluence)是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享.Confluence 不是一个开源软件 ...
- MySQL数据管理
3.MySQL数据管理 3.1外键 方式一: create table `grade`( `gradeid` int(10) not null auto_increment comment '年纪 ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
- python爬虫获取localStorage中的数据(获取token)
# 此为获取东航登录时的token(经分析js得出此token存储于localstorage中) browser = webdriver.Chrome(executable_path='xxxx')b ...
- form表单两种提交方式的不同
我们在使用<Form>表单的时候,最常用的提交方式就是Get和Post.我们都知道这两种方式最大的差别就是安全性,除此之外,它们还有哪些其他的区别,你知道吗? 在<Form& ...
- Javascript 组成:ECMAscript、Dom、Bom
一.核心(ECMAScript) ECMAScript 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言. 二.浏览器对象模型(BOM)——对应window对象 window:窗口 w ...
- 用友U8API 8.9-15.0接口开发前提,选好开发方式
在用友接口开发这条路上,走走停停过了好几年.对于如何选择哪种方式,目前总结几点, 对于开发,目前可以实现的有三种方式 一.是通过用友官方提供的(EAI/API)接口 这种方式的优点 ...