linux基础知识大纲

1 Linux 操作系统概述
  1. Linux 操作系统的发展过程、创始人、 GNU 计划等
源于 UNIX
得益于 GNU 计划;
借助 internet 得以壮大;
推动了自由软件、开源软件的发展
1991 年底, Limus Torvalds 公开了 Linux 内核源码 0.02
GNU 1984 年由 RMS(Richard Mathew Stallman) 发起,目的是开发一整套与 UNIX 兼容的自由免费软件。
Linux 目前的应用:主要应用在服务器领域;在手机、家电等嵌入系统方面, Linux 有很好的表现;在桌面领域的扩张也非常快
  1. Linux 操作系统的组成,内核的含义
组成
Linux 内核
一些 GNU 程序库和工具
命令行 Shell
图形界面的 X windows 系统和相应的桌面环境,如 KDE GNOME
办公套件、编译器、文本编辑器等工具和应用软件。
内核含义
只是基本的操作系统管理功能,不能直接当操作系统使用,还必须有 Shell 和各类系统软件和应用软件
  1. 了解 Linux 操作系统的特点,优缺点以及 Linux 操作系统的发行版本
Linux 特点 :
免费,良好的移植性( c 语言写成,编译到不同硬件平台上相对方便)
支持多用户,多处理机
可完全定制
丰富的网络功能( TCP\IP 起源自 unix ,所以 linux 天然就有网络上的优势)
出色的安全稳定性
强大的技术支持(开源社区和商业技术支持并存)
良好的兼容

发行版本 :
Redhat 企业版本
Fedora
CentOS
Debian
Ubuntu
Linux Mint
Mandriva
Suse
红旗 Linux
2 shell 的基本应用
1 )字符界面、图像界面,以及各个终端界面之间的切换
         Ctrl Alt Fn
2 )超级用户、普通用户的理解
root 用户:超级权限者,有且只有一个可以做任何操作。
普通用户:可以创建许多普通用户,并为其指定相应的权限,使其有限地使用 Linux 系统。
  1. 什么是 shell ,常见的 shelll 类型,默认的 shell
shell C 语言编写的一个命令解释程序,解释执行用户命令或脚本程序。
类型: sh csh bash ksh dash rbash
默认 shell bash
  1. Linux 树形目录的含义
逻辑上只有一个最高级别的根目录“ / , 物理上内容可分布在多个磁盘分区上。
  • Linux 的目录结构中主要的目录有:
    • / :根目录,最特殊的目录,所有目录的起点;
    • /home :除 root 以外的用户主目录都在这里;
    • ~ :指代每个用户的主目录( /home/ 用户名);
    • /bin :存放 Linux 的常用命令;
    • /boot :内核和启动文件所在目录;
    • /etc :系统多部分配置文件所在之处;
    • /dev :所有设备文件保存在这;
    • /mnt: 这个目录是空的,系统提供这个目录是让用户临时挂载别的文件系统。
    • /media: 一般用于自动挂载,系统自动挂载的光盘、 u 盘文件系统都在这下面。
    • /proc :在磁盘上实际不存在,里面的文件是动态生成的,根据执行的命令,采集系统进程运行状态等信息形成文件放在该目录下。
  1. shell 常用基本命令的使用,以及常见的基本参数
pwd 命令
用途:查看工作目录( Print Working Directory )当前工作目录

cd 目录名(或指代符号)
进入到指定的目录中,常用指代符号有:
.. ”当前目录的上一级目录,
~ ”用户的主目录
- ”上一次变更当前目录前所在的目录。

设置普通用户的权限
root 用户下 vi /etc/sudoers
su 切换到 root 用户权限
 
echo 命令
用于在终端显示字符串或变量,格式为:“ echo [ 字符串 | 变量 ]
echo 命令查看 SHELL 变量的值(前面有 $ 符号):
# echo $SHELL
看本机主机名:
# echo $HOSTNAME

date 命令
date 命令用于显示 / 设置系统的时间或日期,格式为:” date [ 选项 ] [+ 指定的格式 ] ”。

reboot 命令
用于重启系统 ( root 用户可以使用 )

wget 命令
用于使用命令行下载网络文件
格式为: wget [ 参数 ] 下载地址

find 命令
例: find /home -name “hello” -atime +5 -ok rm -f {} \;
参数: -atime: 在指定时间内被存取过的文件,小时为单位
-amin: 在指定时间内被存取过的文件,分钟为单位
-ctime: 指定时间内被更改的文件,小时为单位
-cmin: 指定时间内被更改的文件,分钟为单位
ifconfig 用于获取网卡配置与网络状态等信息
格式为    ifconfig  [ 网络设备 ]   [ 参数 ] ”。
查看本机当前的网卡配置与网络状态等信息:
# ifconfig

uname 命令用于查看系统内核版本等信息
格式为     uname [-a]
查看系统的内核名称、内核发行版、内核版本、节点名、硬件名称、硬件平台、处理器类型、操作系统等
# uname –a

who 命令
用于查看当前登入主机的用户情况,
格式为: who   [ 参数 ]

last 命令
用于查看所有系统的登入记录,
格式为: last   [ 参数 ]

看看当前登录的哪个 shell
 echo $SHELL   显示系统变量 SHELL 的值

type 命令可以准确的告诉你一个可找到的命令的类型和位置
 type ksh

exit 命令
退出到控制台终端的 login (登录)界面
退出虚拟终端,回到图形桌面

命令输入时的快捷键
tab 自动补齐命令
输入命令的几个开始字符,按 TAB 可自动补齐命令   
反斜杠“ \ ”:强制换行
快捷键 Ctrl+U :清空至行首
快捷键 Ctrl+K :清空至行尾
快捷键 Ctrl+L :清屏
快捷键 Ctrl+C :取消本次命令编辑
快捷键 Ctrl+D 发送一 exit 信号,没有那么强烈
Home :跳到行首
End :跳到行尾

清除历史命令
  • 执行: history -c
调用历史命令
  • !n :执行历史记录中的第 n 条命令
         
man open  显示的是 open(1), 即最前面 section
man 2 open        查看 open 系统调用

         top 命令
          动态监控 linux 系统状况,用于实时显示进程的状态。
         ps 命令
          提供进程过去信息的一次性快照

磁盘挂载
1 fdisk –l 查看所有挂载硬盘
3. 执行命令
mkdir /mnt/usb           自建一个空目录
mount -t vfat /dev/sdc1 /mnt/usb     执行挂载命令
mount  查看所有挂载情况
4. 可以进入目录操作 U 盘了
u 盘上建文件
cd /mnt/usb
ls
vi my.txt
i ,进入编辑,写些内容。按冒号进入末行模式,输入 wq 保存退出。
ls                            显示 U 盘文件, my 文本文件已经存在了:)
复制文件到 u
cd ~    到用户目录下新建文件后复制到 u
touch my2.txt
cp my2 /mnt/usb
5.** 卸载 **
保证所有的终端或窗口都不在 usb 目录下
umount /dev/sdc1
点掉虚拟机菜单中的可移动设备, u 盘就会转回被 windows 识别

文件管理
目录操作: ls 浏览目录; Mkdir 新建目录、 rmdir 删除目录; pwd 显示当前目录、 cd 进入目录
cp 复制文件、 mv 移动文件(重命名)、 rm 删除文件
touch 新建文件、 ln 建文件链接
输出文件内容: cat more 可向后翻页、 less 前后翻页
部分输出文件内容: cut head
查找文件: find locate
 grep (按文件内容与指定的字符串匹配查找文件,涉及正则表达式)
chmod 设置文件权限
其他: *sort wc comm diff clear 清屏、 tar 压缩包处理

进程管理
查看进程状态: ps top
进程控制: kill bg fg

用户管理
passwd 设置密码、 who 查询当前登录用户
useradd usermod userdel
groupadd groupmod groupdel
su sudo 换为 root 身份

磁盘管理
fdisk mount 挂载磁盘
df du ,查看磁盘空间

网络管理
ifconfig
ping traceroute netstat arp ftp

帮助及其他
man info
cal history

  1. 管道、别名、重定向的使用
设置别名( alias
alias [ 别名 ]=[ 需要定义别名的命令 ]
alias  ll=‘ls –al’
注意事项:
等号两端不能空格,字符串最好加引号
浏览别名 :$ alias
取消别名 :$ unalias 命令
写入配置文件:为命令取的别名在该次登录期间始终有效。若要别名在每次登录时都有效,需将 alias 命令写到初始化脚本文件中。

输入输出流的重定向
输入
获得键盘输入后写入到 testfile 中,按 ctrl+d 结束输入。
cat >testfile 
test.sh 获得输入数据,然后输出给 catfile 文件
cat >catfile
输出
> 会覆盖文件原内容; >> 则是在原内容后追加
可利用重定向快速建立文件:
 echo “hello” >testfile
0         代表 stdin 标准输入
1         代表 stdout 标准输出
2         代表 stderr 标准错误输出
  • 命令 >file    (默认为 1
输出重定向到文件 file ,终端上只会有标准错误输出。
  • 命令 2>file
错误提示重定向到文件 file ,终端上只会有标准输出。
屏蔽命令的任何输出
cp /etc/my.conf  >/dev/null  2>&1
这是一个没有实际意义的错误命令,只演示一个没有任何信息或错误提示输出的命令执行。
  • cp 命令没有目标文件 , 应该输出错误。
  • 2>&1 表示错误重定向指向标准输出。
  • >/dev/null 又使标准输出重定向到空设备,最后就是没有任何输出信息。

管道符“ |
  前一个的结果作为后一个命令的输入
 ls | head -5  (此为“横杠 5 ”不是减号 5    (head -n –(+)k 的建议用法 )
浏览当前目录下的文件信息,但只显示 前五条
找不同:
准备工作:
echo “1hello”  >>testfile
echo “2hello”  >>testfile
echo “3hello”  >>testfile
//
head –n +2 testfile  前面两条数据    等同( head –n 2 testfile
head –n -2 testfile  除了最后两条数据的所有条数据
tail -n 3 testfile  最后三行数据   等同( tail -n -3 testfile
tail -n +3 testfile  除了前三行数据的其他所有数据

压缩文件命令
tar –zxvf  a.gz
该命令将压缩包 a.gz 解压
-z 说明是解压 .GZ 类型文件
-x 说明是解压操作
-v 显示详细信息
-f 必须,表示使用归档文件

帮助命令
  • [ 命令 ] —— help
  • man [ 命令 ]
    • man   [ 选项 ]  命令名称
    • 常用选项                 说      明
    • -S            根据章节显示,一个命令可能会有很多类别,类别说明见下表
    • -f             只显示出命令的功能而不显示其中详细的说明文件
    • -w           不显示手册页,只显示将被格式化和显示的文件所在位置。
    • -a            显示所有的手册页,而不是只显示第一个。
    • -E            在每行的末尾显示 $ 符号    
    • 举例
    • 1
    • man passwd
    • man S 5 passwd
    • 2 open,kill 这种既有命令 , 又有系统调用,也可用章节限定查找的范围
    • man open      显示的是 open(1), 即最前面 section
    • man 2 open   查看 open 系统调用
  • info [ 命令 ]
  • 几个操作命令
    • q: 退出 man 状态
    • enter: 逐行阅读 man 文件
    • 空格键:逐页阅读 man 文件
    • b 键:向前翻页
    • /string: 查找 string 字符串

cal 命令
  • 语法: cal [ 参数 ] [ [ 月份 ] 年份 ]
  • 说明:显示指定月份的日历,默认为当前月份。
  • 参数说明:
    • -3     显示指定月份的前一个月、指定月份、下一个月三个月的日历
    • -m    以“星期一”为星期的起始
    • -w    在每栏下面显示星期数
    • -y      显示指定年份所有月份的日历

history
  • 语法: history [ 参数 ]
  • 说明:显示输入过的所有命令。

搭配 grep 的正则表达式
  • ∧表示开始位置, $ 表示结束位置, [a-z] 表示字符的范围,
 . 表示任意字符出现一次或更多次
  • 查看以英文字母开头, / 结束的行   
  • ls -F |grep “[a-z]./$”

file 命令
  • 语法: file [ 选项 ] [-f] 文件
  • 说明:显示指定文件的类型与编码格式。
  • 参数说明:
    • -b     以简明方式显示信息
    • -f      指定该选项后面的字符串为文件列表
    • -z      查看压缩文件内部的文件信息
    • -d     显示调试信息
-s         按照普通文件处理特殊文件(如字符设备文件
wc 命令
-c        字节
-w      word         
-l        line
  • 统计当前目录下的文件数和目录数
  • # ls -l |grep "^-"|wc l
 # ls -l |grep "^d"|wc -l

cat 命令
            将文件和标准输入设备的输入使用标准输出流输出。常被用来显示文件的内容。
cat /etc/passwd
  • 参数说明:
    • -b     对所有的非空行进行编号输出
    • -n     对所有的行进行编号输出
    • -T     将所有的“ Tab ”显示成“ ^I
    • -s      对于连续出现的多个空行,仅输出一个空行
    • -E     在每行的结束位置输出“ $

more 命令
            显示文件内容,每次显示一屏。常与其他命令结合使用:
ls - help |more
  • 注意: more 命令中按“ ENTER ”是向后移动一行,按“ SPACE ”是向后移动一页,按“ q ”退出。

less 命令
ls - help |less
            more 相似,但浏览文本时允许翻页来回看。 Less 并不在一开始就读入整个文件,因此在打开大型文件时比 vi 等文本编辑器快。

cut 命令
            截断显示文件中的内容,常用于对 /etc/ passwd 类的文件进行处理 :
  • 显示每行从开头算起 n1 n2 的文字。
cut c n1-n2 file
  • 以空格为分隔符,显示第 2 个字段
cut f 2 d file

sort 命令
          对文件内容进行排序显示:
         cat /etc/passwd 默认是按进程号排序
         sort t : ’– k3 -nr /etc/passwd
                    参数说明:
  • t 分隔符:使用分隔符隔开不同区块,默认是 tab
  • start  -end :由第 start 区块排序到 end 区块
  • n :使用纯数字排序(默认是以字母方式排序)
  • r :反向排序
  • u :相同出现的一行,只列出一次
  • -k: 按那个字段来进行排序

touch 命令
创建新文件、修改文件时间
touch newfile1
touch a t 200012301111 newfile1
  修改文件访问时间为 2000.12.30 11 11
  • 参数选项:
    • -a: 仅修改文件访问时间 access tiem
    • -m :仅修改文件修改时间 mtime
    • -c: 仅修改时间,而不建立文件
    • -d :后面可以接日期,也可以使用 date= “日期或时间”
    • -t: 后面可以接时间,格式为【 YYMMDDhhmm

mv  [ 选项 源文件或目录   目标文件或目录
  • -f   若目标文件或目录名已存在则直接覆盖(缺省参数复制文件时也是覆盖)
  • -i   覆盖前先行询问用户。
  • -u   在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
  • -v   执行时显示详细的信息。
  • -b   若需覆盖文件,则覆盖前先 backup
    • -S< 附加字尾 > ,与 -b 参数一并使用,可指定备份文件的所要附加的字尾。
-V=< 方法  与 -b 参数一并使用,可指定备份的方法。  

cp  [ 选项 源文件   目标文件
  • - a 常在拷贝目录时使用。保留链接、文件属性,并递归地拷贝目录,作用等于 dpr 选项的组合。
    • - d 拷贝时保留链接。
    • - p 把修改时间和访问权限等属性也复制到新文件
    • - r 此时目标文件必须为一个目录名。将递归复制该目录下所有的子目录和文件。( -R ,一般与 -r 等价,但递归复制特殊文件如 FIFO 文件或 /dev/zero 的时候,用 -R
  • - f 目标文件已存在的直接覆盖而不提示。
  • - i 覆盖目标文件之前给出提示需求用户确认。
- l 不作拷贝,给源文件建硬链接文件。

rm [ –参数 ] 文件或目录
默认删文件或目录时不询问确定,
  • -i  删除前先询问用户。
  • -f  强制删除。
  • -r  递归处理,将指定目录下的所有文件及子目录一并处理 ( -R)
  • -v  显示指令执行过程

tar - 主选项 [ 辅选项 ] 包名 [ 文件或者源 / 目的目录 ]
  • 主选项:必须要有
    • -c    建立新的备份文件
    • -x   从档案文件中释放文件
    • -t    列出备份文件的内容
    • -r    追加新文件到已存在的备份文件
    • -u   用新文件更新包里的文件,如果文件没有,则追加到包的最后
  • 辅选项:
    • -f 使用档案文件或设备,这个选项通常是必选的,且写在选项的最后。
    • -v 详细报告 tar 处理的文件信息。
    • -C 释放包时指定释放的位置
    • -z gnzip 压缩处理备份文件
    • -j bzip2 压缩,压缩率大于 -z
3. Shell 执行的命令分为:
  • 内置命令
例: whereis cd         没有结果,可见 cd 是内置命令
  • 外部命令(对应一个程序文件,执行该命令时,由 shell 根据路径环境变量查找到命令对应的文件,触发其执行)
例: whereis ls           可看到它是在 /bin 目录下
3 vi 的使用
1 vi 的三种工作模式以及之间的切换
Vi 有三种基本的工作模式:指令行模式、文本输入模式、行末模式。他们的相互关系如所示。
指令模式 (Command Mode 下输入   a i o 进入文本输入模式 (Input Mode)
文本输入模式 (Input Mode) 下按 ESC 进入指令模式( Command Mode
指令模式 (Command Mode )下输入 : 进入末行模式( Last line Mode
末行模式( Last line Mode )下指令错误则返回指令模式 (Command Mode
2 常用的保存、删除、复制等常见指令
         1. 复制剪切粘贴撤销
复制:
复制一行则: yy
复制三行则: 3yy ,即从当前光标 + 下两行。
复制当前光标所在的位置到行尾: y$
复制当前光标所在的位置到行首: y^
剪切:
剪切一行: dd
前切三行: 3dd, 即从当前行 + 下两行被剪切了。
剪切当前行光标所在的位置到行尾: d$
剪切当前行光标所在的位置到行首: d^
粘贴:
v 选中文本之后可以按 y 进行复制,如果按 d 就表示剪切,之后按 p 进行粘贴。
撤销与恢复:
'u' : 撤销上一个编辑操作
'ctrl + r' : 恢复,即回退前一个命令
'U' : 行撤销,撤销所有在前一个编辑行上的操作
3. 移动光标指令
移动光标普遍使用的是方向键,考虑兼容问题, vi 定义太多的方向指令,下面只是一小小部分(常用的几个):
space: 光标右移一个字符
Backspace: 光标左移一个字符
Enter: 光标下移一行
nG: 光标移至第 n 行首
n+: 光标下移 n
n-: 光标上移 n
n: 光标移至第 n 行尾 0: 光标移至当前行首
: 光标移至当前行尾
4. 插入删除指令
常用插入、删除指令如下:
i :在当前光标前插入,光标后文本向后移
a :从当前光标后插入,光标后文本后移
I :在光标所在行首插入(第一个非空白字符前)
A :从光标所在行末插入
o: 在光标所在行下面新增一行(并进入输入模式)
O: 在光标所在行上方新增一行(并进入输入模式)
x: 删除光标所在字符,等同于 [Delete] 功能键
X: 删除光标前字符,相当与 [Backspace]
dd: 删除光标所在的行
r: 修改光标所在字符
R: 替换当前字符及其后的字符,直到按 [ESC]
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
do: 删至行首
d$: 删至行尾
3 vi 常见的 3 、末行模式( Last line Mode
末行模式主要进行一些文字编辑辅助功能,比如字串搜索、替代、保存文件等操作。主要命令如下
q -----结束 Vi 程序,如果文件有过修改,先保存文件
q -----强制退出 Vi 程序
wq  -----保存修改并退出程序
set nu -----设置行号查找、替换等
/word 向光标之下搜索 word
?word 向光标之上搜索 word
4 用户和组的管理
1 /etc/passwd /etc/shadow  /etc/group  /etc/gshadow 四个文件,理解用户、组的概念,各个字段的含义等。
          用户文件: /etc/passwd
用户密码文件: /etc/shadow
用户组文件: /etc/group
用户组加密信息文件: /etc/gshadow
  • 查询系统中所有用户
    • alias alluser= cut d : -f1 /etc/passwd
  • 查看普通用户
    • alias user= cut d : -f1,6 /etc/passwd |grep /home ’或‘ grep /home /etc/passwd |cut d : -f1,6
2 如何创建删除用户(组)、设置密码等,掌握常见参数的使用
         2.1 用户管理
         passwd [ 参数 ] [ 用户名 ]   (修改用户密码)
  • -d     删除指定用户的密码
  • -l       锁定指定的用户
  • -u     解除指定用户的锁定
  • -wn  设定 n 为密码过期警告的天数
添加删除用户
只有超级用户才能新建 \ 删除用户
adduser deluser useradd userdel 更方便些
交互性好
useradd 【选项】 用户名
  • c   全名:指定用户的全称
  • 主目录:指定用户的主目录
userdel 【- r 】用户名
  • r 选项,系统不仅将删除此用户帐号,并且还将用户的主目录也一并删除
修改用户属性 ——usermod
sudo usermod g sudo 权限的组 user
  • 主要选项说明:
全名:指定用户的全称
主目录:指定用户的主目录
有效期限:指定用户帐号的有效期限
f   缓冲天数:指定口令过期后多久将关闭此帐号
组群 ID| 组群名:指定用户所属的主要组群
组群 ID| 组群名:指定用户所属的附加组群
  • usermod -G  附属组 1, 附属组 2 ..., 附属组 X   用户名
  • 为防止覆盖原来为“附属组名”,可添加 -a 参数:
    usermod -a -G  附属组名   用户名
登录 Shell :指定用户登录后启动的 Shell 类型
用户 ID :指定用户的 UID
用户名:指定用户的新名称
2.1 组管理命令
添加组账号:
  • 格式: groupadd  [-g GID]  组帐号名
组成员管理:
  • 格式: groupmod [ 选项 ]...  组帐号名
删除组帐号:
  • 格式: groupdel  组帐号名
3 文件目录的权限和归属    数子法、字符法等
chmod [- 参数 ][ 选项 ]  文件和目录列表
  • 文字设定法
$chmod o+w my.txt
$chmod ug+w,o-w my.txt
$chmod +w my.txt
$chmod R +w myfoder -R 子目录递归处理)
    • u: 所有者; g: 同组用户; o: 其他用户; a :所有用户(默认)
    • r w x (其他属性 s t u g o
  • 数字设定法
用八进制数对应顺序 rwx
777 111 111 111 rwxrwxrwx
664 110 110 100  rw-rw-r
权限掩码命令: umask
  • 查看下新建的文件或目录一般是什么权限?
    • 文件 664
    • 目录 775
  • 查看系统默认设置的权限掩码 umask, 发现普通用户和 root 不同 , 为了安全, root 掩掉的权限位多
  • 将当前目录下的所有的 C 语言程序文件拷贝至 Finished 子目录中
    • cp *.c Finished
  • 删除所有自建的测试文件(命名风格要统一才方便批量处理)
    • rm test*
    • rm r dir*
4 修改文件的权限、归属
5 )特殊权限不考
5 shell 编程
1 shell 脚本的执行和基本组成
          一般以 .sh 为文件后缀。
常见的两种执行方式
文件全路径名
          要求文件必须有执行权限,如 chmod 755 run.sh
./run.sh     执行当前目录下的 run.sh 文件
sh 文件全路径名
         sh 目录 /run.sh
文件开头可指定一个或多个解释脚本程序的 shell ,如       #!/bin/bash ,注意 /bin 不要漏了“ /
2 shell 脚本中特殊符号的含义
          注释符 #  
除了 #!/bin/bash 里的 # 特殊
美元符 $
使其后的普通字符作为变量。
          如: $a 表示变量 a 的值。变量字符长度超过 1 个字符用 {} 括起来。
单引号’
强制取消转义符号作用,被引起的字符全部做普通字符,即全部原样。
         echo ‘my $SHELL’
双引号”
引号内的内容,除 $ 、转义符 \ 、倒引号 ` 这三个保留特殊功能,其他字符均强制做普通符。
倒引号 `
引号内的字符串当做 shell 命令行解释执行,得到的结果取代整个倒引号括起来的部分。
转义字符
反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠( \ )能够阻止 shell 把后面的字符解释为特殊字符。
例:
$ echo  “Filename  is  N0\$\*”
Filename  is  N0$*
          通配符
         1.  * 代表 0 或者多个特殊字符
例子 yum.* 代表的可以使 yum. 也可以是 yum.a yum.ab yum.abc 当然小数点后面可以有多个字母
2.  “?”代表任意一个字符
例子 yum.
                    可以是 yum.a yum.b yum.c
                    小数点后面必须有任意一个字符
         3. 中括号 []
代表的是中括号中的任意一个,如 [abcdef] 可以是 a b c d e f 中的任意一个字母
  • [-] 代表的是一个范围
    •  [a-z]     表示可以是字母 a z 之间的字母
                   ls  [1-5]*   
  • [^]      ^ 是反向选择符号从字面意思可以知道也就是非的意思
    • [^abc]   表示只要不是 a b c 这三个字符中的任意一个就选择
4. 花括号 {}
  • 通过括号扩展可以生成需要的字串,括号中可以包含连续的序列或使用逗号分隔的多个项目,连续的序列包括一个起点和一个终点
  • #echo {a,b,c}
  •   a b c
3 shell 脚本中的位置参数   shell 变量
          常用于 SHELL 参数检测的有
  • $#  命令行参数个数
  • $*  “参数 1 参数 2 …”形式保存的所有参数
  • $@         “参数 1 ”“参数 2 ”…形式保存的所有参数
  • $n  n 个参数
  • $?  前一个命令或函数的返回码
  • $0  当前程序名
  • $$  本程序的 PID
  • $!  上一个命令的 PID
         
export 用于定义或修改环境变量。
普通变量可以不用声明就可使用。
$ export TEST= Test...        # 定义一个新环境变量。
$ export TEST=$TEST: add1 # 向环境变量 TEST 中加入新值。
$ unset TEST                       # 删除变量
$ readonly TEST                          # 将环境变量 TEST 设为只读,只读的变量不能被删除。
env 命令显示所有已定义的环境变量
  【修改环境变量】
两种方式:
在命令行用 export 命令修改,只在本次登录的 shell 内有效。设置好的环境变量可以在当前用户运行的所有程序中使用。
在配置文件中修改环境变量的默认值,新登陆仍可有效。
命令行修改环境变量
以下在用户 user 主目录下操作:
  1. mkdir shdir && cd shdir
  2. vi hello
  3. chmod 755 hello
  4. cd
  5. export PATH=$PATH:$HOME/shdir
  6. 在任何目录下,输入 hello 即可执行该文件。
配置文件中修改环境变量
以下在用户 user 主目录下操作:
vi .profile
在文件末尾添加一行
export PATH=$PATH:$HOME/shdir
esc 返回命令模式, :wq 保存退出。
source 命令使配置文件立即有效
source .profile
现在,在任何目录下即可执行 shdir 目录下的所有可执行文件了。
  1. 直接赋值
a=78
  1. 将一个命令执行的输出赋给指定的变量
a=`date`
  1. 从标准输入设备读入用户输入的值
read a
4 能够理解简单脚本的含义,分析 shell 脚本程序
          条件测试命令 test
         test - 参数 n1             # 一元判断
         test n1 - 参数 n2       # 二元比较
注意参数与判断的变量间要空格;
条件测试式
         [ - 参数 n1 ]                # 一元判断
         [ n1 - 参数 n2 ]           # 二元比较
中括号与参数间要有空格
真返回 0 ,假返回 1
①整数比较
test 1 lt 4        # 判断 1<4
echo $?                # 结果为 0
整数判断相关参数:
-eq    等于
-ne    不等于
-lt     less than
-le      小于等于
-gt    greater than
-ge    大于等于
②字符串
注意加双引号
[ “$a”=“hello” ]
[ z $a ] 字符串长度是否为 0 (是否空字符串)
           =      等于
  !=    不等于
  >      按字符编码表排序,前面的是否在后面字符的前面
  -z     字符串长 =0 ,空字串
  -n     字符串长 >0 ,非空字串
判断字符串为空的三种方法:
if [ $str =   “” ]
if [ x $str = x ]
if [ -z $str ] -n 为非空)
注意:都要带双引号,否则有些命令会报错,养成好习惯
③逻辑操作
[ “$a”=“hello” –o –z “$a” ]
echo $?     显示上一步结果
-a       逻辑与
-o       逻辑或
      逻辑非
逻辑判断举例
条件 1 && 条件 2
条件 1 || 条件 2
例子:
         #!/bin/bash
         x=5
         y=10
         if [ “$x” -eq 5 ] && [ “$y” -eq 10 ]
  then
                   echo “Both conditions are true.”
         else
                   echo “The conditions are not true.”
         Fi
          判断文件
[ -d mydoc ]
判断 mydoc 是否是目录
-f        存在且是普通文件
-d       存在且是目录
1 )分支结构
if
if [ $# -eq 0 ]
then
         echo “输入了 0 个参数”
elif [ $# -lt 1 ]
then echo “输入了多个参数”
else echo “输入了 1 个参数”
fi
case
case $# in
         0) echo “输入了 0 个参数” ;;
         1) echo “输入了 1 个参数”
                     echo “参数是 $1 ;;
         *) echo “输入了多个参数” ;;               
Esac
2 )循环结构
for
例子——输出 100 10 的倍数
         for i in `seq 1  9`
         do
                   echo `expr $i \* 10`
         done
改为输出 a b 序列数各数的 10 倍数:
         read a b
         for i in `seq $a $b`
5 能够编写简单的 shell 脚本
6 、文件系统与磁盘管理
1 )磁盘以及各个分区的表示含义
硬盘和分区的结构:
主分区,一个硬盘允许 4 个主分区
扩展分区:一个主分区可做扩展分区,只用于容纳逻辑分区,并不建立文件系统
逻辑分区:在扩展分区上创建, 使用 5-63 的识别号
2) 文件链接
  •     硬链接( Hard Link )默认情况下, ln 产生硬链接。原文件和连接文件的 FCB 记录了相同的 inode 地址。
    • 建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接
    • ln newfile oldfile
  • 符号链接( Symbolic Link )。 win 下的快捷方式差不多。 包含所链接文件的路径。可链接任意文件或目录,可链接不同文件系统的文件,甚至可以链接不存在的文件,网络文件。
    • ln -s newfile oldfile
一个目录至少有 2 个硬链接:目录本身的相对目录“ . ”,以及作为其子目录的父目录“ .. ”都指向它。所以,如果目录下新建一个子目录,硬链接数为 3
2 )常见文件系统
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。
Windows 系统有 fat32 ntfs
Linux 中默认使用的文件系统类型
EXT4 4 代扩展( Extended )文件系统
SWAP ,交换文件系统
Linux 支持的其它文件系统类型
FAT16 FAT32 NTFS
XFS RHEL7 )、 JFS
3 )理解文件分区、格式化、磁盘挂载
          设备文件:
所有的设备都在 /dev 下有对应的设备文件, U 盘作为磁盘设备, linux 把它识别为一个设备文件。 fdisk l ,可查看全部设备号。
挂载:
Linux 中使用设备都需要将设备挂载到一个空目录,通过对目录的操作访问设备里的内容。 mount 命令可将设备挂载到目录。
         mount 命令
用途:挂载文件系统、 ISO 镜像到指定文件夹
格式: mount  [ -t 类型  ]  存储设备   挂载点目录
                   mount  -t vfat /dev/sda1  /mnt/win
         umount 命令
用途:卸载已挂载的文件系统
格式: umount  存储设备位置
        umount  挂载点目录
  • 文件系统开机自动挂载   ( 永久挂载 )
    • /etc/fstab 配置文件
    • 包含了需要开机后自动挂载的文件系统记录
  1. 分区工具 fdisk
    1. fdisk -l 列出硬盘分区信息
    2. fdisk /dev/sda 交互模式操作 sda 设备
  • m 显示所有可用命令
  • p 显示硬盘分区信息
  • n e p 创建新、扩展、主分区
  • t 更改分区文件系统
  • d 删除硬盘分区
  • w q 保存、不保存退出
  1. 格式化文件系统 mkfs
    1. mkfs 参数 t 文件系统类型 设备名
                            mkfs t ext3 /dev/sda5
                   
1 )挂载光盘  
光盘驱动器的设备名为 cdrom 挂载到 /mnt/cdrom
mkdir /mnt/cdrom
mount    /dev/cdrom /mnt/cdrom
2 )挂载硬盘  
Windows 装在 sda1 分区,要把它挂载到 /mnt/win
mkdir  /mnt/win
mount  -t vfat /dev/sda1  /mnt/win
若将装在 sda7 上的 Linux 磁盘分区挂载到 /mnt/linux1
mkdir /mnt/linux1
mount  -t ext4   /dev/sda7  /mnt/linux1
3 )挂载移动设备
USB 接口的移动硬盘当作 SCSI 设备对待,先通过 fdisk l 查看系统的硬盘和分区情况,再挂载到一个准备的空目录中
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
4 )理解一次性挂载和永久性挂载
5 )了解逻辑卷,知道逻辑卷的创建和删除顺序
          物理存储介质( Physical  Media
指系统的存储设备,硬盘或者分区
/dev/sda5,/dev/hdb1 等,是存储系统最底层的存储单元
PV Physical Volume ,物理卷)
  整个硬盘,或使用 fdisk 等工具建立的普通分区
  包括许多默认 4MB 大小的 PE Physical Extent ,基本单元)
LVM 的基本存储单元
VG Volume Group ,卷组)
  一个或多个物理卷组合而成的整体
LV Logical Volume ,逻辑卷)
  从卷组中分割出的一块空间,用于建立文件系统
1 )新建空分区
使用分区工具 fdisk 创建 LVM 分区,方法和创建其他一般分区的方式是一样的,需要注意通过 t 命令将 LVM 的分区类型改为 8e
2 )初始化分区(创建 PV
pvcreate 将空分区 /dev/sdb5 创建为物理卷
pvcreate /dev/sda5
3 vgcreate 创建卷组
vgcreate    –s 块大小 卷组名 物理卷设备名
vgcreate –s 8m vg0 /dev/sdb5
卷组名唯一 不能与 /dev 中的文件名冲突
4 )创建逻辑卷
lvcreate  -n 【逻辑卷名】   –L  【逻辑卷大小】 【已存在卷组名】
lvcreate –L 200MB –n lv0 vg0
卸载物理卷 pvremove PVDEVICE
卸载卷组    vgremove VGNAME
卸载逻辑卷 lvremove LVDEVICE
卸载卷时,需要注意两个事项
1 )卸载逻辑卷前,先 umount 逻辑卷的目录挂载点
2 )卸载卷组前,必须先卸载所有使用到该卷组的逻辑卷
7 、软件管理和进程管理
1 )理解红帽使用的软件包为 rpm
2 yum  install   软件包    yum  remove  软件包
3 rpm  -ivh  *.rpm
4 )理解 Linux 的进程的概念,理解跟程序的区别
          程序
静态保存的代码和数据
保存在硬盘、光盘等介质中
进程
CPU 及内存中动态执行的代码
父、子进程:每个进程可以创建一个或多个进程
5 )理解 Linux 进程的状态
          进程状态
         R 表示进行状态; S 表示休眠状态; T 表示暂停或终止状态机; Z 表示僵死状态。
1 )运行态 运行或准备运行
2 )等待态
可中断 (TASK_ITERRUPTIBLE)
不可中断 (TASK_UNITERRUPTIBLE)
3 )停止态 (TASK_STOPPED)
4 )僵死态( TASK_ZOMBIE)
6 )前台进程、后台进程的启动、切换
CTRL+Z 挂起当前的前台作业
  • jobs 命令可查看后台作业清单
    • 作业号   状态 命令名
  • fg 作业号:将任务放回前台执行
  • bg 作业号:将任务放到后台执行
  • find / -name f*
7 )进程的常见命令 ps  top  kill 等的使用
          进程查看
ps aux
a :显示当前终端下的所有进程信息
u :使用以用户为主的格式输出进程信息
x :显示当前用户在所有终端下的进程信息
         top
ps 命令的基本作用是相同的,显示系统当前的进程及其状态,但是 top 是一个动态显示过程
显示结果排序的操作
缺省按照 cpu 使用情况排序
m 键:按照内存排序
t 键:运行时间进行排序
u 键,键入用户名,查看某一用户的 CPU 使用情况
k 键,输入 PID ,可终止某一进程
q 键,退出 top
kill
Kill 命令
通过向进程发送信号控制进程,可用于结束后台进程。
–信号 -s 信号         :发送信号到指定的进程
-l 信号             :将信号数值翻译成信号名称
常用: kill -9 PID            无条件撤销进程
kill -KILL PID
               执行 kill 时一定观察好 PID 号,以免误删系统进程。 kill 执行是否成功,可用 ps 检查被结束进程号是否还存在即可。
8 )了解简单的计划任务
  •    at 命令
    • 在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务
    • 服务脚本名称: /etc/init.d/atd
    • 设置格式: at  [HH:MM]  [yyyy-mm-dd]
  • 管理 cron 计划任务
    • 编辑计划任务: crontab  -e  [-u  用户名 ]
    • 查看计划任务: crontab  -l  [-u  用户名 ]
    • 删除计划任务: crontab  -r  [-u  用户名 ]
8 、简单的网络接口的命令   nmcli  ip  addr   ifconfig  ping  等的基本使用
【配置网络接口】—— ifconfig
ifconfig [ 参数 ] [ 接口 ] [ 操作 ]
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
ifconfig eth0 192.168.1.10/24
Ifconfig eth0 up
参数说明:
-a       显示所有可用的接口信息,包括未连接的接口
-s       显示短列表
-v       在发生错误的情况下显示更多的错误信息
  1.     查看网卡信息
ip addr ( 可简写为 ip a )
ip addr show eno0
  1. 给网卡手动添加一个地址
ip addr add IP 地址 设备名称
  1. 删除一个地址
ip addr del IP 地址 设备名称
  •     看网关
netstat –rn  route -n
traceroute www. 某某
ip route
  • DNS
                   cat /etc/resolv.conf
                   nslookup 127.0.0.1
                   dig
          配置网络接口】—— nmcli
  •    nmcli 强大之处在于
  1. 使用一条命令实现 ifconfig route ip 等其他的功能
  2. ②做的修改可以自动同步到配置文件之中长期有效,不需手工修改配置文件,
  • 输入 nmcli ,按 Tab ,系统会提示该命令后面作用于的对象名
【网络连通测试】—— ping
ping [ 参数 ] 目标地址
通过发送 ICMP ECHO_REQUEST 报文,探测网络连通状态。默认情况将无限次的重复发送。
  • 参数说明:
    • -b     目标地址允许是广播地址
    • -c N  设置发送的次数
    • -i 间隔       设置发送报文间的间隔,默认值为 1
    • -n     仅适用数字输出
    • -q     不输出每次发送报文的结构,仅显示综合信息
    • -v      输出更多的信息
9 Linux 下的 C 编程
1 gcc 的使用,编译过程
  1.     编译执行
         gcc hello.c                   编译生成可执行文件,结果为 a.out
         gcc –o hey hello.c     编译生成可执行文件,指定结果文件名为 hey
          参数

-o
指定输出的文件名
-g
产生符号调试工具 (GNU GDB) 所必要的符号信息,要想对源代码进行调试,
必须加入这个选项。

  •    gcc c 语言程序编译器。一个 C 语言程序编译过程如下:
  1. 编辑:写源码
  2. 预处理:系统加载头文件和展开宏,仅对文本信息处理,是编译前的准备、整理。
  3. 编译:将 C 语言转换为对应的计算机机器码,生成二进制文件。但若有多个模块,此时的文件还不能执行,因为各模块还相对独立,相互使用的地方还是标记。
  4. 链接:将模块合成一个可执行的整体。
gcc 通过分别调用预处理、编译、链接工具,自动完成 C 程序的编译工作。
2 )理解四个系统调用的使用
  • Fork() -父亲克隆一个儿子。执行 fork() 之后,兵分两路,两个进程并发执行。
调用 fork 程序运行就发生分叉,变成两个控制流程,这也是“ fork ”(分叉)名字的由来。
  • 子进程克隆父进程
    • 父子进程内存空间代码相同,除非儿子用 exec 另启门户做其他工作。
  • 一次调用,两个返回值
    • fork 调用后,系统会在子进程中设置 fork 返回值是 0 ,而父进程内存空间中 fork 的返回值则是子进程的 pid
    • Exec() -新进程脱胎换骨,离家独立,开始了独立工作的职业生涯。
    • Wait() -等待不仅仅是阻塞自己,还准备对僵死的子进程进行善后处理。
      • 阻塞自己,等待第一个僵死子进程,进行下面操作,否则一直阻塞下去。
      • 收集僵死子进程信息
      • 释放子进程 pcb ,返回
      • 调用成功,返回被收集子进程的 PID ;如果没有子进程,返回 -1
    • Exit() -终止进程,把进程的状态置为 僵死 ,并把其所有的子进程都托付给 init 进程,最后调用 schedule() 函数,选择一个新的进程运行。
程序执行结束或调用 exit 后,进程生命就要终结,但进程不是马上消失,而是变为僵死状态 —— 放弃了几乎所有内存空间,不再被调度,但保留有 pcb 信息供 wait 收集,包括:
  • 正常结束还是被退出
  • 占用总系统 cpu 时间和总用户 cpu 时间
  • 缺页中断次数,收到信号数目等
  • 利用参数 status 传递进程结束时的状态
3 )能够分析四个系统调用的运行结果
  •     关于并发顺序
父子进程并发, linux 优先调度执行子进程比较好。
分析:如果先调父进程
  1. 因为 fork 将父进程资源设为只读,只要父进程进行修改,就要开始 写时复制 ,把父进程要改的页面复制给子进程(写子空间)。
  2. 继续运行,一旦子进程被调度到,它往往要用 exec 载入另一个可执行文件的内容到自己的空间(又写子空间),可见上步的写入就多余了。
所以, fork 后优先调度子进程可从父进程克隆到子进程后,尽量减少没必要的复制。
  • 子进程调用 exec 使地址空间被填入可执行文件的内容,子进程的 PID 不变,但进程功能开始有别于父进程。
  • 注意 exec 函数执行成功就会进入新进程执行不再返回。所以子进程代码中 exec 后的代码,只有 exec 调用失败返回 -1 才有机会得到执行。
4 )理解孤儿进程、僵尸进程等概念
  • 孤儿进程问题
                    父进程在子进程前退出,必须给子进程找个新父亲,否则子进程结束时会永远处于僵死状态,耗费内存。
  • 在当前进程 / 线程组内找个新父亲
  • 或者,让 init 做父亲
  • 僵尸进程只能通过父进程 wait 回收它们,他们是不能用 kill 命令清除掉的,因为 kill 命令只是用来终止进程的,而僵尸进程已经终止了。



你可能感兴趣的:(Linux)