Chapter 1

Linux是怎样的一个系统

Linux是一个免费的遵循GPL(GNU General Public License)原则开发的类Unix操作系统(开源的,受欢迎的,支持大多数可用平台)

Linux常用发行版

RedHat,Debian,SuSe,Mandrake,Redflag

Linux安装(不考?)

  • Boot system from bootable media
  • All installation programs need to perform essentially the same steps:
    • Choose language, keyboard type, mouse type
    • Create partitions **
    • Setup a boot loader **
    • Configure network
    • Configure user and authentication
    • Select package groups
    • Configure X
    • Install packages
    • Create boot disk

引导程序的作用

主引导记录是一个512字节的硬盘第一扇区,446字节的代码,64字节的分区表,2字节的魔术字符

  • 一个引导会装载并启动Linux内核
    • 可以给Linux内核传递启动需要的参数如设备信息
    • 可以选择性的加载一个初始化的根磁盘
    • 可以启动其他的操作系统
  • 常用的引导程序

    • LILO:Linux Loader

      一个按照配置文件设置MBR的程序,一定要使用超级用户运行lilo命令才行

    • GRUB: Grand Unified Boot Loader

      第一阶段在MBR中,第二节点在/boot/grub中,能够理解文件系统,不需要像LILO一样激活设置,配置文件在/boot/grub/grub.conf,使用grub-install命令进行安装。

CLI和GUI的对比

一个是命令行一个是图形化界面

安装软件命令

  • 从tar压缩包开始

    1
    2
    3
    4
    5
    6
    tar zxvf application.tar.gz
    cd application
    ./configure
    make
    su -
    make install
  • apt-get命令

  • dpkg命令

  • aptitude命令

  • yum+rpm

  • RPM:RPM包管理器

    1
    2
    3
    rpm -q -a
    rpm -ivh package-name
    rpm -e package-name

apt-get原理(没找到)

老师的pdf里面没找到,可以参考CSDN博客,个人感觉写的还可以

Linux常用命令

  • passwd:改密码
  • mkpasswd:生成一个新的随机密码
  • date,cal:获取今天的时间以及显示一个日历
  • who,finger:获取在这个系统上活动的其他用户
  • clear:清屏
  • echo:打印
  • write,wall,talk;消息
  • pwd:打印工作目录
  • cd:更改目录
  • mkdir:创建目录
  • rmdir:删除目录
  • ls:列出目录下的所有内容
  • touch:更新文件的访问和/或修改时间
  • cp:复制文件
  • mv:移动并且重命名文件
  • ln:链接文件
  • rm: 删除文件
  • cat:打印文件的内容
  • more/less:每页依次显示文件
  • ps:汇报进程状态
  • pstree:显示进程树
  • jobs,fg,bg,: 后台进程控制
  • kill:杀进程
  • nohup:后台运行
  • top:显示CPU头部进程

七种文件类型

  • 普通文件
    • 文本和数据,没有特别的内部结构
  • 字符设备文件c
    • 穿行端口的接口设备,例如键盘、鼠标
  • 块设备文件b
    • 存储数据以供系统存取的接口设备,如硬盘
  • 套接字文件s
    • 用在网络数据连接
  • 管道文件p
    • 解决多个程序同时存取一个文件造成的错误
  • 链接文件l
    • 类似快捷方式
  • 目录文件d
    • 文件夹

文件夹组织

  • 所有的Linux文件夹都在一个统一制式的虚拟的文件系统中
  • 物理设备都挂载在挂载点上
    • Floppy disks
    • Hard disk partition
    • CD-ROM drives
  • 没有盘符如A:,C:

文件权限

  • 三种访问级别
    • 用户:User
    • 用户组:Group
    • 其他
  • 三种权限
    • r
    • w
    • x
  • chmod命令
    • chmod filename
    • 权限可以运算为数(1,2,4)
  • 默认权限
    • 文件的默认权限是644
    • 目录的默认权限是755

ls -l

  1. 文件权限以及类型
  2. 链接计数
  3. 拥有者
  4. 拥有组
  5. 大小
  6. 最后一次修改时间
  7. 文件名

ls-l示例

进程的概念

  • 进程是一个任务
  • 进程是一个正在执行的程序实例。由执行程序、它的当前值、状态信息以及通过操作系统关系此进程情况的资源组成
  • 进程是一个地址空间,一个或者多个线程在该地址空间中执行,以及这些线程所需要的系统资源

Unix层次

早期的UNIX是一个简单的文件系统。一个进程子系统和一个shell

分为内核和核外程序

Chapter 2

要求掌握的命令

ls, dir, mkdir, mknod, mkfifo, cp, mv, rm, chmod, chown, chgrp, touch, locate, find, grep, pwd, cd, ar, file, tar, more, less, head, tail ,cat, ps, kill, jobs, fg, bg, nice, who, whoami, passwd, su, uname, man

重定向

详见菜鸟教程Shell重定向

管道

一个进程的输出作为另一个进程的输入

环境变量

  • 操作环境的参数
  • 查看和设置环境变量(echo,env,set)

例如:PATH环境变量

1
2
3
4
echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/song/bin
PATH=$PATH:.
export PATH

简单的正则

详见菜鸟教程|正则表达式

Shell

Shell的地位、位置

shell是一个命令解释程序和变成环境,是用户和操作系统之间的接口,作为核外程序存在。

Shell的功能(没找到)

  • 命令解释程序
    • Linux的开机启动过程;进程树
  • 独立的程序设计语言解释器
    • KISS
    • Reusable tools
    • Redirection and pipe

不同种类的Shell

不同种类的shell

执行脚本

  1. 可以直接在命令行中进行输入,但是这种输入方式仅会执行一次脚本
  2. 编写脚本文件(要注意注释和退出码)之后进行执行,执行的方法有
    1. sh scropt_file
    2. chmod +x script_file(chown,chgrp 可选择) && ./script_file
    3. source script_file ( or ) .script_file

用户变量

用户变量是用户在shell脚本里面定义的变量

变量的赋值和使用

1
2
var=value
echo $var

read命令

  • 用法:read var 或 read

  • 参数:-t 5(5秒之内进行输入)-p之后可以指定一个提示,更多参见菜鸟教程read命令

  • reply variable

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    echo -n "Enter your name:"
    read name
    echo "hello $name, welcome to my program"
    exit 0
    #或
    read -p "Enter your name:" name #-p参数,运行徐在read命令行中直接指定一个提示
    #如
    read -p "Enter a number"
    echo $REPLY

引号的用法

单引号

单引号内的所有字符都保持它本身字符的意思,而不会被bash进行解释,例如使用单引号包住$之后表示的是它本身而不再是bash的变量引用符,\就是本身而不再是bash的转义字符

双引号

除了$、`(不是单引号)和\外,双引号内的所有字符将保持字符本身的含义不被bash解释

环境变量

shell环境提供的变量,通常使用大写字母作为名字

环境变量

参数变量

用于脚本程序如果带有参数的情况

参数变量

条件测试

  • 退出码(exit code)
  • test命令
  • test命令支持的条件测试
    • 字符串比较
    • 算术比较
    • 与文件有关的条件测试
    • 逻辑操作

字符串比较

字符串比较 结果
str1 = str2 两个字符串相同则结果为真
str1 != str2 两个字符串不相同则结果为真
-z str 字符串为空则结果为真
-n str 字符串不为空则结果为真

算术比较

算术比较 结果
expr1 -eq expr2 两个表达式相等则结果为真
expr1 –ne expr2 两个表达式不相等则结果为真
expr1 –gt expr2 expr1 大于expr2 则结果为真
expr1 –ge expr2 expr1 大于或等于expr2 则结果为真
expr1 –lt expr2 expr1 小于expr2 则结果为真
expr1 –le expr2 expr1 小于或等于expr2 则结果为真

与文件有关的条件测试

文件条件测试 结果
-e file 文件存在则结果为真
-d file 文件是一个子目录则结果为真
-f file 文件是一个普通文件则结果为真
-s file 文件的长度不为零则结果为真
-r file 文件可读则结果为真
-w file 文件可写则结果为真
-x file 文件可执行则结果为真

逻辑操作

逻辑操作 结果
!expr 逻辑表达式求反
expr1 -a expr2 两个逻辑表达式“And”(“与”)
expr1 -r expr2 两个逻辑表达式“Or”(“或”)

条件控制语句

if 语句

1
2
3
4
5
6
7
8
9
10
if [ expression ]
then
statements
elif [ expression ]
then
statements
elif …
else
statements
fi

例如

1
2
3
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
echo “Is this morning? Please answer yes or no.”
read answer
if [ “$answer”= “yes”]; then
echo “Good morning”
elif [ “$answer”= “no”]; then
echo “Good afternoon”
else
echo “Sorry, $answer not recognized. Enter yes or no”
exit 1
fi
exit 0

case 语句

1
2
3
4
5
case str in
str1 | str2) statements;;
str3 | str4) statements;;
*) statements;;
esac

例如

1
2
3
4
5
6
7
8
9
#!/bin/sh
echo “Is this morning? Please answer yes or no.”
read answer
case “$answer”in
yes | y | Yes | YES) echo “Good morning!”;;
no | n | No | NO) echo “Good afternoon!”;;
*) echo “Sorry, answer not recognized.”;;
esac
exit 0

循环语句

for语句

1
2
3
4
for var in list
do
statements
done

例如

1
2
3
4
5
#!/bin/sh
for file in $(ls f*.sh); do
lpr $file
done
exit 0

while语句

1
2
3
4
while condition
do
statements
done

例如

1
2
3
4
5
6
7
8
9
10
11
quit=n
while [ “$quit”!= “y”]; do
read menu_choice
case “$menu_choice”in
a) do_something;;
b) do_anotherthing;;

q|Q) quit=y;;
*) echo “Sorry, choice not recognized.”;;
esac
done
1
2
3
4
5
6
7
8
9
10
a=0
while [ "$a" -le "$LIMIT" ]
do
a=$(($a+1))
if [ "$a" -gt 2 ]
then
break # Skip entire rest of loop.
fi
echo -n "$a ”
done

until语句

1
2
3
4
until condition
do
statements
done

不推荐使用until语句,一般使用while循环作为替代

select语句

1
2
3
4
select item in itemlist
do
statements
done

例如

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
clear
select item in Continue Finish
do
case “$item”in
Continue) ;;
Finish) break ;;
*) echo “Wrong choice! Please select again!”;;
esac
done

命令表

命令组合

  • 分号串联
    • command1;command2;….
  • 条件组合
    • AND命令表(格式:statement1 && statement2 && statement3 && …)
    • OR命令表(格式:statement1 || statement2 || statement3 || …)

语句块

1
2
3
4
5
6
7
{
statement1
statement2

}

{ statement1; statement2 ; …; }

函数

1
2
3
4
func()
{
statements
}

局部变量使用local关键字。

函数调用:func para1 para2 …

返回使用return

函数样例

杂项命令

  • break: 从for/while/until循环退出
  • continue: 跳到下一个循环继续执行
  • exit n: 以退出码”n”退出脚本运行
  • return: 函数返回
  • export: 将变量导出到shell,使之成为shell的环境变量
  • set: 为shell设置参数变量
  • unset: 从环境中删除变量或函数
  • trap: 指定在收到操作系统信号后执行的动作
  • “:”(冒号命令): 空命令
  • “.”(句点命令)或source: 在当前shell中执行命令

算术扩展

$((…))扩展

样例:

1
2
3
4
5
6
7
8
9
#!/bin/bash

x=0
while["$x" -ne 10];do
echo $x
x=$(($x+1))
done

exit 0

关于shell中的算数可以参考CSDN博客

Linux程设复习提纲(二)