一、Unix 操作系统基础

1、shell

shell 是内核与用户之间的接口,是一个交互的命令解释器

2、unix 目录组织

  • 在 unix 中,一切都是文件,文件组织成目录,目录是一种组织和控制文件访问的很好的方式,用户可以为目录设置权限以允许其他人访问的文件或只允许自己访问
  • 文件类型:
    1、普通文件
    2、目录文件
    3、字符设备文件
    4、块设备文件

二、Unix 基本命令

\$提示符是 bourne shell、korn shell、posix shell 的标准提示符
%提示符通常是 c shell 的提示符
“#”提示符一般是为系统管理员保留的
用分号分割一行中两个命令

1、几种命令

  • man命令用来查看帮助手册man 4 passwd用来查看 passwd 的手册的第四节的内容
  • who命令报告有哪些用户已经登陆系统,每一个用户连接的终端和登陆时间的信息。who am i报告本用户的用户名和端口信息。whoami命令报告系统与本地终端关联的用户吗
  • write命令向当前登陆到同一个系统的用户的终端发送信息并显示,实现了通过终端的交互对话。
  • echo命令用于向屏幕上打印信息
    ~双引号~ :可引用除了字符\$、`、\外的任意字符或字符串
    ~单引号~ :shell 会忽略任何引用值,即屏蔽单引号内的特殊字符的原本含义。
    ~反引号~ :shell 认为反引号中的内容是一个系统命令
  • date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记
1
2
date +%Y%m%d
20184012/23/18
  • passwd命令为你的账户设置密码
  • uname查看当前系统的版本号

2、命令语法

  • 通配符
    “?”表示任意单个字符
    “*”表示任何字符
    “[]”表示括号中的任意一个字符
  • 重定向字符
    标准输入: <
    标准输出: > >>在原来文件内容的基础上附加
    标准错误输出:2>
  • 命令行选项
    用一个破折线定义命令的不同形式
  • 管道符
    “|” 完成两程序的连接,例如ps -ef | more
    常用于过滤、修改或维护命令的输出
  • 后台处理
    将任务放在后台处理,例如 “&”

3、文件系统目录

文件通常是数据的容器,而目录是文件或者其他目录的容器。

  • /opt 这个目录会用来存放应用程序和产品
  • /usr/bin 包含的基础的 unix 系统操作和文件处理的命令
  • /usr/lib 包含应用程序使用的文档和共享的库
  • /usr/local/bin 存放本地开发的程序的工具(/usr/contrib/bin 存放公用的)
  • /etc 系统配置文件
  • /stand/vmunix 存放系统内核文件
  • /tmp 通常作为操作系统的一个临时空间
  • /dev 存放可以被连接到系统硬件设备的文件,通常被叫做“设备文件”

4、文件权限

drwxr-xr-x第一位 l 软连接 d 目录 b 块文件 c 字符 -都不是 ;后 9 位每三位分别是 user、group、other 的权限:read、write、execute

5、文件系统命令

  • pwd 查看当前目录
  • ls 查看目录下文件名(ll 会显示详细信息)
    -a 显示所有文件
    -d 列出文件描述
    -l 每一个文件描述属性的长列表
    -F 在每个目录后面加反斜杠/,在可执行文件后面加星号*
    -R 递归地列出给出的目录和所有子目录中的文件
  • cd 进入目录
  • find 找到文件
  • mkdir 创建目录
  • rmdir 删除目录
  • more 一次一屏的显示
  • cp 复制文件 cp file1 fiel2
    -i 会在复制时向你确认是否覆盖旧文件
    -r 选项可复制目录
    -p 复制时保留权限
  • mv 移动或者给文件重命名
  • touch 创建新文件
    touch 命令有以下选项:
    -a time 更改存取(Access)时间为指定的时间
    -m time 更改修改(Modify)时间为指定的时间
    -t time 使用指定时间(time)来代替当前时间。
    -c 如果文件不存在,不创建新文件。
  • find 路径 -name 文件名
  • cat 命令主要有三大功能: 1.一次显示整个文件。
    $ cat filename 2.从键盘创建一个文件。
    $ cat > filename
    只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件。
    $cat file1 file2 > file
  • file 命令 查看文件类型
  • grep 搜索文件内容
  • 统计文本 wc
    统计行数、字数、字符数
    wc -[l,w,c] filename
  • whereis 查找命令
    -b 仅搜索二进制文件
    -m 仅搜索帮助文件
    -s 仅搜索源代码

6、用户和用户组管理

有关用户账号的文件:

  • passwd 文件:每一个合法用户的账号对应该文件中的一行记录
    (登陆名:密码:用户标志号:组标志号:用户的全名或其他描述:主目录:登陆 shell)
  • shadow 文件: /etc/shadow 文件存放用户账户的加密密码信息和密码的有效期。
  • group 文件:/etc/group 存放系统中的所有组
    (组名:密码:组标志号:用户列表)
  • 使用 useradd 和 groupadd 命令来添加用户和组;
    修改组属性:groupmod [-g <新 GID> [-o]][-n <新组名>] <现有组名>

三、管理文件

1、lp 命令

  • lp 命令让用户将文件送往打印队列来打印文件。每个使用 lp 提交的打印请求都会被分配一个唯一的任务标识号(称为一个请求 ID)。
    lp 命令的语法是:
    lp [-d dest][-n number] [-o option] –t title [-w][file….]
    一些 lp 命令的选项:
    -n number 文件打印的重复的份数(默认是 1)。
    -d dest 打印请求会被送到的打印机的名字。
    -t title 在打印输出的标题页中打印标题。
    -o option 指定你的打印机的具体的选项,例如字体,间距,灰度等等
    -w 在文件打印完成以后,写一条信息到用户的终端。
    lpstat 报告已经送往打印机队列的打印请求

2、cancel 命令

cancel id [id …] 取消一个有 lp 命令产生的打印机任务
cannel printer [ printer…] 取消当前在指定打印机上的打印任务

3、ln 命令

ln file1 file2

  • 硬链接文件和原文件指向同样的数据,就像克隆一样,inode 号也相同,当删除原文件时,硬链接文件仍然存在有效。但硬链接文件不同于文件的复制,并没有复制原文件数据。简单说,硬链接就是一个类似于别名的概念。当原来的名字没有了,别名照样可以使用。
    硬链接指通过索引节点来进行的连接
    硬链接不可以跨文件系统,不能为目录建硬链接
    看不出硬链接和文件的区别,属性上都用-表示
  • 软链接和 windows 系统的快捷方式含义一样。软链接和原文件的 inode 不同,该文件的内容是指向原文件的路径信息。软链接就好像是指针一样。而硬链接就是引用。
    软链接可以跨文件系统
    属性上用 l 表示

4、文件的权限管理

  • chmod 改变文件的存取权限
  • chown 改变一个文件的属主,只有文件的属主和 root 才能更改一个文件的所有权
  • umask 改变默认的文件存取权限
  • chgrp 改变一个文件的组
  • su 转换你的用户的身份
  • newgrp 转换你的组的身份

四、定制工作环境

  • alias 为命令设置别名alias dir='ls'
  • tab 文件名自动补全
  • history 历史命令,在默认方式下,bash 使用用户主目录下面的文件“.bash_history”来保存历史命令
    改变存放历史命令的文件
    # HISTFILE=“/home/mengqc/.myhistory”
    重新设定能够保留的命令个数
    # HISTSIZE=600

1、环境变量

  • 使用env命令来查看用户环境变量
    注意,多数环境变量,都需要export才起作用
    例如 # export $PATH
  • 与环境变量相关的全局配置文件
    /etc/bashrc 全局配置
    /etc/profile 登录 shell 的全局配置
  • 个人配置文件,每个登录用户的 home 目录下有:
    ~/.bshrc
    ~/.bash_profile
    ~/.cshrc

五、vi 编辑器

1、开始指令

  • vi +n filename 进入 vi 并且由文件的第几行开始。
  • vi +filename 进入 vi 并且由文件的最后一行开始。
  • vi + /word filename 进入 vi 并且由文件的 word 这个字开始。
  • vi filename(s) 进入 vi 并且将各指定文件列入名单内,第一个文件先读入。(多文件)
  • vedit 进入 vi 并且在输入方式时会在状态行显示“INSERT MODE”。

2、加数据指令

  • i 在关标位置开始插入字符,结束时候按 ESC 键。
  • I 在光标所在行首开始加字,结束时按 ESC 键。
  • a 在光标位置后开始加字,结束时按 ESC 键。
  • A 在光标所在行尾部开始加字,结束时按 ESC 键。
  • o 在光标所在行下插入一空白行并开始加字。
  • O 在光标所在行上插入一空白行并开始加字。

3、删除指令

  • x 删除光标处字符。
  • dw 删除从光标位置开始到单词结束处的字符。
  • dd 删除当前一整行。
  • d0 删除从行首到光标位置的字符。
  • d\$ 或 D 删除从光标位置到行尾的字符。
  • nx 删除由光标位置起始的 n 个字符(含光标位置)
  • nX 删除由光标位置起始的 n 个字符(不含光标位置)。
  • ndw 删除光标位置开始的 n 个字符组(word)。
  • ndd 将光标位置起始的 n 行(整行)删除。
  • :start,endd 删除文件的第 start 到 end 行。

4、光标移动

h 往左移 1 位
l 或者 spacebar 往右移 1 位
k 向上移 1 行
j 向下移 1 行
0 移到一行的开始
\$ 移到一行的末尾
[ 移到文件开始位置
] 移到文件结束位置
G 移到文件的最后一行
nG 或者:n 移到文件的第 n 行
Ctrl + u 屏幕上卷半屏
Ctrl + d 屏幕下卷半屏
Ctrl + b 屏幕上卷一屏
Ctrl + f 屏幕下卷一屏

5、查找与替换

r 修改光标所指的字符
R 从光标位置开始修改,结束时按 ESC 键
/text 从光标位置往下找字串 text
?text 从光标位置往上找字串 text
n 继续找下一个字串(在输入上面的查找指令之后使用)
[range]s/old_string/new_string[ /option ] 将指定范围内的字符处替换为新串

6、复制及移动文本

nY 复制光标所在位置开始的 n 行数据
p 将数据粘贴在光标的下一行
P 将数据粘贴在光标的上一行
:first,last co dest 将 first 到 last 行的数据复制到目标行(dest)下面
:Start,end   m dest 将 start 到 end 行的数据移动到目标行(dest)下。   
:r filename 将指定文件的内容读入光标所在行下。

六、shell 编程基础

1、示例

1
2
3
4
5
6
7
8
#! /bin/bash
# create a group of files
for((i=1;i<=10;i++))
do
touch tt$i
echo this is tt$i >> tt$i
done
ls -l tt*

2、执行 shell 脚本的基本方法

  • source test.sh
  • sh test.sh
1
2
* chmod 755 test.sh
./test.sh

3、变量

  • 定义变量
    变量名=字符串 【注意,等号左右无空格】
  • 如果变量值须出现在长字符串的开头或者中间,为了使变量名与其后的字符区分开,避免 shell 把它与其它字符混在一起视为一个新变量,则应该用花括号将该变量名括起来。
  • 命令替换除了反引号的另一种形势: $(pwd)
  • 声明一个数组:declare -a 数组名
    定义数组: a=(1 2 3 4 .... n)其中,各个值之间以空格分开。
    读取数组元素值:echo ${数组名[下标]}
  • 若没有给出数组元素的下标,则数组名表示下标为 0 的数组元素
  • 逻辑操作符 && ||
    cmd1 && cmd2 仅当命令 cmd1 执行成功时,才会执行命令 cmd2。
    cmd1 || cmd2 仅当命令 cmd1 执行失败时,才会执行命令 cmd2。
  • 位置参数 0,1,2,……
    命令行实参与脚本中位置变量的对应关系如下所示:
    exam1 m1 m2 m3 m4
    $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
    引用它们的方式依次是$0, $1, $2, …, $9, ${10}, ${11}等。
    其中,\$0 始终表示命令名或 shell 脚本名。
    使用 set 命令为位置参数赋值
  • 特殊变量
    $# 表示命令行上实际参数的个数(不包括shell程序名本身)
    $ 表示命令行实际给出的所有实参字符串
    \$@ 表示命令行实际给出的所有实参字符串
    注意:
    \$
    和$@基本功能相同,但是当两侧有双引号时则存在差别!
    即:
    ① “$*”把实际给出的所有实参当作一个整体,即一个字符串。
    ② “\$@”把实际给出的每个实参当作一个字符串,即多个字符串。

4、算术运算

1
2
3
4
5
6
7
8
9
10
11
12
13
a=4;b=3
((c=a+b))
echo $c
--------------
a=4;b=3
let "c=b-a"
echo $c
--------------
expr 4 + 3
7
a=`expr 4 + 3`
echo $a
7

在算术表达式中,变量名可以直接使用,不需要加\$
使用 expr 命令进行算术运算,运算符两侧必须有空格
-f 是否是文件
-d 是否是目录

5、函数

  • 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
ave()
{
sum=0;
for((i=0;i<=n;i++))
do
((sum=sum+a[i]))
done
((sum=sum/n))
echo $sun
}
n=5
a=(90 82 84 72 61)
ave

七、系统管理

1、前、后台执行

  • 命令行末尾,加 & 字符,作业放到后台执行
  • 组合键【ctrl -z】:把正在前台执行的作业挂起,并置于后台
  • fg 命令:fg <作业号>把后台作业调到前台执行
  • bg 命令:bg <作业号>让后台挂起的作业继续在后台执行
  • jobs 命令: 了解当前作业情况
  • nohup 命令 用户退出后作业继续执行

2、查看进程

ps 命令查看进程,常用格式:

  • ps -ef
  • ps aux
  • ps -ef | grep
    grep: -n, -v, -iand -c.
    -c显示每个文件中匹配的行数
    -i不分大小写
    -n显示匹配行的行号
    -v显示不匹配的行(匹配的行不显示)
    例如 ps –ef|grep -i python|grep –v grep

3、有过滤作用的命令

  • head –n 20 /etc/passwd
  • tail –n 20 /etc/passwd
  • tail –f /log/xxx.log 查看正在改变的日志
  • more
  • less
  • wc 统计行、字、字符等
  • 既显示结果,又存入文件,用 tee 实现
  • ls /home | tee dir.list
    -

4、备份与压缩

  • tar
    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有 gzip 属性的
-j:有 bz2 属性的
-Z:有 compress 属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f 是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

  • gzip
  • gunzip
  • unzip

5、网络命令

  • ping 命令
    ping[选项] 目的地
  • ifconfig 用来配置一个网络接口
1
2
3
4
5
6
7
8
9
* 示例:
## 显示所有当前活动的网络接口的情况。
ifconfig
## 显示指定网络接口eth0的情况。
ifconfig eth0
## 配置一个以太网接口,以给定IP地址定义这个网络接口的地址。同时,ifconfig命令自动地创建一个标准的广播地址和子网掩码。
ifconfig eth0 211.68.38.133
## 指定以太网卡eth0的IP地址为211.68.38.133,广播地址为211.68.38.255,子网掩码为255.255.255.0。
ifconfig eth0 211.68.38.133 broadcast 211.68.38.255 netmask 255.255.255.0
  • netstat 命令 统计 TCP/IP 网络协议的连接。
    netstat 显示当前已经创建的连接
    netstat -nr 将显示路由表
  • route 命令
    route 命令为数据传递所需的网络连接配置路由信息。