认识与学习shell
linux的终端机执行命令的方式,是通过bash环境来处理的。bash包括变量的设置与使用,、bash操作环境的构建、数据流重定向的功能。下面的知识,对主机的维护与管理有重要的帮助。
管理整个计算机硬件的其实是操作系统的内核,这个内核被保护,一般用户只能通过shell来和内核通信(shell将输入的命令与内核通信,内核可以控制硬件来正确无误地工作)。man、chmod、chown、vi、mkfs等命令,都是独立的应用程序,我们可以通过shell(即命令行模式)来操作这些应用程序,让这些应用程序调用内核来运行所需的工作。
bash shell 的内置命令:type
type命令找出可执行文件,而不是一般文件名。
floralin@ubuntu:~/Desktop/linux_study$ type ls # 未加任何参数的时候,列出ls的最主要使用情况
ls is aliased to `ls --color=auto'
floralin@ubuntu:~/Desktop/linux_study$ type -t ls # 添加参数-t列出ls执行时的依据
alias
floralin@ubuntu:~/Desktop/linux_study$ type -a ls # 添加参数-a会从PATH变量定义中,将所有含有 ls 的命令都列出来,包含alias
ls is aliased to `ls --color=auto'
ls is /bin/ls
floralin@ubuntu:~/Desktop/linux_study$ type cd
cd is a shell builtin # cd是shell内置命令
命令的执行
很多时候输入命令过长,会在换行之前加入\,这样做的目的是为了将换行符[enter]转移过来。成功转移过后,下一行最前面就会出现>的符号,可以继续输入命令。
shell 变量功能
变量就是用一个特定字符串代表不固定的内容。在linux中要将变量的内容显示出来,可以使用echo这个命令来显示变量,但是变量在被显示时,必须加上$.
floralin@ubuntu:~/Desktop/linux_study$ echo $variable floralin@ubuntu:~/Desktop/linux_study$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
设置变量
floralin@ubuntu:~/Desktop/linux_study$ echo $myname floralin@ubuntu:~/Desktop/linux_study$ myname=flora
floralin@ubuntu:~/Desktop/linux_study$ echo $myname
flora
保留原先变量,然后进行设置
floralin@ubuntu:~/Desktop/linux_study$ myname="$myname lin"
floralin@ubuntu:~/Desktop/linux_study$ echo $myname
flora lin
在执行过程中,反单引号(`),之内的命令会被先执行,而执行出来的结果将作为外部的输入信息。locate命令可以列出所有的相关文件名,但是如果我们想知道每个crontab相关文件名的权限:
floralin@ubuntu:~/Desktop/linux_study$ ls -l `locate crontab`
-rw-r--r-- root root Feb /etc/anacrontab
-rw-r--r-- root root Feb /etc/crontab
-rwxr-sr-x root crontab Feb /usr/bin/crontab
-rw-r--r-- root root Apr /usr/share/bash-completion/completions/crontab
-rw-r--r-- root root Feb /usr/share/doc/cron/examples/crontab2english.pl
-rw-r--r-- root root Feb /usr/share/man/man1/crontab..gz
-rw-r--r-- root root Feb /usr/share/man/man5/anacrontab..gz
-rw-r--r-- root root Feb /usr/share/man/man5/crontab..gz
先以locate将文件名数据列出来,然后使用ls命令来处理。
环境变量的功能
环境变量能够帮我们达到很多功能,包括主文件夹的变换,提示符的显示,执行文件查找的路径等。
查看默认的环境变量:
floralin@ubuntu:~/Desktop/linux_study$ env
#......
_=/usr/bin/env # 上一次使用的命令的最后一个参数(或命令本身)
随机数
RANDOM变量的内容介于0~32767之间,所以要进行数值计算才能获取一个一位数。
floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*/;echo $number floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*/;echo $number floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*/;echo $number
set查看所有变量(含环境变量与自定义变量)
bash不只有环境变量,还有一些比较重要的参数,以及用户自己定义的变量。
floralin@ubuntu:~/Desktop/linux_study$ set
PS1命令提示符
每当我们按下回车键去执行某个命令后,最后要再次出现提示符,会去主动读取这个变量值。
floralin@ubuntu:~/Desktop/linux_study$ cd /home
floralin@ubuntu:/home$ PS1='[\u@\h \w \A #\#]\$'
[floralin@ubuntu /home : #]$ls
floralin
[floralin@ubuntu /home : #]$
\w 代表完整的工作目录名称,由更目录写起来的目录名称。但是主文件夹将会用~替代。
\A 显示时间,二十四小时格式“HH:MM”。
\# 执行第几个命令。
\$ 提示符,如果是root时,提示符为#,否则为$。
变量键盘读取、数组与声明:read、array、declare
read读取来自键盘输入的变量
[floralin@ubuntu /home : #]$read atest
This is a test
[floralin@ubuntu /home : #]$read -p "Please keyin your name: " -t named
Please keyin your name: floralin
[floralin@ubuntu /home : #]$echo $named
floralin
30秒没有任何操作时,该命令会自动略过。
declare或typeset,声明变量的类型
如果使用declare后面没有接任何参数,bash就会主动将变量名称数出来。
[floralin@ubuntu /home : #]$sum=++
[floralin@ubuntu /home : #]$declare -i sum=++
[floralin@ubuntu /home : #]$echo $sum
变量类型默认为字符串,所以不能制定变量类型,则1+2为一个字符串而不是计算式,因此执行第一条命令会直接输出100+300+50.。
将sum变成环境变量:
[floralin@ubuntu /home : #]$declare -x sum
[floralin@ubuntu /home : #]$export | grep sum
declare -x sum
将sum变成只读属性,不可修改:
[floralin@ubuntu /home : #]$declare -r sum
[floralin@ubuntu /home : #]$sum=testgting
bash: sum: readonly variable
让sum变成非环境变量的自定义变量:
[floralin@ubuntu /home : #]$declare +x sum
[floralin@ubuntu /home : #]$declare -p sum
declare -ir sum=""
数组变量类型
[floralin@ubuntu /home : #]$var[]="small min"
[floralin@ubuntu /home : #]$var[]="big min"
[floralin@ubuntu /home : #]$var[]="nice min"
[floralin@ubuntu /home : #]$echo "${var[1]},${var[2]},${var[3]}"
small min,big min,nice min
与文件系统及程序的限制关系ulimit
列出你目前身份的所有限制数据数值:
[floralin@ubuntu /home : #]$ulimit -a
限制用户仅能建立10MB一下的容量文件:
[floralin@ubuntu /home : #]$ulimit -f
[floralin@ubuntu /home : #]$ulimit -a
尝试创建20M的文件:
[floralin@ubuntu ~/Desktop/linux_study : #]$sudo dd if=~/Desktop/linux_study/ of= bs=1M count=20
[floralin@ubuntu ~/Desktop/linux_study 09:41 #82]$ll
total 8
drwxrwxr-x 2 floralin floralin 4096 Oct 30 09:41 ./
drwxr-xr-x 3 floralin floralin 4096 Oct 30 07:43 ../
-rw-r--r-- 1 root root 0 Oct 30 09:41 123
变量内容的删除、替换与替代
变量内容的删除与替换
将local这两个目录删除掉:
[floralin@ubuntu ~/Desktop/linux_study : #]$echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
[floralin@ubuntu ~/Desktop/linux_study 09:49 #89]$echo ${path#/*local/bin:}
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
将sbin替换为SBIN:
floralin@ubuntu ~/Desktop/linux_study : #]$echo ${path/sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
[floralin@ubuntu ~/Desktop/linux_study : #]$echo ${path//sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games
变量的测试与内容替换:
[floralin@ubuntu ~/Desktop/linux_study : #]$echo $username
# username可能不存在或者为空字符串
[floralin@ubuntu ~/Desktop/linux_study : #]$username=${username-root}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo $username
root # 没有设置,所以主动给予名为root的内容
[floralin@ubuntu ~/Desktop/linux_study : #]$username="floralin"
[floralin@ubuntu ~/Desktop/linux_study : #]$username=${username-root}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo $username
floralin
username-root 就得变量,被测试的选项 ; username-root 变量的内容,在本范例中,这个部分是在给予未设置变量的内容。当然 username:-root则是在变量内容为空或者是未设置,都能够以后面的内容替换。
如果旧变量不存在,我们就以新变量内容替换;但是若旧变量存在,则新变量内容以旧变量替换。
[floralin@ubuntu ~/Desktop/linux_study : #]$unset str; var=${str-newvar}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo var="$var",str="$str"
var=newvar,str= # 因为str不存在,所以var为newvar
[floralin@ubuntu ~/Desktop/linux_study : #]$str="oldvar";var=${str-newvar}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo var="$var",str="$str"
var=oldvar,str=oldvar # 因为str存在,所以var等于str的内容
关于减号是不会影响旧变量的,如果想要旧变量内容也一起替换掉的话,就需要使用等号=:
[floralin@ubuntu ~/Desktop/linux_study : #]$unset str; var=${str=newvar}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo var="$var",str="$str"
var=newvar,str=newvar
[floralin@ubuntu ~/Desktop/linux_study : #]$str="oldvar";var=${str=newvar}
[floralin@ubuntu ~/Desktop/linux_study : #]$echo var="$var",str="$str"
var=oldvar,str=oldvar
命令别名和历史命令
命令别名设置alias和unalias
命令别名可以使常用的但是特别长的命令修改成比较简洁的命令,还有增设默认的选项在一些惯用的命令上面,可以预防一些不小心误删文件的情况发生。例如,查询隐藏文件,并且需要长的列出与一页一页翻看,那么需要执行“ls -l | more”,可以使用以下命令将其简化为lm:
[floralin@ubuntu ~ : #]$alias lm="ls -l | more"
另外,命名别名的设置还可以替代既有的命令,例如,当以root登录,使用rm命令可以删除所有文件,因此要特别小心,rm提供一个参数让我们确认是否删除该文件-i:
[floralin@ubuntu ~ : #]$alias rm="rm -i"
[floralin@ubuntu ~/Desktop/linux_study : #]$rm
rm: remove write-protected regular empty file ‘’? y
去掉刚才的命名别名:
[floralin@ubuntu ~/Desktop/linux_study : #]$unalias rm
历史命令 history
查询曾经执行过的命令,最近4条:
[floralin@ubuntu ~/Desktop/linux_study : #]$history
Bash Shell的操作环境
路径与命令查找顺序
设置echo的别名为echo-n,然后再查看echo执行的顺序:
[floralin@ubuntu ~/Desktop/linux_study : #]$alias echo="echo -n"
[floralin@ubuntu ~/Desktop/linux_study : #]$type -a echo
echo is aliased to `echo -n'
echo is a shell builtin
echo is /bin/echo
bash的登录与欢迎信息:/etc/issue,/etc/motd
终端环境设置:stty.set
如何查阅目前的一些按键内容呢?可以利用stty(setting tty终端机),stty可以帮助设置终端机的输入按钮代表意义。我们可以利用stty-a来列出目前环境中的所有按键列表。
floralin@ubuntu:~$ stty -a
speed baud; rows ; columns ; line = ;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = ; time = ;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
如果想要stty进行相关的字符删除:
floralin@ubuntu:~$ stty erase ^h
除了stty之外,其实我们bash还有自己的一些终端机设置值set。
管道命令pipe
使用bash命令执行输出数据,要经过几道数据之后才能得到我们想要的格式,这就需要使用管道。
管道命使用的是“|”这个界定符号。另外管道命令与“连续执行命令”不同。
查阅/etc/下面有多少文件,可以利用ls/etc来查阅,使用lese管道,可以使得原本很长的目录具备翻页能力:
floralin@ubuntu:~$ ls -al /etc | less
选取命令:cut/grep
cut可以使一段信息切出来,处理的信息是以“行”为单位
截取第五行字符串:
floralinfloralin@ubuntu:~$ echo $PATH | cut -d ':' -f
截取第三和五行:
floralinfloralin@ubuntu:~$ echo $PATH | cut -d ':' -f ,
cut的主要用途是将同一行里面的数据进行分解,最常用使用在分析一些数据或文字数据的时候。这是因为有时候我们会将某些字符串作为切割的参数,然后来将数据加以切割,以取得我们所需要的数据。
grep则是分析一行信息。也就是,grep可以解析一行文字,取得关键字,若该行存在关键字,就会整行列出来。
列出含有“boot”关键字的行:
floralinfloralin@ubuntu:~$ last | grep "boot"
列出不含有“boot”关键字的行:
floralinfloralin@ubuntu:~$ last | grep -v "boot"
加上cut,取得第一列:
floralinfloralin@ubuntu:~$ last | grep "boot" | cut -d " " -f1
取得/etc/man.config 内含MANPATH的那几行:
floralinfloralin@ubuntu:~$ grep --color=auto ‘MANPATH’ /etc/main.config
排序命令:sort、wc、uniq
对/etc/insserv.conf文件进行排序显示:
floralinfloralin@ubuntu:~$ /etc/insserv.conf | sort
对于排序完成的数据,想要将重复的数据仅列出一个显示:
floralinfloralin@ubuntu:~$ last | cut -d ' ' -f1 | sort | uniq
还想知道登录状态:
双向重定向:tee
将数据流整个传送给文件或设备。tee会同时将数据流送与文件与屏幕;而输出到屏幕的,其实就是stdout。
将last的输出存一份给last.list文件中:
floralinfloralin@ubuntu:~$ last | tee last.list
将ls的数据存一份到 ~/homefike | more:
floralinfloralin@ubuntu:~$ ls -l /home | tee ~/homefile | more
tee后面的文件会被覆盖,若加上-a这个参数,则能将信息累加:
floralinfloralin@ubuntu:~$ ls -l /home | tee -a ~/homefile | more
字符串转换命令:tr、col、join、paste、expand
tr可以用来删除一段信息当中的文字,或者是进行文字信息的替换。
col可以进行简单处理,经常被用于man page转存为纯文本文件以方便查阅的功能。
join看字面上的意义,是处理两个文件之间的数据。要将两个文件当中相同数据的那一行加起来。
paste将两行贴在一起,中间一tab键隔开。
expand将tab按键转成空格键。
认识与学习shell的更多相关文章
- 学习 shell脚本之前的基础知识
转载自:http://www.92csz.com/study/linux/12.htm 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- 学习Shell脚本编程(第2期)_编写修改权限及执行Shell程序的步骤
编写Shell程序 执行Shell程序 Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样复杂.Shell程序是指放在一个文件中的一系列Linux命令和实用程序.在执行的时 ...
- 第十三章、学习 Shell Scripts
什么是 Shell scripts shell script (程序化脚本) :shell script 是针对 shell 所写的『脚本!』 shell script 是利用 shell 的功能所写 ...
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
- 鸟哥的Linux私房菜——第十六章:学习Shell Scripts
视频链接:http://www.bilibili.com/video/av10565321/ 1. 什么是 Shell Script (shell写的脚本)1.1 干嘛学习 shell s ...
- 学习shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
- (转)跟着老男孩一步步学习Shell高级编程实战
原文:http://oldboy.blog.51cto.com/2561410/1264627/ 跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)
第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
随机推荐
- 源代码安装grub-customizer
wget https://launchpad.net/grub-customizer/5.0/5.0.6/+download/grub-customizer_5.0.6.tar.gztar zxvf ...
- 一个方便的java分页算法
一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了 package cn.com.base.common.pagination; /** * 分页基类 * * ...
- php 事务处理,ActiveMQ的发送消息,与处理消息
可以通过链式发送->处理->发送...的方式处理类似事务型业务逻辑 比如 发送一个注册消息,消息队列处理完注册以后,紧接着发送一个新手优惠券赠送,赠送完再发一个其它后续逻辑处理的消息等待后 ...
- 2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)
传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1和i2i_2i2,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1),(i2, ...
- 2018.09.25 poj3070 Fibonacci(矩阵快速幂)
传送门 矩阵快速幂板题,写一道来练练手. 这一次在poj做题总算没忘了改万能库. 代码: #include<iostream> #include<cstdio> #define ...
- 2018.09.23 bzoj3143: [Hnoi2013]游走(dp+高斯消元)
传送门 显然只需要求出所有边被经过的期望次数,然后贪心把边权小的边定城大的编号. 所以如何求出所有边被经过的期望次数? 显然这只跟边连接的两个点有关. 于是我们只需要求出两个点被经过的期望次数. 对于 ...
- Docker swarm结合Openresty部署rabbitmq集群
Docker swarm结合Openresty部署rabbitmq集群 大家好,年底了,年味儿越来越浓了.2019年的寒冬被定义为未来10年中最好的一年,对于这一说法悲观的人和乐观的人的理解是不一样的 ...
- UVa 12174 Shuffle (滑动窗口)
题意:你正在使用的音乐播放器有一个所谓的乱序播放功能,即随机打乱歌曲的播放顺序.假设一共有s首歌, 则一开始会给这s首歌随机排序,全部播放完毕后再重新随机排序.继续播放,依次类推.注意,当s首歌播放完 ...
- tomcat自动关闭了。
测试方法: 1.狂点抽取大量数据的接口 结果: jvm里面的现成崩溃.导致tomcat错误. 思路: 最近发现tomcat老是自动关闭,开始也发现了,不过没放在心上,直到今天,请求一提交到服务器,to ...
- 笔记:CSS常用中文字体英文名称对照表
* 分类排序:中文名+英文名+Unicode+Unicode 2 Windows平台新细明体 PMingLiU \65B0\7EC6\660E\4F53 新细明体细明体 MingLiU \7EC6\6 ...