Linux&Unix大学教程-第13章作答

1.1什么是字符数字式字符、元字符?列举三种,展示用途。

  • 字符数字式字符:键入希望键入的,即所见即所得的,字母和数字。
  • 元字符:使用shell时,许多其他字符拥有特殊意义。
  • 列举如下:
    • 使用星号-文件名拓展:匹配0或多个字符。
    • & 和号-作业控制:在后台运行命令。
    • $美元符号-变量:用变量的值替换。

1.2写出下列绰号

  • 星号–星号
  • 输入。回车–新行
  • 感叹号–bang
  • 点号–点
  • 引号–双引号
  • 竖线–管道

1.3引用字符的三种不同方式是什么?如何区别?

  • 1.反斜线—引用单个字符:

    echo It is warm and sunny\; come over and visit

如果没有\,就是两个命令:echo,come

  • 2.单引号—引用一串字符:

    echo It is warm
    ‘(and sunny);come over & visit’

    echo It is warm’(and sunny);’comr over \& visit

  • 3.双引号—引用一串字符,但是保留 美元,反引号,反斜线 的特殊含义。

    echo “My userid is <$USER>; my terminal is <&TERM>”

1.4什么是内置命令?在哪里查找内置命令的文档材料?

  • 在输入命令时,shell将命令分成不同部分,进行解析,之后shell决定如何处理命令。而一些命令在shell内部,shell可以直接解析他们,这些命令叫做内置命令。
    • Korn shell

      man bash

      man ksh

      man tcsh

      man csh

    • 查看是否有说明书页

      apropos builtin

    • 快速查看内置命令列表—Linux & FreeBSD

      man builtin

    • 快速查看内置命令列表–Solaris

      man shell_builtins

    • Linux还有个help命令

      help [-s] [command(命令名称)]

      • help

        help | less 每次一屏地显示信息。

      • help set

        help pwd history kill

        help help 利用help显示一条或者多条具体命令的信息。而help本身也是一个内部命令。

1.5什么是搜索路径?如何显示搜索路径?

  • 搜索路径是:包含所有外部命令的程序的目录列表。命令不是内置的,shell必须查找出合适的程序来运行。比如date,搜索路径中的一个目录里面-包含存放date的文件。
  • 查看搜索路径,显示PATH的值即可:

    echo $PATH

    典型的输出是

    /bin: /usr/bin: /usr/ucb: /usr/local/bin: /home/harley/bin

1.6什么是历史列表?最简单最常见的历史列表应用就是重新执行前面的命令,这是如何完成的呢?如果使用Bash或者Tcsh,那么如何调取、编辑然后再执行前面的命令呢?

  • 在输入命令时,shell会将命令保存在所谓的历史列表中。历史列表会记录之前输入过的诸多命令。
  • 重新执行前面的命令,需要按一下就好了。
  • 两种情况:

    • 对于Bourne shell家族(Bash,Korn shell),可以使用fc命令加上-l(list列举)选项显示历史列表。

      fc -l

    • 对于C-Shell家族(C-Shell,Tcsh),可以使用history命令。

      history

    • 以上两种输出为每行一个事件,事件前面有编号。如果历史列表太长了,可以用less命令。

      history | less

    • 如果重新执行之前的某一个命令(编号为24),可以用 -s(Bash shell) 或者用 !(bang)(C-Shell)

      fc -s 24

      !24

    • 如果要执行前一个命令

      fc -s

      !!

    • 如果要修改一个命令

      打开data,不是tempfile文件

      fc -s tempfile=data 25

      !25:s/tempfile/data/

      输入date,不是datq

      fc -s q=e

      ^q^e

1.7什么是自动补全?自动补全有多少种类型?简述各种类型的自动补全各自完成什么补全。哪种类型的自动补全是最最重要的?

  • 在任何时候,都可以按下一个特殊的键组合,然后shell就会尽量地自动补全当前的单词。
  • 对于Bash、Korn shell、C-Shell、Tcsh来说,自动补全有五种类型。我的好像是Tcsh。
    • BKCT –文件名补全 –补全文件和目录
    • BT –命令补全 –补全命令,包括路径名
    • BT –变量补全 –补全变量
    • BCT –用户标识补全 –补全系统上的用户标识
    • B –主机名补全 –补全局域网上的计算机
  • 文件名补全最常用,当知道希望键入什么,但是记不清完整文件、目录名称时,自动补全非常方便啦。

2.1如何修改Bash的shell显示,以显示用户标识、工作目录、还有当前时间?在Tcsh的shell提示中又是如何实现相同修改的吗?

  • shell提示:

    • Bash:

      $ date

    • Tcsh:

      % date

      date

    • 超级用户:

      /# date

  • 修改Bash的shell显示:

  • USER:
    • ➜ ~ export PS1=”$USER$ “

      ➜ ~ echo “ID is ${USER} “

      ID is qianziqianshang

    • ➜ ~ set prompt = “$USER> “

      ➜ ~ echo “ID is ${USER} “

      ID is qianziqianshang

  • TIME:
    • Bash:

      export PS1=”\d \@$ “

    • Tcsh:

      set prompt = “%d %w %D %@> “

  • PWD:
    • zsh

      echo “$PWD “

    • Bash

      echo “$PWD$ “

    • Tcsh

      echo “$PWD> “

2.2什么是命令替换?创建一条命令:“These userids are logged in right now:”,后面紧跟用户标识列表。

  • 什么是命令替换?—命令替换允许一条命令嵌入在另一条命令里,shell首先执行嵌入的命令,并且输出替换该命令,然后shell再执行整个命令。
  • set prompt = “$USER> “

    echo “These userids are logged in right now: ${USER}”

2.3修改历史列表

如图所示---

2.4自动补全时,引入文件需要的最低字符是多少?

  • datanew —5
  • dataold —5
  • important —1
  • phonenumbers —2
  • platypus —2

做task.xueer之前的命令行操作

  • 肯定是先要有node (-v 看看版本)。
  • 之后淘宝镜像

    sudo npm install -g http-server –registry=https://registry.npm.taobao.org

  • 建立xueer文件夹

    work mkdir xueer

  • 建立html,css文档

    xueer touch index.html
    xueer touch index.css

  • github新建仓库。

  • 使其有git功能,和github建立关系,并忽视没有太大意义的文档(.DS_Store),只保留html,css,.gitignore可见。

    xueer git init
    Initialized empty Git repository in /Users/qianziqianshang/work/xueer/.git/
    xueer git:(master) ✗ vim .gitignore

  • 按照github操作来。

    ➜ xueer git:(master) ✗ git add .
    ➜ xueer git:(master) ✗ git commit -m “initial commit”

    [master (root-commit) 8d22ed1] initial commit
    3 files changed, 1 insertion(+)
    create mode 100644 .gitignore
    create mode 100644 index.css
    create mode 100644 index.html
    

    ➜ xueer git:(master) git remote add origin https://github.com/wwyqianqian/task-xueer.git
    ➜ xueer git:(master) ✗ git push origin master

    Counting objects: 4, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (4/4), 275 bytes | 0 bytes/s, done.
    Total 4 (delta 0), reused 0 (delta 0)
    To https://github.com/wwyqianqian/task-xueer.git
    [new branch]      master -> master
    
  • 正常写html,css,在本地查看

    ➜ xueer git:(master) ✗ http-server

js添加新函数

正常是这样写的

printFarmInventory(cows,chickens){
1
2
3
4
5
6
7
8
9
10
var cowString=String(cows);
while(cowString.length<3)
cowString="0"+cowString;
console.log(cowString+"Cows");
var chickenString=String(chickens);
while (chickenString.length<3)
chickenString="0"+chickenString;
console.log(chickenString+"Chickens");
}
printFarmInventory(7,11);

如果要加入一只pig的话,把重复的代码,提取成为一个函数。

printZeroPaddedWithLable(number,label){
1
2
3
4
5
6
7
8
9
10
11
var numberString=String(number);
while (numberString.length<3)
numberString="0"+numberString;
console.log(numberString+""+label);
}
function printFarmInventory(cows,chickens,pigs){
printZeroPaddedWithLable(cows,"Cows");
printZeroPaddedWithLable(chickens,"Chickens");
printZeroPaddedWithLable(pigs,"pigs");
}
printFarmInventory(7,11,3);

不再将重复的代码提取为函数,而是提取其中一项操作。

zeroPad(number,width){
1
2
3
4
5
6
7
8
9
10
11
var string=String(number);
while(string.length<width)
string="0"+string;
return string;
}
function printFarmInventory(cows,chickens,pigs){
console.log(zeroPad(cows,3)+"Cows");
console.log(zeroPad(chickens,3)+"Chickens");
console.log(zeroPad(pigs,3)+"Pigs");
}
printFarmInventory(7,16,3);

Linux下操作目录最基本的命令

复习一下cd

  • cd /xxx 不基于当前工作目录
  • cd xxx 基于当前工作目录
  • cd null 相当于回家目录~

创建新目录mkdir

  • 例如:
    1
    cd mkdir bin essays essays/history essays/literature

或者

1
mkdir ~/bin ~/essays ~/essays/history ~/essays/literature

  • 即,在一个目录中,不能重名(两个目录可以拥有相同的名称)。先父后子。

但是这样好麻烦啊,于是乎-p来啦!!!

  • 例如:
    1
    2
    3
    4
    5
    mkdir ~/essays
    mkdir ~/essays/history
    mkdir ~/essays/history/roman
    mkdir ~/essays/history/roman/unix
    mkdir ~/essays/history/roman/unix/research

可以使用-p

1
mkdir -p ~/essays/history/roman/unix/research

移除目录:rmdir

  • 例如:
    1
    2
    3
    4
    cd /essays
    rmdir history literature
    cd ..
    rmdir bin essays

以上为法1

1
2
cd
rmdir essays/history essays/literature essays bin

以上为法2

1
rmdir ~/essays/history ~/essays/literature ~/essays ~/bin

以上为法3

  • 即,当目录为空(无文件。无子目录)时,才可以移除rmdir。不能移除工作目录和根目录之间的任何目录。

同理,-p又来造福大家啦

1
2
3
4
5
rmdir essays/history/roman/unix/research
rmdir essays/history/roman/unix
rmdir essays/history/roman
rmdir essays/history
rmdir essays

简化为以下。

1
2
cd
rmdir -p essays/history/roman/unix/research

  • 绝对路径:路径的写法一定由根目录/ 写起,例如:/Users/qianziqianshang/work/wwyqianqian 这个目录。
  • 相对路径:路径的写法不是由/ 写起,例如由/Users/qianziqianshang/work/wwyqianqian 要到 /Users/qianziqianshang/work/wwy底下时,可以写成:『cd ../wwy』。
.         此层目录
..        上一层目录
-         前一个工作目录
~         目前使用者所在的家目录  是home啦
~account  account 这个使用者的家目录(account是个帐号名称)

注意:以下root 和 qianziqianshang是两个使用者。

  • [root@www ~]# cd ~qianziqianshang

    代表去到 qianziqianshang的家目录,亦即 /home/qianziqianshang

  • [root@www qianziqianshang]# cd ~

    表示回到自己的家目录root ,不是qianziqianshang的home,亦即是 /root 这个目录

  • [root@www ~]# cd

    没有加上任何路径,也还是代表回到自己家目录/root 的意思

  • [root@www ~]# cd ..

    表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思

  • [root@www /]# cd -

    表示回到刚刚的那个目录,也就是 /root

  • [root@www ~]# cd /var/spool/mail

    这个就是绝对路径的写法!直接指定要去的完整路径名称!

  • [root@www mail]# cd ../mqueue

    这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/mqueue 就这样写

cd是Change Directory的缩写,这是用来变换工作目录的命令。注意,目录名称与cd命令之间存在一个空格。一登陆Linux系统后,root会在root的家目录!qianziqianshang会在home!也就是我们看到命令行里的‘~’

重命名mv

  • mv data extra

    data被重命名为extra(extra不存在)

移动mv

  • mv /home/harley/data
    /home/harley/storage

    • 如果工作目录是/home/harely

      直接mv data storage

      此时,data在–/home/harely/storage/data

    data被移动(extra存在)

综上,mv三个功能:重命名,移动,移动整个目录树。

目录栈:pushd popd dirs

pushd 把目录名称压入目录栈

popd 弹出目录名称

dirs 显示栈的内容

dir使用的时候,dir -l -v 。(lv不能连一起)

任何时候,栈顶,存放的都是—当前工作目录的名称(改变工作目录时,栈顶!元素也改变)。

  • 例如:

    压入三个新目录,之后dirs显示栈的内容。
    1
    2
    3
    4
    pushd /lib
    pushd /var
    pushd /etc
    dirs -v

输出为

1
2
3
4
0 /etc
1 /var
2 /lib
3 /usr

显示当前目录

1
pwd

输出为

1
/etc

之后popd弹出一个栈顶

1
2
popd
dirs -v

输出为

1
2
3
0 /var
1 /lib
2 /usr

显示工作目录

1
pwd

输出为

1
/var

  • 而这样子,不会显示空的目录,而是当前工作目录。

    1
    2
    dirs -c
    dirs -v
  • 为何不用cd 而是用目录栈呐??

    1
    2
    3
    4
    5
    6
    cd
    dirs -c
    pushd /lib
    pushd /var
    pushd /etc
    dirs -v

注意新压入三个之前,有个home。所以-v显示为

1
2
3
4
0 /etc
1 /var
2 /lib
3 ~

在etc工作了许久,要切换到lib目录

1
pushd +2

这是告诉shell把#2移动到#0

1
dirs -v

输出为

1
2
3
4
0 /lib
1 ~
2 /etc
3 /var

看得出来,在众多目录中切换比较方便。删除就是popd,压入就是pushd。

  • 在bash里,c-shell里 可以创建别名
    1
    2
    3
    4
    alias d='dirs -v'
    alias p=pushd
    alias d 'dirs -v'
    alais p pushd



d
p /usr/lib
p +4
超级方便啦w

新人任务

1. css 页面居中随意拉伸布局(什么鬼···

class="haha">
1
2
3
<div class="sector1"></div>
<div class="sector2"></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
background-color: grey;
width:400px;
height:200px;
position:relative;
top:50%;
left:50%;
margin-top:-100px;
margin-left:-200px;
}
.sector1{
background-color:yellow;
border-radius: 0 0 50px 0;
height:50px;
width:50px;
}
.sector2{
background-color:yellow;
border-radius:50px 0 0 0 ;
height:50px;
width:50px;
position:absolute;
bottom:0;
right:0;
}

2.单行文本省略···

1
2
3
4
<div class="headline">
<div class="head">标题文字标题文字标题文字标题文字标题文字标题文字哈哈哈哈哈哈哈哈哈标题文字</div>
</div>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
line-height:25px;
}
.head{
font-size:16px;
font-family:PingFang SC;
color:black;
width:200px;
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden;
}

3. 浮动及其清除

class="parent clearfix">
1
2
3
<div class="side">侧栏</div>
<div class="main">主栏</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
width:810px;
margin:0 auto;
font-size:40px;
text-align:center;
line-height:200px;
color:white;
background:black;
}
.side {
width:200px;
margin-right:10px ;
float:left;
background-color:red;
}
.main {
width:600px;
float:left;
margin:0 auto;
background-color:blue;
}
.clearfix:after{
clear:both;
display:block;
content:'';
}

4.信息集锦?调查问卷模式

name="description" content="wwy 的task2作业">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<form action="/login" method="post">
<div>
<label for=“headportrait”>头像</label>
<input type="file" name=“headportrait”>
</div>
<div>
<label for="nickname">昵称</label>
<input class="txt" type="text" name="nickname">
</div>
<div>
<label for="education">学历</label>
<select id="education">
<option value="0" selected>大专</option>
<option value="1">本科</option>
</select>
</div>
<div>
<label for="gender">性别</label>
<input class="rd" type="radio" name="gender" id="rd_0" value="male" checked>
<label for="rd_0">男</label>
<input class="rd" type="radio" name="gender" id="rd_1" value="female">
<label for="rd_1">女</label>
</div>
<div>
<label for="hobbies">爱好</label>
<input class="cb" type="checkbox" name="hobbies" id="cb_0" value="movie" checked>
<label for="cb_0">电影</label>
<input class="cb" type="checkbox" name="hobbies" id="cb_1" value="photography">
<label for="cb_1">摄影</label>
<input class="cb" type="checkbox" name="hobbies" id="cb_2" value="music">
<label for="cb_2">音乐</label>
<input class="cb" type="checkbox" name="hobbies" id="cb_3" value="read" checked>
<label for="cb_3">阅读</label>
</div>
<div>
<label for="signature">签名</label>
<textarea name="signature" rows="4"></textarea>
</div>
<div>
<button type="Preservation">保存</button>
</div>
</form>

5.超链接及其跳转方式x2

1
2
3
4
5
6
7
8
9
10
<html>
<body>
<div id="main1"> <p><a href="http://yuedu.163.com/source/5e34d573e918435581c052f5a5e31f30_4"target="_blank" title="当我足够好,才会遇见你">1.当我足够好,才会遇见你</a></p></div>
<div id="main2"> <p><a href="http://yuedu.163.com/search.do?key=%E7%9A%AE%E5%9B%8A&type=4"target="_blank" title="皮囊">2.皮囊</a></p></div>
<div id="main3" ><p><a href="http://yuedu.163.com/search.do?key=%E6%9D%8E%E5%85%89%E8%80%80%E8%AE%BA%E4%B8%AD%E5%9B%BD%E4%B8%8E%E4%B8%96%E7%95%8C&type=4"target="_blank" title="李光耀论中国与世界">3.李光耀论中国与世界</a></p></div>
<div id="main4"><p><a href="http://yuedu.163.com/search.do?key=%E4%B9%96%EF%BC%8C%E6%91%B8%E6%91%B8%E5%A4%B4&type=4"target="_blank" title="乖,摸摸头">4.乖,摸摸头</a></p></div>
<div id="main5"><p><a href="http://yuedu.163.com/search.do?key=%E7%94%B7%E5%A5%B3%E5%86%85%E5%8F%82&type=4"target="_blank" title="男女内参">5.男女内参</a></p></div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
max-width:600px;
margin:10 auto;
padding:2px;
height:40px;
background-color:66ccff;
}
#main2{
max-width:600px;
margin:10 auto;
padding:2px;
height:40px;
background-color:6699ff;
}
#main3{
max-width:600px;
margin:10 auto;
padding:2px;
height:40px;
background-color:6663ff;
}
#main4{
max-width:600px;
margin:10 auto;
padding:2px;
height:40px;
background-color:6633ff;
}
#main5{
max-width:600px;
margin:10 auto;
padding:2px;
height:40px;
background-color:6633cc;
}

6.HTML实现表格

border="1" >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<caption>运费详情</caption>
<thead>
<tr>
<th>区域</th><th>寄达地</th><th>首重(元/kg)</th><th>续重(元/kg)</th>
</tr>
</thead>
<tbody>
<tr>
<th rowspan="2">一区</th>
<td>浙江 上海 江苏</td>
<td>6</td>
<td>1</td>
</tr>
<tr>
<td>江西 安徽</td>
<td>7</td>
<td>1</td>
</tr>
<tr>
<th>二区</th>
<td>黑龙江 吉林 云南</td>
<td>10</td>
<td>6</td>
</tr>
<tr>
<th>三区</th>
<td>新疆 西藏</td>
<td>15</td>
<td>10</td>
</tr>
</tbody>
</table>