第一章 初始 Linux shell
Linux内核主要四种功能:
1.系统内存管理 2.软件程序管理
3.硬件设备管理 4.文件系统管理
shell:交互工具。
第三章 基本的bash shell 命令
1.man:查系统手册。
2.cd:切换目录。
绝对文件路径:从“\”目录开始访问路径。可用 pwd 查看当前目录绝对路径值。
相对文件路径:从当前目录开始,路径不以“/”开头。
.. :上级目录。
. :当前目录。
3 . ls
ls -l :显示当前目录下的文件和目录。
ls -a :显示隐藏文件。
ls -R :递归显示当前目录下包含的子目录中的文件。
ls -F :区分文件和目录(后面有/)
4.文件操作
文件:
创建空文件:touch filename
删除文件:rm fielname (加-f 不提示)。
复制文件:cp source destination (加 -i 询问是否要覆盖已有文件)。
递归复制整个目录的内容:cp -R source destination。
创建链接文件:
符号链接:新文件,存在唯一的inode,依赖于源文件。ln -s file ls_file
硬链接:源文件的别名。ln file ls_file
ls_fiel:链接文件的名字
文件重命名:mv file1 file2 (fiel1 改名为file2)
文件位置移动:mv file destination
查看文件内容:cat filename (-n 给所有的行加上行号)
目录:
创建目录:mkdir directoryname
删除空目录:rmdir directoryname
删除非空目录:rm -rf directoryname
5.more 与 less
分页工具:more
more filename 后,可以按空格或回车逐行向前了浏览文件,按q键退出。
less :可以在本文件中前后翻动。
6.查看部分文件:
tail -n 10 查看文件倒数10行数据
head -n 10 查看文件前10行数据
第四章 更多的bash shell 命令
1.查看系统上运行的所有进程 ps -ef 或 ps -aux
2.实时显示系统进程信息: top
3.进程信号
ctrl+ z :变成后台进程,发送信号SIGSTOP
ctr + c :结束当前进程,发送信号SIGINT
ctrl+ / :退出当前进程,发送信号 SIGQUIT
4.挂载存储媒体
例:挂载U盘步骤
- 虚拟机检测到U盘,并连接。
- fdisk -l 查看磁盘分区情况。
- mount -t vfat /dev/sdb1 /mnt/USB 挂载到/mnt/USB
- ls -al /mnt/USB 查看U盘文件
- 卸载U盘 umount /mnt/USB
- 如果device is busy 则切换到home下 cd /home ,然后 umount /home/mnt/USB
就可以了
5.查看所有已挂载磁盘的使用情况 df
6.显示当前目录下所有的文件、目录和子目录的磁盘使用情况: du
7.sort 排序命令
cat sort.txt | sort //根据每行首字母排序,默认升序
或sort sort.txt
sort -t , -k 1 sort.txt
-t:指定域分割字符
-k:指定域
[root@localhost home]# sort -t , -k 2 sort.txt
[root@localhost home]# sort a //根据字符ascii编码值排序
[root@localhost home]# sort -n a //根据整数大小
[root@localhost home]# sort -n -r a //改变排序方向(倒序)
[root@localhost home]# sort -t , -k 3.2 sort.txt //根据指定域
8.grep 搜索数据
-a:搜索二进制
-i:忽略大小写
-n:显示文本行数
grep [option] pattern [file]
例:
在文件file1 中查找“hello”:grep hello file1
查找以’t’开头的行:grep ‘^t’ passwd
查找以’t’结尾的行:grep ‘t$’ passwd
查找不以A-Z,a-z开头的行:grep ‘^[^a-z A-Z]’ passwd
9.tar 命令:
[root@localhost home]# tar -cf hello.tar.gz hello2.c
hello.c
//创建压缩文件
[root@localhost home]# tar -cvzf hellonew.gz hello2.c
hello.c //”z”,压缩算法
[root@localhost home]# tar -tvf hellonew.gz //列出压缩文件中
有文件信息
[root@localhost home]# tar -xvzf hellonew.gz //解压
[root@localhost home]# tar -xvf hello.tar.gz //解压
[root@localhost home]# tar -xvzf hellonew.gz -C /tmp //解压
到制定目录,”-C “
第五章 理解shell
1.进程列表
例:依次执行命令,命令用括号括起来,成为进程列表 (pwd ; ls;cd/etc ; pwd ; cd
; pwd ; ls)
2.后台模式
在命令后加 &字符
第六章 使用Linux环境变量
bash shell中,环境变量分两类:全局变量和局部变量。
1.查看全局变量:用 env 或者 printenv 命令
2.设置局部用户变量
例:
$ my_variable=”hello world”(变量名、等号和值之间没有空格)
echo e c h o my_variable
hello world
3.设置全局变量
用export ,变量名前不需要加$
4.删除环境变量
用unset ,变量名前不用加$
5.数组变量
例:
$ array=(1 2 3 4 5)
echo e c h o {array[*]} 输出数组全部变量
$ array[0]=3 改变数组的某个值(下标从0开始)
$ unset array[[0] 删除数组的第一个值
第七章 Linux的安全性
1./etc/passwd 用户信息文件
/etc/shadow 只有root用户才能访问
2.用户操作
添加用户
useradd 或 adduser username
删除用户
userdel username (加 -r 选项会删除系统中属于该用户的任何文件)
修改用户
-p:该密码
-L:锁定用户,使用户无法登陆
-U:解除锁定,使用户能登陆
3.修改用户密码
第一种方法:usermod -p 123456 username
第二种方法:passwd username 然后输入密码
第三种:echo “123456”| passwd –stdin username
4.文件权限
-rwxrw-r-x
-:文件类型,普通文件
rwx:文件属主的权限
rw-:属组成员的权限
r-x:其他用户的权限
r:可读(4)。 w:可写(2)。 x:可执行(1)。
改变文件访问模式 chmod :
u+|-|=:改变文件所用者操作模式(+ 新增 - 取消 = 指定模式)
[root@localhost home]# chmod u=rx a.out
[root@localhost home]# chmod u+w a.out
[root@localhost home]# chmod u-r a.out
g+|-|=:改变文件所用者同组用户操作模式
[root@localhost home]# chmod g=rx a.out
[root@localhost home]# chmod g+w a.out
[root@localhost home]# chmod g-r a.out
o+|-|=:改变其它组用户操作模式
[root@localhost home]# chmod o=rx a.out
[root@localhost home]# chmod o+w a.out
[root@localhost home]# chmod o-r a.out
a+|-|=:所有用户操作模式
[root@localhost home]# chmod a=rx a.out
[root@localhost home]# chmod a+rx a.out
[root@localhost home]# chmod a-rx a.out
[root@localhost home]# ./a.sh
bash: ./a.sh: 权限不够
[root@localhost home]# chmod u+x a.sh
[root@localhost home]# ./a.sh
改变所属关系:
chown owner filename
第十章 vim编辑器
vim/vi 文本编辑
vim 三种操作模式:
1.输入模式
2.命令模式
3.末行模式
按下 字母 :i
命令模式 ——————>输入编辑
按下:esc
输入编辑 ——————>命令模式
按下:shift+:
命令模式 ——————>末行模式
[root@localhost home]# vim test //打开文件(文件不存在先创建)
命令模式常用的命令:
yy:复制当前行
nyy:复制多行(n>=2)
pp:粘贴
dd:删除当前行
ndd:删除多行(n>=2)
shift+~:大小写替换
gg=GG:语句块自动排版
gg:快速定位到文件首行
GG:快速定位到文件末行
末行模式常用的命令:
wq:保存退出
q!:强制退出
w filename:文件另存为
set nu:显示行号
set nonu:取消行号显示
u:撤销最近一次更新
!shell指令 !ls :执行shell指令
%s/原字符/新字符/:替换每行的首次匹配的原字符
%s/原字符/新字符/g:替换整个文件匹配的原字符
:%s/\/usr\/home/111111/g :”\/”取消特殊含义
:%s/^/新字符/:在每行开头添加字符
/key word/:高亮度显示关键字
split filename :水平分屏,ctr+w 切屏
vsplit filename :垂直分屏
第二部分 shell脚本编程基础
第十一章 构建基本脚本
1.创建shell脚本文件时,文件第一行必须指定使用的shell。
格式为:#!/bin/bash
“#!”告诉系统用哪个解释器执行,可以是bash,也可以是sh
“#”注释符
- 2.echo -n 文本字符串和命令输出显示在同一行
3.使用环境变量
环境变量前加 符号或者 符 号 或 者 {variable}
4.命令替换
命令输出信息赋值给变量。
两种表示:反引号字符(“) 和 $()
例:testing=`date` 等价于 testing=$(date)
5.重定向输入输出
输出重定向:> 和 >>
[root@localhost home]# ls -l > ls.txt //标准输出到文件,如果文件
不存在先创建文件ls.txt,如果文件存在并且有数据,先清空文件,再写数据
[root@localhost home]# echo "hello" >> ls.txt//在文件末尾追加数据
输入重定向:< 和 <<
< :command < inputfile 将文件的内容重定向到命令
[root@localhost home]# wc < test.txt
wc统计文本的行数、单词、字节数
<< :必须指定一个文本标记来划分输入数据的开始和结尾。
[root@localhost home]# wc << EOF//连续多次从键盘输入,"EOF终止输入结束字符
6.管道
“|”称为管道符号(匿名管道),实现进程之间通信.把前一个进程标准输出 数据作为下一个进程的标准输入
例:
[root@localhost home]# cat /etc/passwd | grep root | wc
管道最流行的用法之一是将命令行产生的大量输出通过管道传送给more命令。
7.执行数学运算
expr 命令:处理数学表达式(+ - * / % | & < 等 )
[root@localhost shell]# expr 1 + 2
注意:有歧义的符号(如 *)要在前面加转义字符()
2.使用方括号:
[root@localhost shell]# c=$[1+2]
3.浮点解决方案
用内建的bash计算器:bc ,必须输入qiut来退出
[root@localhost ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998,
2000, 2004, 2006 Free Software Foundation,Inc. This is free software with ABSOLUTELY NO WARRANTY. For details
type `warranty’. 8*9.999
79.992在shell脚本中设置scale值来控制小数位数。
4.查看退出状态码[root@localhost shell]# echo $?
0 为成功结束,正数是命令结束有错误 (状态码范围0 ~ 255)
第十二章 使用结构化命令
- 1.if-then语句:
if 条件
then
执行语句
else
执行语句
fi
或
if 条件;then
执行语句
else
执行语句
fi
嵌套if:
if 条件
then
执行语句
elsif
执行语句
then
执行语句
fi
- 2.条件格式:
a.[ 条件 ] (注意两边都有空格)
b.test 条件
可用布尔逻辑来组合(&& || and or)
条件分类:
1.数字条件
-eq 两个数是否相等
-ne 两个数是否不相等
-le 第一个数是否小于或等于第二个数
-ge 第一个数是否大于或等于第二个数
-gt 第一个数是否大于第二个数
-lt 第一个数是否小于第二个数
[root@localhost shell]# test $a -ge $b
[root@localhost shell]# echo $?
[root@localhost shell]# [ $a -lt $b ]
[root@localhost shell]# echo $?
记住:bash shell只能处理整数。
2.字符条件
>:第一个字符串是否大于第二个字符串
= :测试两个字符串是否相等
!= :测试两个字符串是否不相等
-z :测试字符串是空字符串
-n :测试字符串是非空字符串
[root@localhost shell]# test "abc" = "abc"
[root@localhost shell]# echo $?
[root@localhost shell]# test -n "$a"
[root@localhost shell]# echo $?
3.文件系统判断条件
-e 测试文件或目录是否存在
-d 测试文件是否是目录文件
-s 测试文件是否非空
-f 测试文件是否存在
-w 测试文件是否可写
-L 测试文件是否是符号连接
-x 测试文件是否可执行
-r 测试文件是否可读
file1 -nt file2 测试file1是否比file2新
file1 -ot file2 测试file1是否比file2旧
[root@localhost shell]# test -f test.sh
[root@localhost shell]# echo $? //0:验证正确 1:以上验
证错误
[root@localhost shell]# test -d abcd
[root@localhost shell]# echo $?
[root@localhost shell]# [ -d test.sh ]
[root@localhost shell]# echo $?
- 3.if-then 的高级特性
1.使用双括号:可在比较过程中使用高级数学表达式,而test只能在比较中使用简单的
算术操作。
((expression))
++ 、 – 、!、~ 、**(幂运算) 、<< 、>>、& 、|、&&、||
4.case 命令
case 变量名 in
值1 ) 执行语句;;
值2 ) 执行语句;;
值3 ) 执行语句;;
esac
例:输入 两个操作数,输入一个运算符号(+ - * /) 计算出结果
\#!/bin/bash
read d1 op d2
case $op in
"+" ) echo $[$d1+$d2];;
"-" ) echo $[$d1-$d2];;
"*" ) echo $[$d1*$d2];;
"/" ) echo $[$d1/$d2];;
* ) echo "input error" //其它输入符号
esac
第十三章 更多的结构化命令
1.for命令
- for 变量 in 值集合
do
命令
done
值集合中根据空格区分单个值
使用“ 把指令输出的结果变成for循环集合。
例:
filename=`ls -l /etc | grep '^-' | awk '{print $9}'`
for f in $filename
do
echo $f
done
2.for((a;b;c))
do
命令
done
a:初始化循环体变量
b:判断条件
c:改变循环体变量值
3.改变字段分隔符
系统默认字段分隔符:空格、制表符、换行符。
用IFS=$’\n’ 忽略空格和制表符
技巧:
IFS.OLD=$IFS
IFS=$’\n’
<在代码中使用新的IFS值>
IFS=IFS.OLD
这样保证了脚本后续操作中使用的是默认的IFS值。
4.while 命令
while [ 条件 ]
do
命令
done
5.until 命令
until 当条件成立 退出循环
until [ 条件 ]
do
命令
done
6.break 和continue 控制循环
break:结束本层循环。
continue:结束本次循环(continue 后面的语句不执行,直接执行下一次
循环),继续下一次循环。
第十四章 处理用户输入
1.读取参数
例:
[root@localhost shell]# ./test 10 30
0代表程序名, 0 代 表 程 序 名 , 1 是第一个参数,依次类推下去,第十个为${10}。
2.读取文件名
用basename命令可以返回不包含路径的脚本名。
例:
3.特殊参数变量
$# 命令行参数个数。
∗和
∗
和
@:表示所有脚本参数的内容。
区别:
∗会将所有参数当做一个单词保存,而
∗
会
将
所
有
参
数
当
做
一
个
单
词
保
存
,
而
@把所有参数当做同一个字符串中的多个
独立的单词。
$$:获取当前的进程的ID值。
4.移动变量
shift :可跳过不需要的参数
shift 2:跳过两个参数。
5.分离参数选项
双破折号(–)表明选项列表结束,剩下的命令行参数当做参数。
例: