《鸟哥的Linux私房菜》学习笔记(2)——Bash特性
一、shell的基本概念:
shell 意思是外壳,它是离用户最近的程序。shell提供用户操作系统的接口,我们通过shell将输入的命令与内核通信,使内核可以控制硬件来正确无误的工作。广义上的shell包含两类GUI和CLI。
GUI:Gnome,KDE,Xface
CLI:sh,csh,ksh,bash,tcsh,zsh(合法的shell要写入/etc/shells这个文件,系统某些服务在运行过程中,可能会去检查用户能够使用的shell)
当用户登陆的时候,系统会分配一个shell来进行工作。默认会取得的shell记录在/etc/passwd文件中,可以看到hao这个用户默认取得的是bash。
[hao@hao ~]$ cat /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
...
hao:x:::haohao:/home/hao:/bin/bash
当有多个用户登陆的时候,会有多个进程,进程之间彼此互不相干,因为对于每个进程来说,它只认为当前主机上只有自己和内核存在。linux允许一个用户账号登陆多次 。
进程是程序的副本,进程是程序执行的实例,是有生命周期的,由内核进行管理。
用户工作环境,多个用户尽管使用的都是shell程序,但是各个用户的工作环境设定却可以各不相同,只不过默认情况下除了管理员,都是一样的。
shell,子shell。可以在一个shell中在启动一个子shell。父shell和子shell都不能意识到彼此正在运行。很多时候对父shell的设定对子shell无效,子shell的设定对父shell也无效。下面的通过pstree命令可以看出该关系,如果退出到上一层bash,可以用exit命令。退到最上一层时候,会退出当前登陆。
[hao@hao ~]$ bash
[hao@hao ~]$ pstree
init-+-NetworkManager-+-dhclient
| `-{NetworkManager}
|-abrtd
|-acpid
...|-sshd---sshd---sshd---bash---bash---pstree
|-trashapplet
...
[hao@hao ~]$ bash
[hao@hao ~]$ pstree
init-+-NetworkManager-+-dhclient
| `-{NetworkManager}
|-abrtd
|-acpid
...|-sshd---sshd---sshd---bash---bash---bash---pstree
|-trashapplet
...
当然,bash下也可以嵌套运行csh,ksh
[hao@hao ~]$ pstree
init-+-NetworkManager-+-dhclient
| `-{NetworkManager}
|-abrtd
|-acpid
|-atd
...
|-sshd---sshd---sshd---bash---pstree
|-udevd---*[udevd]
`-wpa_supplicant
[hao@hao ~]$ csh
[hao@hao ~]$ pstree
init-+-NetworkManager-+-dhclient
| `-{NetworkManager}
|-abrtd
|-acpid
|-atd
...
|-sshd---sshd---sshd---bash---csh---pstree
|-udevd---*[udevd]
`-wpa_supplicant
二、为什么学习shell
- 一法通,万法通。虽然X Window将所有用到的软件都集成在一起,但它并非是一个完整的套件,所以某些时候当升级或者使用其他套件管理模块时,会遇到一些麻烦。
- 远程管理:命令行界面比较快。Linux的管理经常需要远程联机,联机时命令行界面的传输速度比较快,而且较不容易出现断线或者信息外流。
三、shell的特性 :
1、命令历史、命令补全
默认的命令记忆功能可以达到1000(环境变量HISTSIZE保存该数值)个,前一次登陆以前所执行过的命令历史记录在~/.bash_history,而本次登陆所执行的命令都被暂存在临时内存中,当注销后,该命令记忆才会被记录到~/.bash_history当中。
查看命令历史(包含本次执行的history命令):history
-c(clear):清空命令历史
-d offset [n]:删除第offset条命令,history -d 500 10从第五百条命令往后删10条
-w(wriet):将当前缓冲区中历史命令写入到历史文件中去。
n(number):列出最近的n条命令行。
history历史命令的使用技巧:
!n:执行命令历史的第number命令
!-n:执行命令历史记录的倒数第n条命令。
!!:执行上一条命令。
!vi:执行命令历史中最近一个以vi开头的命令。
[hao@hao ~]$ history
ll etc/
...
ls -a
LANG=en
ls -a
ll ~/.bash_history
cat ~/.bash_history
man history
history -w
history
cat ~/.bash_history
history
[hao@hao ~]$ !
ls -a
. .bash_history .cache .gconf .gnote .gvfs .mozilla .recently-used.xbel .xsession-errors.old ?????? ??????
.. .bash_logout .config .gconfd .gnupg .history .nautilus .ssh ?????? ??????
.ICEauthority .bash_profile .dbus .gnome2 .gstreamer-0.10 .imsettings.log .pulse .viminfo ????????? ??????
.abrt .bashrc .esd_auth .gnome2_private .gtk-bookmarks .local .pulse-cookie .xsession-errors ?????? ??????
命令补全:命令补全是在PATH环境变量下搜索命令。tab键自动补全(唯一),连敲两下tab键可以搜索所有已所敲字符为开头的命令。
2、管道、重定向
3、命令别名
root@hao:~# alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias CMDALIAS='COMMAND [options] [arguments]'
root@hao:~# alias cls='clear'
在shell中定义的别名只在当前shell的生命周期中有效,别名的有效范围为当前shell进程,即使相同的用户在另一个shell中。若想让该别名永久有效,只需要将该别名写入shell应用程序的配置文件。
撤销命令别名:unalias CMDALIAS;
如果命令别名与原命令是一个名字,但是命令别名加入了一些选项。若此时想使用原命令,则需要使用\COMMAND。
4、命令替换
把命令中某个子命令替换为其执行结果的过程叫做命令替换,如下面把子命令pwd的执行结果替换为命令echo的执行结果。
格式$(command)或者`command`
hao@hao:~$ pwd
/home/hao
hao@hao:~$ echo "This current /home/hao"
This current /home/hao
hao@hao:~$ cd /etc/sysctl.d/
hao@hao:/etc/sysctl.d$ echo "This current directory is $(pwd)."
This current directory is /etc/sysctl.d.
hao@hao:/etc/sysctl.d$ cd
hao@hao:~$ echo "This current directory is $(pwd)."
This current directory is /home/hao.
在当前目录下(./)创建一个以当前时间命名的txt文件。
hao@hao:~$ touch ./file-$(date +%F-%H-%M-%S).txt
hao@hao:~$ ls
examples.desktop file------.txt ?????? ????????? ?????? ?????? ?????? ?????? ?????? ??????
hao@hao:~$
补充,bash支持的三种引号:
- 单引号'':强引用,不完成变量替换
- 双引号"":弱引用,可以实现变量替换
- 反引号``:命令替换
5、命令行编辑
光标跳转:
ctrl+a跳到行首
ctrl+e跳到行尾
ctrl+u删除光标至命令行首的内容
ctrl+k删除光标至命令行尾的内容
ctrl+->向右跳转一个单词
ctrl+<-向左跳转一个单词
ctrl+l清屏
6、命令行展开
7、文件名通配,globbing
*:任意长度的任意字符。/root/test目录下以a开始的任意文件
root@hao:~/test# tree /root
/root
|-- m
| `-- n
| `-- t
`-- test
|-- a
|-- a123
|-- ab123
|-- abc
|-- x12
|-- xyz
`-- xyz123 directories, files
root@hao:~/test# ls a*
a a123 ab123 abc
?:匹配任意单个字符。文件名第二个字符是y的文件
root@hao:~/test# ls ?y*
xyz xyz123
[]:匹配指定范围内的任意单个字符。以字母开头,数字结尾的文件。还有一些特殊字符,可以使用man 7 glob查看,常用的如下。
- [[:space:]],空白字符
- [[:punct:]],标点符号
- [[:lower:]],小写字符
- [[:upper:]],大写字母
- [[:alpha:]],大小写字母
- [[:diget:]],数字
- [[:alnum:]],字母和数字
,root@hao:~/test# ls [a-zA-Z]*[-]
a123 ab123 x12 xyz123
以字母开头和结尾的文件名中间包含空格的文件
root@hao:~/test# touch 'a b'
root@hao:~/test# ls
a b a123 ab123 abc x12 xyz xyz123
root@hao:~/test# ls [[:alpha:]]*[[:space:]]*[[:alpha:]]
a
[^]:匹配指定范围之外的任意单个字符。以非a开头的所有文件
root@hao:~/test# ls [^a]*
x12 xyz xyz123
8、变量
9、编程
《鸟哥的Linux私房菜》学习笔记(2)——Bash特性的更多相关文章
- 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻
连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...
- 鸟哥的Linux私房菜学习笔记——文件权限与目录配置
Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...
- 鸟哥的Linux私房菜学习笔记(1)
2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...
- 鸟哥的linux私房菜学习记录之bash
当你对计算机输入一个指令时,bash会将指令传送给核心kernel,核心再去调用相关的程序,启动硬件. 如果直接让用户操作操作系统,可能会造成系统的崩溃,所以操作系统通过应用程序来让用户操作系统即壳程 ...
- 【鸟哥的Linux私房菜】笔记1
Linux是什么 从操作系统与cpu架构关系到linux Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...
- 鸟哥的linux私房菜学习-(一)优缺点分析以及主机规划与磁盘分区
一.linux的优缺点 那干嘛要使用Linux做为我们的主机系统呢?这是因为Linux有底下这些优点: 稳定的系统:Linux本来就是基于Unix概念而发展出来的操作系统,因此,Linux具有与Uni ...
- 【鸟哥的Linux私房菜】笔记2
Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...
- 【鸟哥的Linux私房菜】笔记3
正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...
- 《鸟哥的Linux私房菜》笔记——02. 关于Linux
Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...
- 《鸟哥的Linux私房菜》笔记——03. 磁盘分区
Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...
随机推荐
- 一起来学Spring Cloud | 第四章:服务消费者 ( Feign )
上一章节,讲解了SpringCloud如何通过RestTemplate+Ribbon去负载均衡消费服务,本章主要讲述如何通过Feign去消费服务. 一.Feign 简介: Feign是一个便利的res ...
- 好吧,不说闲言碎语,不抱怨,好好工作,好好学习,多总结。记录一下昨天做vuejs的心得
1.做了两个bat文件,一个是直接定位到vuejs项目并且运行,另一个就是打包 run.bat d:cd wwwcd vuecd dtbpmcnpm run devpause build.bat cd ...
- Nmap安全扫描程序
Nmap安全扫描程序 下载地址:https://nmap.org/download.html#windows 参考手册:https://nmap.org/man/zh/index.html#man-d ...
- 前端HTML以及HTML5(基本标签)
前面一章介绍了一下前端的发展,这章简单介绍一下html的发展以及基本的标签. 一.HTML的发展史 1.概念 超文本标记语言(HyperText Markup Language,简称HTML)是为 [ ...
- VC中包含的头文件名不区分大小写
VC中包含的头文件名,不区分大小写如 #include "my.h" = #include "MY.H".
- Setting 之dashboard 点击跳转流程
设置的主界面的可以通过修改xml中的dashboard_categaries.xml 文件实现,在DashboardSummary.java 文件中的rebuildUI()方法中将xml对应的实体类转 ...
- [Eclipse] - 解决"Java was started but returned exit code = 13"问题
最近遇到一个问题,打开Eclipse时会弹出如下对话框 在网上查找了相关资料后结合自己的问题,总结如下. 导致问题的原因: 1. 通常的原因是安装的Eclipse的版本或者Java JDK的版本不匹配 ...
- Git随笔:尝试将本地工程上传至Github上的repository仓库,构建远端与本地协同的Git环境
上传工程至自己的Github公开库,步骤如下: 第1步:建立本地 git 仓库,cd 到你的本地项目根目录下,执行 git init 命令: 第2步:将本地项目工作区的所有文件添加到暂存区.小数点 & ...
- UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
摘要:中途相遇.对比map,快排+二分查找,Hash效率. n是4000的级别,直接O(n^4)肯定超,所以中途相遇法,O(n^2)的时间枚举其中两个的和,O(n^2)的时间枚举其他两个的和的相反数, ...
- python_99_面向对象多态
#多态:一种接口,多种实现.主要作用:实现接口重用 #方法1: class Animal(object): def __init__(self,name): self.name=name class ...