8.1-8.9 预习笔记

1.  shell介绍

创建一个普通用户,默认的shell为/bin/bash/.

  • shell的含义:

首先shell的英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息;

  • shell在Linux中的存在形式

由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面。这样,在Linux系统中,就出现了两种shell表现形式,一种是在无图形界面下的终端运行环境下的shell,另一种是桌面上运行的类似Windows 的MS-DOS运行窗口,前者我们一般习惯性地简称为终端,后者一般直接称为shell

  • shell如何执行用户的指令

shell有两种执行指令的方式,第一种方法是用户事先编写一个sh脚本文件,内含shell脚本,而后使用shell程序执行该脚本,这种方式,我们习惯称为shell编程

第二种形式,则是用户直接在shell界面上执行shell命令,由于shell界面的关系,大家都习惯一行行的书写,很少写出成套的程序来一起执行,所以也称命令行。

2. 命令历史

  • 命令# history可以查看,已写入的命令历史;同时我们也可以用向上的方向键查看命令历史。

这些命令历史存放在用户家目录下/.bash_history,最大可存1000条命令,并由系统内部配置的环境变量HISTSIZE配置,用echo $HISTSIZE查看可以看到数字为1000。有时我们可以发现变量超过1000,是因为命令暂时存在内存中,并未写入/.bash_history中,只有在退出终端时,命令才会被保存到/.bash_history中

  • # history -c,可以清楚内存中的命令历史,但不能清楚/.bash_history配置文件中的命令历史
  • 我们也可以改变上文所提到的环境变量HISTSIZE。

首先编辑配置文件# vi /etc/profile,用/ HISTSIZE,找到相关行,然后把1000数字改为自己想要的数字,例如5000。改好后,需要重新进入终端或使用命令# source /etc/profile来使设置的变量生效,如下图所示

 

  • 跟命令历史相关的还有一个环境变量为HISTTIMEFORMAT,设置这个环境变量可以显示出命令的时间

具体操作如下图所示

若想永久保存HISTTIMEFORMAT设置,可以编辑/etc/profile配置文件,如下图所示,之后再# source /etc/profile即可

 

  • 如果想要永久保存/.bash_history下的命令历史,我们可以用命令# chatter +a /.bash_history,给文件加隐藏权限a权限,那么即使HISTSIZE变量设置为1000,命令历史也只能追加不能删除了。

注:如果没有正常退出终端,那么命令历史便不能完整保存

 

  • # !!,可以显示history中最后一条命令
  • # in(数字),可以执行history中指定条数的命令,例如如下图所示,想要执行命令历史中第761条命令,我们就可以写# !761,就是执行了761条# du -sh amingliux.tar.xz.

 

  • # !word, 可以运行命令历史中以指定word开头的最新的那条命令

3.命令补全和别名

介绍和命令相关的特性

  • 按tab键,可以补全命令或者文件路径

当遇到开头一样,只有一个命令或文件时,则按一次tab键即可

如果开头一样的命令或文件有多个时,则需要按两次tab键

注:与centOS6不同7可以支持补全参数,默认是不支持的需要安装# yum install -y bash-completion,然后重启终端

  • 别名alias,会用于给较长且复杂的命令设置别名,来提高效率

语法# alias 原名='别名'

别名保存在用户家目录下/.bashrc或者配置文件/etc/profile.d/中,且自定义的别名存在/.bashrc下

如果想要撤销别名使用# unalias 别名,即可

 

4. 通配符

  • 通配符

  如下图所示,ls *.txt可以列出当前目录下所有,以.txt结尾的文件,而ls ?.txt, 只能列出txt前字符为一个的文件

*可以放到任意位置

 

因为?只匹配一个字符,所以如上图ls ?.txt则不会列出bb.txt文件

  • 【】

 

 

5.输入输出重定向

0 表示stdin标准输入;

1 表示stdout标准输出;

2 表示stderr标准错误。

 

  • 输出重定向 --- >表示覆盖原文件内容,>>表示追加内容。两个命令都是如果文件不存在则创建文件

例如

# cat 1.txt > 2.txt, 此命令会使1.txt的内容重写到2.txt中,且2.txt中原有的内容不保存

# cat 1.txt >> 2.txt,与> 不同,此命令会吧1.txt的内容追加至2.txt中,且2.txt中原有的文件内容仍在

 

  • 2> & 2>>错误重定向&追加重定向, 可以把错误命令的信息重写或追加到指定的文件中去,如下图所示,不存在命令lsaaa, 显示错误信息,用2> 和2>>就可以把错误信息重写或追加到a.txt.

# lsaaa 2> a.txt; # lsaaa 2>> a.txt

  • &> ; &>>, 可以把正确的输出和错误的输出同时定向到指定文件

如下图所示,ls [12].txt 为正确的输入,而aaa.txt不存在则ls aaa.txt便为错误,我们可以ls [12].txt aaa.txt &> a.txt; ls [12].txt aaa.txt &>> a.txt, 在cat a.txt可以发现正确的输出和错误的输出都被写入到了a.txt中

 

  • 上条介绍了如何把正确和错误的输出定向到同一个文件中,我们也可以把正确和错误分开分别定向到各自的文件中去

仍然使用上面的例子,ls [12].txt aaa.txt > 1.txt 2> a.txt, 用cat分别查看1.txt和a.txt,可以发现正确和错误的输出被分别写入到了1.txt和a.txt

如下图所示

  • 命令 >> 文件 2>&1 :以追加的方式,把正确输出和错误输出都保存在文件中。
  • 输入重定向 —— <

可以把<右面的文件作为<左面命令的输入,例如# wc -l < 1.txt, 就是1.txt文件内容作为命令# wc -l的输入,如下图所示

注:不可以如下图所示那样使用

 

6.管道符和作业控制

1)管道符

把前面输出的内容传给后面的命令。

例如下图所示,# find ./ -type f |wc -l,则表示把查询出的当前目录下所有的文件作为管道符后面命令#wc -l的输入,从而得出结果统计出当前目录下的文件数量为30.

2)作业控制

  • ctrl z可以用来暂停一个任务

例如在我们用# vim编辑一个文件中,想要临时暂停任务,就可以使用Ctrl z

如果想要恢复暂停的任务可以使用# fg

 

  • # jobs命令可以列出已经暂停或后台运行的任务

如下图所示

 

如果有多个已暂停的任务,想要恢复指定的任务,可以使用# fg 任务的id号。使用上图的例子,如果我们想要恢复对aa.txt文件的编辑,便可以 # fg 2

 

  • # bg命令可以使已暂停的任务在后台继续运行

例如,我们运行命令#vmstat 1(可以实时显示系统的状态),在用Ctrl z暂停任务后,便可以用# bg命令在后台恢复运行,虽然在屏幕中仍可显示出vmstat 1 的运行结果,但是不影响操作新的命令,且用#jobs查看任务,可以发现vmstat 1已经恢复运行了

注:如果在有多个已暂停或在后台运行的任务时,#fg、#bg后面不加任务ID就会对最后一个任务进行操作

  • # sleep 数字,表示暂停多少秒
  • 在命令后面加shift 7 (&), 可以直接使命令在后台运行

 

7. 变量

PATH, HOME, PWD, LOGNAME

  • # env,可以查看到系统中的变量,系统中的变量通常都是英文大写

 

 

 

  • # set, 此命令也可以用来查看变量,与# env不同的是,#set还可以查看用户自定义的变量
  • 自定义变量

 

  • 变量的叠加

 

注:单引号和双引号

首先说下他们的共同点: 好像就只有

一个,就是它们都可以用来界定一个字符串,这个没什么好解释的,真正需要记住的是它们区别,

所以经过整理后,它们的区别主要包括:

 

1)、单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原

  封不动的使用,唯一需要注意的点是不允许引用自身;

 

2)、双引号属于弱引用,它会对一些被引起来的字符进行特殊处理,主要包括以下情况: 

  1:$加变量名可以取变量的值 ,比如:

  [root@localhost ~]# echo '$PWD'

  $PWD  

  [root@localhost ~]# echo "$PWD"

  /root 

  2:反引号和$()引起来的字符会被当做命令执行后替换原来的字符,比如:

  [root@localhost ~]# echo '$(echo hello world)'

  $(echo hello world)

  [root@localhost ~]# echo "$(echo hello world)"

  hello world

 

[root@localhost ~]# echo '`echo hello world`'

`echo hello world`

[root@localhost ~]# echo "`echo hello world`"

hello world 

  3:当需要使用字符($  `  "  \)时必须进行转义,也就是在前面加\ ; 

[root@localhost ~]# echo '$ ` " \'

$ ` " \

[root@localhost ~]# echo "\$ \` \" \\"

$ ` " \

 

  • 全局变量

# w, 可以用来查看,用户终端的登陆情况

 

# echo $SSH_TTY, 可以用来查看当前终端下用来登陆的TTY

一般来说我们在一个shell中定义一个变量的话,只在当前shell中生效,并不在其子shell中生效,如果想要在子shell中也生效,使用# export,例如# export r=1111

注:此全局变量是指作用于向下的shell,不能作用于上层的shell

如果想要打开一个子shell,可直接运行# bash命令,同时用pstree可以查看当前所在的shell

  • #unset 变量的名字,便可取消变量的赋值

 

8.环境变量配置文件

 

http://blog.51cto.com/13503302/2084137

 

Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。

所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找到的讲的比较明白的文件介绍(略作修改)[1]:

 

系统级:

/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/bash.bashrc文件。

/etc/bash.bashrc:系统级的bashrc文件。

/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。

 

用户级(这些文件处于家目录下):

~/.profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。

~/.bash_profile or ~./bash_login:这里没有引用作者的,下面会提到

~/.pam_environment:用户级的环境变量设置文件,没有做测试,不知道管不管用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值