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的更多相关文章

  1. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  2. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  3. 学习Shell脚本编程(第2期)_编写修改权限及执行Shell程序的步骤

    编写Shell程序 执行Shell程序 Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样复杂.Shell程序是指放在一个文件中的一系列Linux命令和实用程序.在执行的时 ...

  4. 第十三章、学习 Shell Scripts

    什么是 Shell scripts shell script (程序化脚本) :shell script 是针对 shell 所写的『脚本!』 shell script 是利用 shell 的功能所写 ...

  5. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  6. 鸟哥的Linux私房菜——第十六章:学习Shell Scripts

    视频链接:http://www.bilibili.com/video/av10565321/ 1. 什么是 Shell Script       (shell写的脚本)1.1 干嘛学习 shell s ...

  7. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  8. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  9. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  10. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

随机推荐

  1. centos 6.5 ftp服务配置及客户端使用

    一.ftp服务简介 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Ap ...

  2. php使用数组语法访问对象

    有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现SPL的ArrayAccess接口来解决. 使用场景:加载配置文件类.larvel框架加载配置文件就这利用数组来操作对象. 数组式访问Obj ...

  3. 这样的UI UX设计师描述你满意吗?

    UI/UX 设计师是我们耳熟能详的名称,但是这些红遍大江南北的设计师到底是什么鬼? 今天小编跟大家好好分享一些关于UI UX 设计师的描述,让大家搞清楚两者的含义和职责.全文主要分成UI设计师描述和U ...

  4. 上海第八中学 shader

    http://shiba.hpe.cn/jiaoyanzu/wuli/soft/xna.aspx?classId=4

  5. DataStage 八、清除日志

    DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 DataStage 三.配置ODBC Da ...

  6. ipad The data couldn’t be read because it isn’t in the correct format

    原来是land left和land right都勾选的,去掉land left后出现这个问题

  7. js中为什么非要alert一下下一步才会执行

    多数原因为界面ajax中动态添加的元素还没被添加上,就执行了js函数(js函数要调用动态元素),解决办法:ajax方法中添加 async:false,同步,作用为,在ajax执行完毕后才执行之后的js ...

  8. 使用reactjs做一个CRUD功能

    第一步:引入reactjs所依赖的js文件,本案例使用的是bootstrap前端框架,所以引入了相应的js和css文件 第二步:body里面添加两个div 第三步:开始编写reactjs脚本 < ...

  9. 2018.09.29 bzoj3166: [Heoi2013]Alo(01trie+双向链表)

    传送门 01trie经典题目. 我们可以通过计算每个数作为次小值时对答案的贡献. 显然对于每个iii需要求出一个包含a[i]a[i]a[i]且的区间[l,r][l,r][l,r]且区间所有值都小于a[ ...

  10. APMServ—优秀的PHP集成环境工具

    经常折腾wordpress和各种php开发的cms,免不了要在本地测试这些程序,所以选择一款好的php集成环境就至关重要啦.之前在月光博客上看到有一篇“常见的WAMP集成环境”介绍,然后先后试用过XA ...