这几天学校的事情比较多,空闲时间也有,但没有利用起来。前些天听国学课,发觉自己心性还是不很成熟,以前自觉遇到君子应用君子的方法相处,遇到小人用小人的方法对待,老师一句话,疏清了自己。当我们用小人的方法对待小人时,有一天,你和小人打了一架,很多时候,我们就不能再去以君子之心来对待君子了。什么事都是一样的,自己应该主宰自己,不应因外界的改变去改变自己。继续吧,坚持下去。

 

命令别名alias、unalias:

新创一个新命令,可以直接执行该命令。例如:alias lm=’ls -l | more’。alias查看设置别名,unalias取消命令别名。

历史命令history:

history [参数],n数字,要列出最近的n条命令行的意思、-c将目前的shell中所有history内容全部清除。

!number:执行第n条命令;!command由最近的命令向前搜寻命令串开头为command的那个命令,并执行;!!执行上一个命令。

命令运行的顺序:

1.以相对/绝对路径执行文件;

2.由alias找到该命令来执行;

3.由bash内置的(builtin)命令来执行;

4.通过$PATH这个变量的顺序找到的第一个命令来执行。

bash的登录和欢迎信息:/etc/issue,/etc/motd

登录界面信息写在/etc/issue中,issue内的变量代码意义:\d本地端的日期、\t本地端的时间、\l显示第几个终端机接口、\m显示硬件等级(i686,x84_64...)、\s显示操作系统名称、\r显示系统版本、\n显示主机网络名称。

/etc/issue.net这个是提供给telnet远程登录程序用的,当我们使用telnet连接到主机时,主机的登录界面就会显示/etc/issue.net而不是/etc/issue。

/etc/motd这个是让普通用户登录后取得的信息。

bash的环境配置文件:

login shell:取得bash时需要完整的登录流程的,称为login shell。例如:由tty1~tty6登录,需要输入用户账号与密码,此时的bash就称为login shell。

non-login shell:取得bash接口的方法不要重复登录的举动,例如:你以X window登录后,再以X的图形界面启动终端机,此时那个终端接口没有需要再次输入账号和密码,此时bash环境称为non-login shell。

login shell读取两个配置文件:

/etc/profile:系统整体的设置,最好不要修改这个文件;

~/.bash_profile或~/.bash_login或~/.profile:属于用户个人设置,可修改自己的数据。其实bash的login shell设置只会读取上面三个文件中的一个,而读取的顺序是依照上面的顺序。

non-login shell读取配置文件:

~/.bashrc:帮我们定义三方面数据,1.依据不同的UID规定umask的值;2.依据不同的UID规定提示符(PS1变量);3.调用/etc/profile.d/*.sh的设置。

source:读入环境配置文件命令

source(.) 配置文件名,将新设置的内容读进目前的环境中。

其它配置文件:

/etc/man.config:规定了使用man的时候man page的路径到哪里寻找。

~/.bash_history:历史命令的记录文件。

~/.bash_logout:记录了当我注销bash后系统再帮我做完什么操作后才离开。

终端机环境设置:stty,set

ctrl+c中止目前命令、ctrl+d输入结束(EOF)、ctrl+m就是Enter、ctrl+s暂停屏幕的输出、ctrl+q恢复屏幕的输出、ctrl+u在提示符下,将正行命令删除、ctrl+z暂停目前命令。

bash环境中的通配符:

我和linux的第二十二天_配置文件

特殊符号:文件名进来不要使用到下述字符

我和linux的第二十二天_bash_02

数据流重定向(redirect):

standard output与standard error output,标准输出指的是命令执行所回传的正确的信息,而标准错误输出可理解为命令执行失败后,所回传的错误信息。

传送所用的特殊字符分别如下:

标准输入(stdin):代码为0,使用<或<<;

标准输出(stdout):代码为1,使用>或>>;

标准错误输出(stderr):代码为2,使用2>或2>>。

1>:以覆盖的方法将正确的数据输出到指定的文件或设备上;

1>>:以累加的方法将正确的数据输出到指定的文件或设备上;

2>:以覆盖的方法将错误的数据输出到指定的文件或设备上;

2>>:以累加的方法将错误的数据输出到指定的文件或设备上。

<:将原本需要由键盘输入的数据改为文件内容来代替;

<<:可以终止一次输入。

/dev/null垃圾桶黑洞设备

标准输出和标准错误输出一同输出在一个文件夹使用2>&1或&>,例如:find /home -name .bashrc 2>&1 test,正确输出和错误输出一同写入test中。

以下情况下使用数据流重定向:

屏幕输出的信息很重要,我们需要将它保存下来;

后台执行中的程序,不希望我它干扰屏幕正常的输出结果时;

一些系统例行命令(如卸载/etc/crontab中的文件)的执行结果,希望它可以保存下来时;

一些执行命令可能已知错误信息时,想以“2>/dec/null”将它丢弃时;

错误信息与正确信息需要分别输出时。

命令执行的判断依据,一次输入多重命令:

cmd;cmd,不考虑命令相关性的连续命令执行;

$?命令回传码,若前一个命令执行结果正确,在linux下面会回传一个$?=0的值。

我和linux的第二十二天_d3_03

command1 && command2 || command3:cmd1正确执行,则执行cmd2,cmd2正确执行不执行cmd3;cmd2错误执行开始执行cmd3;cmd1错误执行不执行cmd2,执行cmd3。

管道命令pipe(|):command1 | command2 | command3,管道命令“|”仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力。

选取命令:cut,grep

cut:提取某一段信息,以“行”为单位。-d接分隔符与-f使用、-f依据-d的分隔字符将一段信息切割成为数段,接数字、-c以字符(characters)的单位取出固定字符区间。

grep:分析一行信息,grep [参数] ‘查找字符串’ filename,-a将二进制(binary)文件以text文件的方式查找数据、-c计算找到‘查找字符串’的次数、-i(ignore)忽略大小写的不同、-n输出行号、-v反向选择,即显示出没有‘查找字符串’的一行。

排序命令:sort,wc,uniq

sort:sort [参数] file or stdin,-f忽略大小写、-b忽略最前面的空格符部分、-t分隔符,默认以[Tab]键来分隔、-k以哪个区间来进行排序。

uniq:将重复的行删除掉只显示一行,uniq [参数],-i忽略大小写,-c进行计数。

wc:计算输出数据的整体数据。

双向重定向:tee

可以将数据流送与文件和屏幕(screen);而输出到屏幕的,其实就是stdout,可以让下个命令继续处理。tee [参数] file,-a以累加(append)的方式,将数据加入file中。

字符转换命令:tr,col,join,paste,expand

tr:用来删除一段信息当中的文字,或者进行文字信息的替换。tr [参数] set1...,-d删除信息当中set1这个字符串、-s替换掉重复字符串。

col:col [参数],-x将tab键转换成对等的空格键。 

join:处理两个文件之间的数据,主要是将两个文件当中有相同数据的那一行加在一起。

paste:对比两行相关性,直接将两行粘在一起,中间以tab键隔开。

expand:将tab键转换成空格键。-t接数字,一个tab键代表多少个字符。

切割命令:split

将大文件切割成小文件。split [参数] file prefix,-b接欲切割文件大小,单位b,k,m等、prefix代表前导符,可作为切割文件的前导文字。

参数代换:xargs

产生某个命令的参数,很多命令其实不支持管道命令,因此我们可以通过xargs来提供该命令引用standard input之用。

 

1.在linux上可以找到哪些shell(举出三个)?哪个文件记录可用的shell是什么?而linux默认的shell是什么?

A.cat /etc/shells查看可用的shell,有/bin/sh、/bin/bash、/sbin/nologin;linux默认shell是bash。

2.在shell环境下,有个提示符(prompt),他可以修改吗?要改什么?默认的提示符内容什么?

A.不可以,\$提示符如果是root时提示符为#,否则就是$。默认提示符内容PS1=[\u@\h\W]\$即[账户名称@主机名,用户所在文件夹]提示符。

3.如何显示HOME这个环境变量?

A.echo $HOME。

4.如何得知目前的所有变量与环境变量的设定值?

A.env或export查看环境变量,set查看所有变量(包括环境和自定义变量)。

5.我是否可以设定一个变量名称3myhome?

A.不可以,变量的首字符必须为字母。

6.在这样的练习中:“A=B”且“B=C”,若我执行“unset $A”,则取消的变量是A还是B?

A.取消的是B。unset $A相当于unset B。

7.如何取消变量与命令别名的内容?

A.unset $available;unalias filename。

8.如何设定一个变量名称为name内容为It's my name?

A.name=“It’s my name”。或name=It\’s\ my\ name。

9.bash环境配置文件主要分为哪两种类型的读取?分别读取哪些重要文件?

A.一类登录login shell的读取,分别读取/etc/profile系统整体设置文件,~/.bash_profile或~/.bash_login或~/.profile个人用户设置文件。第二类非登录non-login shell的读取,仅读取~/.bashrc。

10.CentOS 5.x的man page的配置文件是什么?

A./etc/man.config。

11.试说明', ", 与`这些符号在变量定义中的用途?

A.单引号改变字符属性,仅为一般字符的现实类型,双引号内仍可保持变量内容。反单引号,作为外部输入信息。

12.转义符号\有什么用途?

A.定义内容中含有特殊字符时可用/进行转义,成为一般字符。

13.连续命令中,;, &&, ||有何不同?

A.;不考虑命令的相关性,&&执行完A正确继续执行,错误不再执行,||执行完A正确不再执行,错误继续执行。

14.如何将last的结果中,独立出帐号,并且印出曾经登录过的帐号?

A.last | cut -d ‘ ‘ -f 1。 

15.请问foo1 && foo2 | foo3 > foo4,这个命令串当中,foo1/foo2/foo3/foo4是命令还是文件?整串命令的意义是什么?

A.foo1、foo2、foo3是命令,foo4为文件。foo1 && foo2的标准输出结果作为foo3标准输入通过foo3命令写入文件foo4中。

16.如何列出在/bin目录下任何以a开头的文件文件名的详细数据?

A.ls -l /bin/a*。

17.如何列出/bin目录下,文件名为四个字符的文件?

A.ls -l /bin/????。

18.如何列出/bin目录下,文件名开头不是ad的文件?

A.ls -l /bin/[^a-d]*。

19.我想要让终端机接口的登录提示符修改成我自己喜好的模样,应该要改哪里? (filename)

A.vim /etc/issus;vim /etc/motd。

20.承上题,如果我是想要让使用者登入后,才显示欢迎信息,又应该要改哪里?

A.vim /etc/motd。

 

我和linux的第二十二天_bash_04