Lipsky

Linux_learning_record

字数统计: 8.2k阅读时长: 30 min
2018/12/04 Share

Linux#

概述:#

  • 简介:是一种自由的、开放源码的、类似 Unix 的操作系统,目前存在着许多的发行版,他们都使用率 Linux 内核,严格的讲,Linux 这个词本身只表示 Linux 内核

  • 诞生:1991年,由林纳斯•托瓦兹编写的一款类Unix 操作系统内核

  • Linux 发行版:Linux 发行版一般包括 Linux 内核、安装工具、GUI、各种 GNU 软件和其它自由软件

    • Ubuntu:一个以桌面应用为生的 Linux 操作系统,由南非马克•沙特尔沃斯床笠,首个发行版于2004年10月20日发布
    • RedHat:红帽子,于1995年发布,2004年 RedHat 公司正式停止对 RedHat 的支持
    • Fedora:开放的、创新的操作系统,允许任何人使用、修改和重发布
    • OpenSUSE:由德国 Linux 爱好者推出
    • Debain:首次发布于1993年,创始人为伊恩•默多克,Ubuntu 为基于其的发行版
    • Deepin:中国Linux 发行版,友好性和适用于中国国情开发的一款 Linux 桌面操作系统。
  • Linux 与 Windows 的比较
    • 相似之处:
      • 都是多用户操作系统
      • 都支持多文件系统
      • 都支持多种网络协议
      • 都可以提供网络服务的能力,如 DHCP 和 DNS 等
    • 不同之处:
      • Linux 的设计定位是网络
      • 用户界面,Windows 把 GUI 集成到了操作系统内,Linux 没有集成到其内核中
      • 文件扩展名,Linux 不使用文件扩展名来识别文件的类型,而是根据头文件的内容来识别其内容
      • 文件执行,Linux 通过文件访问权限来识别判断文件是否为可执行文件,Windows 中以 .exe 为扩展名的文件系统都尝试加载执行
      • 系统重启,Linux 设计思想为,一旦开始,它将保持运行状态,除非发生硬件故障,Windows 特别是安装驱动软件后经常需要重启系统
      • 远程管理:Linux 的远程管理功能比 Windows 更强

基本操作#

  • Linux 安装软件的几种方式:

    • 应用商店安装,各种发行版自带的软件应用商店,可以从软件应用商店中进行安装软件

    • 通过 package 包进行安装,rpm:红帽安装包格式,deb:Debain安装包格式

    • 通过源码进行安装

      1
      2
      3
      4
      cd software_folder(进入到解压的软件目录)
      ./configure
      make
      sudo make install

      卸载:

      1
      2
      cd software_folder(进入到解压的软件目录)
      sudo make uninstall
    • 通过 apt-get 在线安装

      1
      sudo apt-get install 'software_name'

      卸载:

      1
      2
      sudo apt-get uninstall 'software_name'
      sudo apt-get remove 'software_name'
      1
      sudo apt-get update #更新软件软件源列表
  • 终端和 Shell

    “终端”,例如在 Unix 操作系统中,类似于显示器可以操纵计算机主机的输入/输出设备叫做终端(terminal)

    在 Shell 中用户可以通过 Shell 提供的命令程序与操作系统进行交互以完成相关工作

    Linux 中的 Shell程序有多种,如 bash、sh、csh……Ubuntu 安装完默认为 bash

  • Shell 提示符格式:

    ‘$’提示符前面的信息是“用户和路径信息”,其格式如下:

    <用户名>@<计算机名>:<当前目录>$

  • which 判断一个命令为外部命令还是内部命令:

    • e.g. which ls
    • e.g. which if

    第一个会返回/bin/ls,返回的是 ls 命令所在的路径,说明 ls 是一个外部命令

    第二个没有返回,可以判断出 if 命令是无效命令或者为内部命令

  • 查看帮助:

    • man 命令:用于查看外部命令的帮助手册
    • help 命令:用于查看内部命令的帮助手册
  • 文本编辑器:

    • Gedit 是 Ubuntu 默认的图形化文本编辑器程序,它具有高亮语法和编辑多个文件的功能,同时提供良好的中文支持

      • 启动方式:点击应用程序图标启动
      • 在 terminal 中输入 gedit 或 gedit&
    • Vim,不需要图形化环境,直接在 Shell 下运行,功能强大,运行速度快

      • 正常模式:也叫命令模式,Vim 刚启动时处于该模式下
      • 文本模式:在该模式下进行文字输入
      • 命令行模式,也叫底行模式,

      Vim 常用命令:

      • :q 退出
      • :wq 保存退出
      • :q! 强制退出
      • O 在当前行之前插入
      • o 在当前行之后插入
      • dd 删除当前行
      • u 撤销,恢复上一个命令之前的状态
      • /字符串 向下搜索字符串
      • ?字符串 向上搜索字符串
      • :s/p1/p2/g 将当前行中所有的 p1 均用 p2 替换
      • :n1,n2s/p1/p2/g 将第 n1 至 n2 行中 p1 均用 p2 替换
      • :g/p1/s//p2/g 将文件中所有的 p1 均用 p2 替换

文件系统#

  • 文件或目录的表示

    • 绝对路径:从根目录开始
    • 相对路径:从用户当前工作目录开始
  • pwd 命令:显示当前所在目录的绝对路径

  • mkdir:创建一个新的目录

    • -p 若创建目录时存在中间目录,则需要加这个参数
    • -m 创建目录时,对新建的目录设置权限
  • rmdir:删除空目录

    • -p 当子目录被删除后,若其父目录为空目录则一并删除
    • -v 显示删除成功提示
  • ls:列举出当前目录下的文件和文件夹,语法格式:ls 「选项」「文件或者目录」

    • -a 显示隐藏文件
    • -l 采用长格式来显示文件的详细信息
    • -R 若目录中及子目录中有文件,就列出所有文件
  • cat :用于查看完整的文件内容,语法格式:cat「选项」「文件列表」

    • -n 显示每一行的行号
    • -b 显示每一行的行号,不包括空行
  • more:当查看的文件内容多于一页时,可以使用 more 命令或 less 命令来分页显示文件,语法格式:more 「选项」「文件列表」

    • +number 从第 number 行开始显示内容
    • -number 指定每屏幕要显示number 行

    e.g. more +1 -10 /etc/passwd

    • -s 把重复的行压缩成一个空行
    • -p 不以卷动的方式显示每一页,而是先清除屏幕再显示文本
  • less:与 more 命令类似,但效率更高,语法格式: less「选项」「文件列表」

    • -N 显示行号
    • -pwant 在文件中查找匹配 want 的第一处位置
  • head:用于查看文件头部内容,语法格式:head「选项」「文件列表」

    • -number 显示开始的 number 行,若不使用该选项,默认10行
  • tail:用于查看文件尾部内容,语法格式:tail「选项」「文件列表」

    • -n 表示要显示文件的最后 n 行
    • -c n 输出最后的 n 个字节
  • du:查看文件或目录的大小

    • -a 对涉及到的所有文件进行统计,不只是包含的子目录
    • -h 自动以合适的单位输出文件的大小
    • -b 以字节为单位输出文件的大小
    • -k 以1024字节为单位输出文件的大小
    • -m 以兆为单位输出文件的大小
    • -c 给出总计,用于给出指定一组文件或目录使用的空间的总和
  • cp:文件的复制命令,语法命令:cp「选项」「file1」「file2」

    • -i 如果目的文件存在,覆盖之前给出提示
    • -p 保留文件的属性和修改时间
    • -r 递归复制目录
  • mv:文件的移动,语法命令:mv「选项」「file1」「file2」

    • -i 覆盖之前给出提示
    • -f 强制覆盖,不予提示

    mv 亦可以用于重命名操作

  • rm:文件或目录的删除操作,语法格式:rm「选项」「文件列表」

    • -r 递归移出目录的内容及目录本身
    • -i 删除之前给出提示
  • diff:比较两个文件的内容,语法格式:diff「file1」「file2」

    • -b 忽略行尾的空,把空白字符当作相同的字符串来处理
    • -h 快速比较
指令 文件 file1转换成 file2的指令
L1aL2,L3 在 file1第 L1行之后添加 file2的 L2行到 L3行
L1,L2cL3,L4 把 file1中的第 L1到 L2行替换成 file2中的 L3到 L4行
L1,L2dL3 删除 file1中的 L1行到
  • uniq:删除重复行

    • -c 在每行之前显示他们出现的次数
    • -d 只显示重复行
    • -u 只显示未重复的行
  • 链接文件

    • 软链接:指向的是路径,可以跨文件系统创建,删除源文件之后,软链接失效
    • 硬链接:指向的是文件索引节点,与源文件大小一致,不能跨文件系统创建,删除源文件后仍有效

    创建方式:

    • 软链接:-s 命令: ln -s 「sourcefile」「newfile」
    • 硬链接:ln 「sourcefile」「newfile」

    注意 sourcefile 为绝对路径

文件安全#

r(可读)w(可写)x(可执行)

1.txt 文件权限

-:普通文件(若 d 则为文件夹)

rw-:用户所有者

r—:同组用户

r—:其他用户

chmod命令:用于改变文件或目录的访问权限,语法格式:chmod「选项」「mode」「文件或目录」

  • -v 显示权限的变更信息
  • -R 对当前目录下所有档案与子目录进行相同的权限变更(即以递归的方式逐个变更)

权限修改方法:

  • 符号标记法修改权限:

    • u,表示“用户(user)”,即文件或目录的所有者
    • g,表示“同组(group)用户”,即与文件所有者同组的用户
    • o,表示“其他(other)用户”
    • a,表示“所有(all)用户”,它是系统默认值

    操作符

    • +,添加某个权限
    • -,取消某个权限
    • =,赋予某个权限,并取消其他权限,即设定唯一权限

    可用权限

    • r,可读
    • w,可写
    • x,可执行

    e.g. $ chmod o-rwx 1.txt

    即为修改 1.txt 文件,使得其他用户没有读、写、执行权限

    e.g. $ chmod g=r 1.txt

    即为修改1.txt 文件同组用户只有读权限

    e.g. $ chmod -R a-w test

    即为修改 test 目录下所有的文件及子目录全部去掉写权限

  • 八进制数法修改权限:

    4(可读)2(可写)1(可执行)

    e.g. $ chmod 755 1.txt

    即为修改1.txt 文件,所有者拥有所有权限,同组用户及其他用户拥有读和可执行权限

grep 和正则表达式的使用#

正则表达式

  • ^, 匹配的字符串在行首,如^xyz 匹配所有以 xyz 开头的行
  • $, 匹配的字符串在行尾,如 xyz$ 匹配所有以 xyz 结尾的行
  • \<, 匹配表达式的开始,如\<man 匹配 manic, man 等,但 batman 不匹配
  • \>, 匹配表达式的结尾,如man\>匹配 batman,man 等,但 manic 不匹配
  • [], 单个字符,如[A], 即 A 符合要求
  • [-], 范围,如[A-Z],即 A、B、C 一直到 Z 都符合要求
  • *, 匹配零个或多个字符,如 man*,匹配 manic,batman,man 等

e.g.:

$ grep ‘include’ /usr/include/stdio.h #在/usr/include/stdio.h 中查找有 include 字符串的行

$ grep -n ‘include’ /usr/include/stdio.h #显示行号

$ grep ‘^infndef’ /usr/include/stdio.h #正则表达式查找,stdio.h中 infndef 开头的行

find文件名查找#

find 「pathname」「选项」「文件或目录」

  • -name,按照文件名查找文件
  • -user,按照文件所有者查找文件
  • -group,按照文件所属组查找文件

e.g.: $ find /usr/include -name stdio.h

sort文件排序#

  • -c,检查文件是否已经按照顺序排序
  • -d,排序时,除了英文字母、数字及空格字符外,忽略其他字符
  • -f,排序时,忽略大小写字母
  • -n,按照数值的大小排序
  • -r,以反向的顺序来排序
  • -u,排序输出时,去掉重复行
  • k,排序时按照某列(区间)进行排序
  • -t,排序时栏列的分隔符

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
$ sort -t ' ' -k 1.2 companyinfo.txt    #从公司 信息英文名称的第二个字母开始进行排序
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000


$ sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt #只针对公司英文名称的第二个字母进行排序
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000

文件的压缩与解压:#

gzip 命令,语法:gzip「选项」「文件列表」

  • -d,将压缩文件解压
  • -r 递归式的查找指定目录并压缩或者解压缩其中的所有文件
  • -t,测试、检查压缩文档是否完整
  • -v ,对每个压缩和解压的文件显示文件名和压缩比

e.g.:

压缩:

$ gzip -r ztest #压缩 test 目录里所有的文件

解压:

$ gzip -rd ztest #对 test 压缩文件进行解压

tar命令:将目录压缩成一个普通文件,语法:tar「选项」「文件目录」

  • -c,创建新的档案文件
  • -r,把要存档的文件追加到档案的末尾
  • -t,列出档案文件的内容,查看已经备份了哪些文件
  • -u,更新文件,即新增文件取代原来备份的文件,如果在档案中找不到更新文件,则把它追加到档案文件的最后
  • -x ,从档案文件中释放文件
  • -f,指定是要使用的文件名,通常为必选项
  • -v,详细报告 tar 命令处理的文件信息
  • -z,用 gzip 来压缩/解压缩文件

e.g.:

备份文件:

压缩:

$ tar -cvf ztest.tar ztest #使用 tar 命令把 ztest 目录做成档案文件

解压:

$ tar -xvf ztest.tar #使用tar 命令将 ztest.tar 档案进行还原

压缩备份文件:

压缩

$ tar -cvzf ztest.tar.gz ztest #用 gzip 来压缩文件备份文件

解压:

$tar -xvzf ztest.tar.gz #解压缩压缩备份文件

文件补丁的制作#

diff 命令进行制作补丁文件:

  • -r,对目录进行递归比较
  • -u,统一输出格式
  • -N,比较目录,若一个目录或文件缺失,则视之为空文件
  • -a,将所有文件视为文本文件,逐行比较

e.g.: 有旧文件 t.old 和新文件 t.new,则为 t.old 旧文件制作补丁的命令

$ diff -u t.old t.new > t.patch

打补丁命令:patch 「选项」<「补丁文件」

  • -p0,从当前目录查找源文件
  • -p1,忽略第一层目录,从当前目录开始查找源文件
  • -E,如果发现空文件,则删除它

为 t.old 文件打补丁的命令:

$ patch -p0 <t.patch

进程#

进程类型#

  • 交互类型:由用户启动(通过桌面点击操作或在终端中运行命令),可以工作在前台或后台
  • 批处理进程:和终端没有联系,是一个进程序列(提交给 Linux 进程等待队列的进程)
  • 守护进程:也称监控进程,由 Shell 或 Linux 系统自动启动,工作在后台,用于监控特定的任务

进程启动#

  • 手动启动:
    • 前台启动:直接在终端中输入程序名(外部命令名),例如 Vim
    • 后台启动:输入程序名时加“&”,例如 Vim&
  • 调度启动:指定系统在特定的时间运行程序,可用 at、batch和 cron 调度

at 命令:在指定的精确时间执行,语法 at「选项」「时间」

  • -d:删除指定的调度作业

  • -f 文件名:从指定文件中读取执行的命令

    e.g.: at 14:00 #用于指定系统当天14点在当前用户主目录下创建空文件 test.txt

    ​ atq:用于显示队列中的作业消息

    ​ atrm 4:删除队列消息4(系统自动分配)

batch命令:在系统负载较低时候执行

$ batch #直接运行 batch,之后输入将要运行的命令

crontab 命令:用于创建周期运行的任务作业

$ crontab -e: #创建作业的命令

创建作业命令格式:

分钟 小时 日期 月份 星期 命令

e.g.: 20 10 * touch test.txt #设定每日10点20分执行一次 touch test.txt

进程管理#

  • ps:查询列举进程 ps「选项」「程序名」

    • a:显示终端上所有进程,包括其他用户的进程
    • u:按用户名和启动时间顺序来显示进程
    • x:显示无控制终端进程
    • l:长格式 显示进程
    • -e:显示所有进程
    • -f:全格式输出,即看到进程的命令行
    • -u:有效使用者相关的进程

    常用:ps aux

    其中,STAT 含义:进程目前的状态:

    • <:高优先级
    • n:低优先级
    • S:处于休眠状态
    • s:包含有子进程
    • +:位于后台的进程
  • pgrep:按名字查询进程,语法:pgrep 「选项」「程序名」

    • -l:列出程序名和进程 ID
    • -o:程序名匹配最早生成的进程
    • -n:程序名匹配最新生成的进程

    e.g.: $ pgrep -l init

  • pstree:显示进程树

  • kill:杀死进程

    使用:$ kill 「进程 ID」

用户和组#

Linux 中用户的分类:

  • root 用户:超级管理员,系统安装完毕后自动创建的账号,拥有最高权限
  • 普通用户:可以登录系统,登录后可完全访问自己的主目录内容,其他目录内容权限受限
  • 虚拟用户:不可以登录系统,只为系统管理方便而添加的用户,由系统自身拥有,如 daemon、ftp、mail 等

用户组:#

概念:用户组(简称组),是具有相同特征(例如相同的权限)的用户的集合体

属性:

  • 组名:用来标识组的名字,可以是字母、数字组成的字符串
  • 组 ID:用来标识组的数字

用户和组之间的对应关系:

  • 一对一
  • 一对多
  • 多对一
  • 多对多

用户和组的管理#

  • useradd 命令,创建用户,语法:useradd「选项」「用户名」

    • -c「注释性描述」,指定一段注释性描述
    • -d「用户主目录」,指定用户主目录,如果次目录不存在则同时使用-m 选项可创建主目录
    • -g「组名」,指定用户所属的组
    • -G「组名」,指定附属组
    • -s「Shell」,指定用户登录的 Shell

    e.g.: $ sudo useradd -d /home/test -m test

  • userdel命令,删除用户

    e.g.: $ sudo userdel -r test

  • usermod命令,修改用户账号属性,语法:usermod「选项」「用户名」

    • -c「注释性描述」,指定一段注释性描述
    • -d「用户主目录」,指定用户主目录
    • -g「组名」,指定用户所属的组
    • -G「组名」,指定附属组
    • -s「Shell」,指定用户登录的 Shell
  • passwd 命令,指定或修改用户帐号的口令

    • -l,锁定口令或禁用帐号
    • -u,口令解锁
    • -d,使账号无口令
    • -f,强迫用户下次登录时修改口令
    • -e,设置用户自动过期并自动禁用的时间
    • -w,设置用户用户密码过期前被警告修改密码的天数
  • groupadd 命令,语法:groupadd「组名」
  • groupdel 命令,语法:groupdel「组名」

系统相关文件

/etc/passwd

用户帐号文件,存放账号的一些信息,被”:”进行了间隔成7个域:

用户名:口令:用户ID:组 ID:用户全名或描述:登录目录:登录 Shell

/etc/shadow

用户的口令文件,存放已经加密的用户口令,每一行一个用户信息,被”:”分为9个域

/etc/group

组账号文件,每一行存放一个组账号信息,用”:”分割成4个域:

组名:组口令:组 ID:组成员列表

/etc/sudoers

执行 sudo 命令需要通过 /etc/sudoers文件进行授权,修改时用 visudo 工具进行编辑,此工具自动检查语法错误。

  • # 为注释

语法格式:适用对象 适用主机 = (执行身份)命令列表

  • 适用对象:可以使用 sudo 命令的用户,如果是组,则需要以“%”开头
  • 使用主机:可以使用 sudo 命令的主机,ALL 代表所有主机
  • 执行身份:括号中,规定“使用对象”以何种身份执行命令,如 root,ALL 表示所有用户
  • 命令列表:用逗号隔开的命令,命令要求使用全路径名,如/usr/sbin/useradd,ALL 表示所有命令

重定向#

命令 > 文件 #将命令的执行结果送至指定文件中,若存在则覆盖

命令 >> 文件 #将执行结果追加到指定文件中

  • 输入重定向,输入重定向用小于号“<”表示,它用来断开键盘和“命令”的标准输入之间的关联,然后将输入文件关联到标准输入。如果命令从标准输入中读取输入,这个输入就来自输入文件,而不是和命令相关的键盘。其语法格式:「命令」< 「文件」

  • 错误输出重定向,标准输入、标准输出、错误输出的文件描述分别是0、1、2.

    e.g.:

    $ cat a.c 2> error.txt

管道#

概念:Linux 系统允许通过管道操作将一条命令的输出作为另一条命令的标准输入。管道的操作符是一个“|”。简单的说,利用管道符“|”将两个命令分开,管道符左边命令的输出就会作为管道符右边命令的输入。多个管道符则依次类推

e.g.:
管道符也可以同重定向联系到一起

e.g.:

$ ls /usr/include | grep ‘^lib’ > file1.txt

Shell编程#

概述:#

  • (环境)shell 脚本程序是由 shell 环境解释执行的
  • (解释器执行)shell 脚本不需要编译、链接及生成可执行文件,直接由解释器解释执行
  • (需执行权限)执行 shell 程序时,shell 脚本文件需要具有可执行的权限
  • (可使用复杂结构)shell 脚本可以使用变量、控制语句等比较复杂的结构
  • (顺序性)shell 脚本从上而下进行执行

创建 shell 脚本#

创建shell 脚本通常使用”.sh”结尾,但也可以不实用扩展名,但为了方便识别,建议 Bash 脚本文件以 sh 结尾

  • 指定调用 shell:

    shell 脚本的第一行通常为”#!/bin/bash”,该行用于告诉系统应该使用何种 shell 来执行脚本,此例为使用 Bash

  • 脚本注释:shell 脚本注释通常使用”#”进行注释

  • 退出行:shell 中通常在最后一行写”exit 0”,使用它来结束脚本。

    exit命令用来结束脚本,像 C 语言一样,该命令会返回一个值来传递给父进程,父进程会酌情使用该值。一般情况,成功则返回0,非0表示一个错误码

  • 脚本的可执行性

    执行 shell 脚本,需要拥有其文件的可执行权限。

    通常为使用:”chmod u+x *.sh” 对脚本添加可执行权限

语法#

  • 变量特点:

    • (不需要声明)使用变量之前不需要声明变量,而是通过使用变量(例如给变量赋值)来创建
    • (默认变量为字符串)默认情况下,所有变量都是作为字符串进行存储
    • 变量区分大小写
    • 通过在变量之前加一个$符号来访问它的内容

    注意:给变量进行赋值时,例如 var=value,var 为要创建的变量名,value 为要赋予变量的值,=左右不能有空格

  • echo 命令:其作用为显示一行文本。

    echo 「选项」「字符串」

    $ echo -n “hello” (其中-n 指示 echo 命令不输出行尾的换行符)

  • read 命令:用于将用户的输入赋值给一个变量

  • 引号的使用:

    一般情况下,shell 脚本中的参数以空白字符隔开(例如一个空格、一个制表符或者一个换行符)。如果一个参数中包含一个或多个空白字符,必须给参数加上引号

    双引号与单引号区别:

    “$x”:程序将会把变量替换成它的值

    ‘$x’ : 程序将不会发生替换行为

    1
    2
    3
    4
    5
    #!/bin/bash
    x=hello
    echo x
    echo "$x"
    echo '$x'

    输出为:

    >hello

    hello

    $x

  • 条件:

    • if test -f fred.c

      then

      fi

      (这是 test 命令与 if 判断,用于判断一个文件是否存在)

    • if [ -f fred.c ]

      then

      fi

      注意:”[“ ,”]”和其他被检查的条件之间必须要留有空格

    一些条件类型:

    算数比较:

    • expression1 -eq expression2:比较两式相等则结果为真
    • expression1 -nq expression2:比较两式不相等则结果为真
    • expression1 -gt expression2: 1大于2则为真
    • expression1 -ge expression2: 1大于等于2则为真
    • expression1 -lt expression2: 1小于2则为真
    • expression1 -le expression2: 1小于等于2则为真

    逻辑比较:

    • !expression:非运算,取非后值为真则结果为真
    • expression1 -a expression2:与运算,同为真则为真
    • expression1 -o expression2:或运算,有一个为真则为真

    文件条件测试:

    • -d file:文件为一个目录则结果为真
    • -e file:文件存在则为真,-e 选项为不可移植,所以通常使用 -f 选项
    • -f file:文件是一个普通文件则结果为真
    • -r file:文件可读则结果为真
    • -s file:文件大小不为0则结果为真
    • -w file:文件可写则为真
    • -x file:文件可执行则为真
  • if 条件1

    then

    ​ 语句

    elif 条件2

    then

    ​ 语句2

    else

    ​ 语句3

    fi

  • for 语句:

    for 变量 in 集合

    do

    ​ 语句

    done

  • while 语句:

    while 条件

    do

    ​ 语句

    done

    在 while 语句中,可以用 break 命令跳出循环

  • until 语句:与 while 语句不通之处在于,循环至少要执行一次

    until 条件

    do

    ​ 语句

    done

  • break 语句:用于 for 循环和 while 循环或 until 循环跳出循环

  • case 语句:

    case 变量 in

    ​ pattern [|pattern ]…) statements;;

    ​ pattern [|pattern ]…) statements;;

    esac

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    echo "Is now morning"
    read timeofnow
    case $timeofnow in
    yes) echo "good morning";;
    y|n) echo "answer error";;
    no) echo "good afternoon";;
    *) echo "good bye"
    esac

    exit 0

网络操作#

Samba 服务器配置过程和特点#

Samba 是在 Linux 和 Unix 系统上实现 SMB 协议(实现文件共享)的一个免费软件,由服务器及客户端程序组成。

Samba 服务器端提供以下功能:

  • 提供共享文件目录

  • 提供 Samba 客户端访问时所需要的账户(用户和密码)

  • 对客户端的访问进行验证和权限管理(读、写、可视)

Samba 服务器通过 SMB 协议与服务端通信,提供以下功能:

  • Samba 服务登陆界面

  • 基于本机系统的 Samba 共享目录操作界面

特点: Samba 服务器既可以是 Linux 系统,也可以是 Windows 系统。

安装Samba:

Ubuntu 命令行安装:

1
2
>$ sudo apt-get update
>$ sudo apt-get install samba

配置 Samba:

使用“system-config-samba”程序实现 Samba 配置

  • 创建用户:

    • 点击 Ubuntu 面板菜单“系统->系统管理->用户和组”

    • 点击添加用户,输入当前用户密码进行授权

    • 在弹出的”创建新用户“对话框中,输入新的用户名称,并设置好密码

  • 创建需要共享的文件目录

1
2
>$ cd ~
>$ mkdir smb_share
  • 启动 Samba 配置程序

在终端输入以下命令进行启动 Samba 配置程序(或者点击桌面菜单“系统->系统管理->Samba”)

1
>$ sudo system-config-samba
  • 设置 Samba 用户

    • 在“Samba 服务器配置”窗口中点击“首选项”菜单,选择“Samba 用户”菜单选项,打开“Samba 用户”对话框

    • 点击“添加用户”按钮,在“创建新 Samba 用户”对话框中的“UNIX 用户名“组合框中选择前面创建的”Share“用户,在“Windows 用户名”编辑框中输入 Windows 用户名访问 Samba 服务时需要输入的用户名(可与 UNIX 用户名相同)

    • 输入访问 Samba 的密码

  • 添加 Samba 共享目录

    • 点击“添加 Samba 共享”按钮,在弹出的对话框中,设置共享目录为前面创建的“smb_share”目录,并且选中”可擦写“和”显示“选项

    • 点击“创建 Samba 共享”对话框中的“访问”选项卡,进行访问共享目录的用户设置。

  • 重启 Samba 服务

1
>$ sudo /etc/init.d/smbd restart

使用 Samba 服务

  • 从 Ubuntu 机器进行访问

    • 首先确定 Samba 文件服务器的 IP 地址,输入以下命令可进行查看 IP 地址

      1
      >$ ipconifg
    • 打开 “连接到服务器”窗口

    • 进行参数输入,“服务类型”组合框中选择 “Windows 共享”,“服务器”编辑框中输入 Samba 服务器的 IP 地址,“文件夹” 编辑框中输入上例中创建的共享目录名“smb_share”

    • 输入 Samba 访问密码

  • 从 Windows 机器进行访问

    • 连接到 Samba 服务器,点击 Windows ”开始“ 菜单中的 ”运行“ 框,并输入”\\Samba 服务器 IP “,然后点击确定

    • 访问 Samba 服务器,进行完上面的步骤后会出现一个窗口显示服务器共享的 Samba 目录

FTP 服务#

FTP 与 Samba 服务类似,分为客户端和服务端。FTP既可以用于局域网,也可以用于 Internet,涉及“上传”和“下载”两个概念

vsftpd 是一款在 Linux 上使用的、流行的 FTP 服务器程序

安装vsftpd

  • 可以选择用 Ubuntu 自带的包管理工具,进行搜索 “vsftpd”,进行商店式的安装

FTP简单使用

  • 打开 Windows 命令行程序(“开始”->“运行”->输入”cmd“)

  • 输入 ftp 命令登陆到服务器,在命令行中输入服务器端的 IP

1
ftp 192.168.xxx.xxx
  • 输入 FTP 服务的用户名和密码即可登陆成功

  • 查看 FTP 服务器上的文件,可使用 ls 命令进行查看

  • 下载文件,使用 get 命令进行查看。具体格式:get file1 file2

    • file1: FTP 服务器上要被下载的文件,允许使用带有路径的文件名

    • file2: 下载到本机的储存位置,允许带有路径的文件名

  • 关闭 FTP 客户端,输入 bye 即可

配置 vsftpd

vsftpd 的配置文件为:/etc/vsftpd.conf

在服务器端命令行输入:

1
>$ sudo gedit /etc/vsftpd.conf

常用的配置有:

  • 匿名支持
1
2
3
4
5
anonymous_enable=YEs
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_root=/var/ftp
  • 用户权限配置
1
2
3
write_enable=NO
download_enable=YES
dirlist_enable=YES
1
2
3
可写为否
可下载为允许
可以进行 ls 列表查看为允许
  • 系统用户常规配置
1
2
3
local_root=/home/test
local_umask=022
chmod_enable=NO
1
2
用户登录后直接进入的目录/home/test
通过八进制数值通过权限掩码控制"系统用户"上传文件所具有的权限
  • 系统用户列表配置

顾名思义就是通过“系统用户列表文件”进行控制哪些用户可以登陆到 FTP 服务器。

编辑/etc/vsftpd.userlist 文件

1
2
test1
test2

然后在/etc/vsftpd.conf 文件中增加或修改使能“系统用户列表文件”

1
2
3
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.userlist
  • 系统用户根目录配置

为了安全性的考虑,vsftpd 可以进行限制用户访问 FTP 服务器的其他目录

首先建立一个“根目录用户列表文件”/etc/vsftpd.chrootlist

1
2
test1
test2

然后修改或者增加 /etc/vsftpd.conf 文件

1
2
3
chroot_list_enable=YES
chroot_local_user=NO
chroot_list_file=/etc/vsftpd.chroot_list
  • 启动和停止 vsftpd

在 Ubuntu 上,当修改系统文件后或者一些其他需要的情况下,需要重启 vsftpd

停止:

1
>$ sudo service vsftpd stop

启动:

1
>$ sudo service vsftpd start

重启:

1
>$ sudo service vsftpd restart

查看 vsftpd 的状态命令

1
>$ sudo service vsftpd status

NFS 服务#

安装

  • 可使用 Ubuntu 自带的包管理工具,进行商店式的安装

  • 或者使用命令进行安装:

1
>$ apt-get install nfs-kernel-server

在服务器端,配置 nfs 只需要修改 /etc/exports 文件中对于 nfs 允许挂载的目录及权限进行定义配置

安装完成 nfs 后,使用 gedit 或者 vim 打开 /etc/exports 文件进行修改

格式如下:

1
2
3
4
<共享目录> <主机名或者 IP ([参数1,参数2,...])>
例如:
/home/dh/work *(ro,root_squash)
将服务器端 /home/dh/work进行共享,允许网络中的机器进行只读访问,当登陆用户是 root 时,自动映射成 anonymous 权限
  • 重启 nfs 服务

nfs 安装完毕后,需要服务器端进行配置编辑 /etc/exports 文件,然后再进行 nfs 服务重启

重启命令:

1
>$ sudo /etc/init.d/nfs-kernel-server restart
  • mount 挂载

挂载命令:

1
2
3
4
>$ sudo mount <IP:dir1> <dir2>
IP:对应 NFS 服务器端的 IP 地址
dir1:NFS服务器上,nfs配置下的可共享目录
dir2:要挂载到本机的目录

卸载命令:

1
2
>$ sudo mount <dir>
dir:本机中挂载的目录

Samba、FTP、NFS 比较#

  • Samba 主要用于局域网中 Windows 和 Linux 系统之间的文件共享

  • FTP 主要用于 Internet 上文件的上传和下载

  • NFS 主要用于局域网中 Linux 系统之间的文件共享

CATALOG
  1. 1. Linux#
    1. 1.1. 概述:#
    2. 1.2. 基本操作#
    3. 1.3. 文件系统#
    4. 1.4. 文件安全#
    5. 1.5. grep 和正则表达式的使用#
    6. 1.6. find文件名查找#
    7. 1.7. sort文件排序#
    8. 1.8. 文件的压缩与解压:#
    9. 1.9. 文件补丁的制作#
    10. 1.10. 进程#
      1. 1.10.1. 进程类型#
      2. 1.10.2. 进程启动#
      3. 1.10.3. 进程管理#
    11. 1.11. 用户和组#
      1. 1.11.1. 用户组:#
      2. 1.11.2. 用户和组的管理#
    12. 1.12. 重定向#
    13. 1.13. 管道#
    14. 1.14. Shell编程#
      1. 1.14.1. 概述:#
      2. 1.14.2. 创建 shell 脚本#
      3. 1.14.3. 语法#
    15. 1.15. 网络操作#
      1. 1.15.0.1. Samba 服务器配置过程和特点#
      2. 1.15.0.2. FTP 服务#
      3. 1.15.0.3. NFS 服务#
      4. 1.15.0.4. Samba、FTP、NFS 比较#