Linux系统简介
Linux是一套免费使用和自由传播的类Unix操作系统的统称。 严格说,Linux只表示Linux内核,但实际使用上被统称为Linux系统。 是一个多用户、多任务 、支持多线程和多CPU的操作系统。
Linux的优势
1.Linux是开放源代码的; 2.Linux的内核小,效率高; 3.Linux是免费的OS,在价格上极具竞争力;
终端
终端简介:[root@server ~]#
root 当前登录用户为root
@server 当前主机名为server
~ 当前所在目录为用户的家目录
# 当前用户权限为管理员
$ 当前用户权限为普通用户
Linux常见目录结构
/boot 启动目录,内核的存放地 /etc 配置文件存放目录 /home 用户的家目录,用户信息的存放地 /tmp 程序临时文件的存放地 /lib 库文件目录 /bin 可执行文件和常见的Linux命令 /sbin 系统管理员的命令和工具 /mnt 挂载其他的文件系统 /dev 设备目录 /usr 应用程序和文件的安装地
vi和vim编辑器
vi和vim的基本介绍
所有Linux系统都会内置vi文本编辑器 vim是vi的升级版,可以主动以字体颜色分辨语法的正确性,代码补完和编译,错误跳转等功能。
vi和vim的三种模式
正常模式
在正常模式下,我们可以使用快捷键。 用vim打开一个文件就直接进入一般模式 可以使用【删除字符】或【删除整行】来处理文档内容,也可以使用【复制黏贴按钮】
插入/编辑模式
在这个模式下,可以编辑文件内容。 按下i,I,o,O,a,A,r,R等字母就可进入编辑模式
命令行模式
在这个模式中,可以利用指令完成读取,存盘,替换,离开,显示行号的等动作。 wq保存退出 q无修改直接退出 q!不保存修改直接退出
三种模式转换示意图
Vim 的常见指令案例
yy:拷贝当前行 5yy:拷贝当前5行 dd:删除当前行 5dd:删除当前行向下的5行 在文件中查找某个单词:命令行输入 /(查找内容),按n查找下一个 设置文件行号:set nu,取消文件行号:set nonu 编辑文件,正常模式下使用快捷键到达文档最末行:G,最首行:gg 撤销输入:在正常模式下输入u 编辑文件,光标移动到某行:shift+g
显示行号:set nu 输入行号这个数 输入shift+g
vim其他常见指令补充
文件命令
指令 说明 vim [file1 file2 file3 …] 打开单个或多个文件 :open file 在vim窗口中打开一个新文件 :split file 在新窗口中打开文件(split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。) Ctrl+ww 移动到下一个窗口 Ctrl+wj 移动到下方的窗口 Ctrl+wk 移动到上方的窗口 :close 最后一个窗口不能使用此命令,可以防止意外退出vim。 :only 关闭所有窗口,只保留当前窗口 :bn 切换到下一个文件 :bp 切换到上一个文件 :args 查看当前打开的文件列表,当前正在编辑的文件会用[]括起来 :e ftp://192.168.10.76/abc.txt 打开远程文件,比如ftp或者share folder
普通模式
插入命令
指令 说明 i 在当前位置生前插入 I 在当前行首插入 a 在当前位置后插入 A 在当前行尾插入 o 在当前行之后插入一行 O 在当前行之前插入一行
游标移动
指令 说明 gg 移动到文件头 = [[ G(shift + g) 移动到文件尾 = ]] 行数 → G 移动到第 n 行 冒号+行号,回车 比如跳到240行就是 :240回车 h 左移一个字符 l 右移一个字符,这个命令很少用,一般用w代替。 k 上移一个字符 j 下移一个字符 w 向前移动一个单词(光标停在单词首部) b 向后移动一个单词 2b 向后移动2个单词 e 同w,只不过是光标停在单词尾部 ge 同b,光标停在单词尾部。 ^ 移动到本行第一个非空白字符上。 0 移动到本行第一个字符上 HOME 移动到本行第一个字符。同0健。 $ 移动到行尾 3$ 移动到下面3行的行尾 f(find) fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。 F 同f,反向查找
撤销和重做
指令 说明 u 撤销(Undo) U 撤销对整行的操作 Ctrl + r 重做(Redo),即撤销的撤销。
删除命令
指令 说明 x 删除当前字符 3x 删除当前光标开始向后三个字符 X 删除当前字符的前一个字符。X=dh dl 删除当前字符, dl=x dh 删除前一个字符 dd 删除当前行 dj 删除上一行 dk 删除下一行 10d 删除当前行开始的10行。 D 删除当前字符至行尾。D=d$ d$ 删除当前字符之后的所有字符(本行) kdgg 删除当前行之前所有行(不包括当前行) jdG(jd shift + g) 删除当前行之后所有行(不包括当前行) :1,10d 删除1-10行 :11,$d 删除11行及以后所有的行 :1,$d 删除所有行 J(shift + j) 删除两行之间的空行,实际上是合并两行。
拷贝,剪贴和粘贴
指令 说明 yy 拷贝当前行 nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。 p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。 shift+p 在当前行前粘贴 :1,10 co 20 将1-10行插入到第20行之后。 :1,$ co $ 将整个文件复制一份并添加到文件尾部。 ddp 交换当前行和其下一行 xp 交换当前字符和其后一个字符 ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴 :1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。 :1, 10 m 20 将第1-10行移动到第20行之后。
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
退出命令
指令 说明 :wq 保存并退出 ZZ 保存并退出 :q! 强制退出并忽略所有更改 :e! 放弃所有修改,并打开原来文件。 :q 未修改直接退出
注释命令
perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
指令 说明 3,5 s/^/#/g 注释第3-5行 3,5 s/^#//g 解除3-5行的注释 1,$ s/^/#/g 注释整个文档。 :%s/^/#/g 注释整个文档,此法更快。
执行shell命令
指令 说明 :!ls 列出当前目录下文件 :!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。 :!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。 :suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
帮助命令
指令 说明 :help or F1 显示整个帮助 :help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。 :help ‘number’ Vim选项的帮助用单引号括起 :help <Esc> 特殊键的帮助用<>扩起 :help -t Vim启动参数的帮助用- :help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
其他非编辑命令
指令 说明 . 重复前一次命令 :set ruler? 查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看 :scriptnames 查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。 :set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了 expandtab,那么tab将被扩展为空格。
实用指令
su 切换用户 格式一:su 用户名 代表的是用户名,但是所切进来的用户,用的系统环境变量还是上一个用户的 格式二:su -l 用户名 切换用户,不仅把用户给切换进来,还把用户自己的环境变量也加载 进来
帮助指令
man获得帮助信息
man [命令或配置文件]
help指令
help [命令或配置文件]
文件目录类指令
文件剪贴删除复制重名等
pwd:Print Working Directory,显示当前工作目录的绝对路径。 ls:-a:显示当前目录所有的文件和目录,包括隐藏的
cd:cd ~:回到自己的家目录;cd …:回到当前目录的上一级目录。 mkdir:创建目录;-p:创建多级目录。 rmdir:删除空目录。rmdir不能删除非空的目录。如果需要删除非空的目录,需要使用rm -rf。 cp:拷贝文件到指定目录;
-r:递归复制整个文件夹。强制覆盖不提示的方法: cp命令改为\cp rm:移除文件或目录;
mv:移动文件与目录或重命名,两种功能! touch:创建空文件。可以一次性创建多个文件 ln 给文件创建一个软连接
文件查看
cat:查看文件内容。只能浏览文件,而不能修改文件。
-n:显示行号。 结尾加上 | more:分页显示,不会全部一下显示完。 more:是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more还内置了很多快捷键:
空白键(Space):向下翻一页 Enter:向下翻一行 q:立刻离开more,不再显示该文件内容 Ctrl + F:向下滚动一屏 Ctrl + B:返回上一屏 = :输出当前行的行号 :f 输出文件名和当前行的行号 less:用来分屏查看文件内容,与more相似,但是更强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容。对于显示大型文件具有较高的效率。 head:显示文件的开头部分。-n 5:看前面5行内容。 tail:输出文件中尾部的内容。
-n 5:看后面5行内容。 -f:时事追踪该文档的所有更新 >指令:输出重定向。如果不存在会创建文件,否则会将原来的文件内容覆盖。 >>指令:追加。如果不存在会创建文件,否则不会覆盖原来的文件内容,而是追加到文件的尾部。 echo:输出内容到控制台。 history:查看历史指令
时间和日期
date:显示当前日期和时间
date “+%Y”:显示当前年份 date “+%d”:显示当前月份 date “+%Y-%m-%d %H:%M:%S”:显示年-月-日 时:分:秒 设置日期:date -s 字符串时间 cal:查看日历指令;
搜索查找类
find:从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端。
find (搜索范围) -name (文件名):按照指定的文件名查找模式查找文件。 find (搜索范围) -user (用户名):按照指定的用户名查找模式查找文件。 find (搜索范围) -size (+多少/-多少/多少):按照指定的文件大小查找模式查找文件(大于多少/小于多少/等于多少) 查询 /目录下所有.txt的文件:find / -name -.txt locate:locate (搜索文件)
可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。 locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。 在第一次运行之前,必须使用updatedb指令创建locate数据库。 grep:过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理。经常跟管道一起使用。
grep [选项] 查找内容 源文件 -n:显示匹配行及行号。 -i:忽略大小写字母。 cat hello.txt | grep yes
压缩和解压类
gzip/gunzip:压缩文件/解压
gzip (文件):压缩为.gz文件,原来文件不保留。 gunzip (文件):解压缩,同样也不保留源文件。 zip/unzip:压缩文件/解压
zip [选项] (压缩后文件xxx.zip) (将要压缩的文件) unzip [选项] (要解压的文件xxx.zip) zip -r:递归压缩,即压缩目录 unzip -d (目录):指定解压后的文件的存放目录 tar:打包指令,最后打包后的文件是.tar.gz的文件
tar [选项] xxx.tar.gz (打包的内容) -c:产生.tar打包文件 -v:显示详细信息 -f:指定压缩后的文件名 -z:打包同时压缩 -x:解压.tar文件 压缩:tar -zcvf (压缩后文件名) (要压缩的文件) 解压:tar -zxvf (要解压的文件) 解压到指定目录:tar -zxvf (要解压的文件) -C (指定目录),指定解压到的目录要存在。
shell
什么是shell?
1.Shell 是一个用C语言编写的程序它是用户使用 Linux 的桥梁。 2.Shell 既是一种命令语言,又是一种程序设计语言。 3.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访 问操作系统内核的服务
shell脚本是做什么?
将多哥Linux命令写在一脚本文件中,用户只需要执行这个脚本文件一次,就会把脚本中所包含的所有命令全部执行
shell构成
bash环境文件:
.bash_profile
.bashrc .bash_logout .bash_history
shell注释
以**#**开头的行就是注释,会被解释器忽略 shell里没有多行注释,只能每一行加一个#号
编写shell脚本格式并解析
格式:vi 脚本文件的名字.sh 使用vi来编写shell脚本 脚本第一行格式:
#!/bin/bash 符号#!用来指定该脚本文件的解析程序,这里使用的是bin目录下的bash解析器 第一种方式:
先 chmod +x 脚本文件的名字.sh 再 ./脚本文件的名字.sh 第二种方式:
shell变量
两种变量:
1.系统默认变量: 2.用户自定义变量:在shell编程中,所有的变量都由字符串组成,并且不需要事件声明变量的类型,它支持唯一类型的变量就是字符串 注意:变量名和等号之间不能有空格 变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z) 中间不能有空格,可以使用下划线(_) 不能使用标点符号 不能使用bash里的关键字 例:输出x,your_name变量
x=2
your_name="chen"
echo $x
echo $your_name
变量的调用:其中变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
只读变量:只能读取,不能修改
删除变量:变量被删除后不能再次使用,unset 命令不能删除只读变量
字符串的操作
str="world"
Splicing="hello,$str "
获取字符串长度
提取字符串
语法:${变量名:开始截取字符的下标:截取长度} 注意:字符串截取是根据下标来完成的,下标都是从0开始
shell数组
数组:相当于多个相同类型的变量组成的集合shell中没有限定数组的大小 定义数组:在shell中,用括号来表示数组,数组元素用空格 符号分隔开
读取数组:
获取数组中所有元素:
获取数组中长度:
获取数组单个元素的长度: 语法:${#数组名[下标]}
shell基本运算符
算数运算符
运算符 说明 举例 + 加法 `expr $a + $b` 结果为 30。 - 减法 `expr $a - $b` 结果为 -10。 * 乘法 `expr $a \* $b` 结果为 200。 / 除法 `expr $b / $a` 结果为 2。 % 取余 `expr $b % $a` 结果为 0。 = 赋值 a=$b 将把变量 b 的值赋给 a。 == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。 != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。
注意:
乘号(*)前边必须加反斜杠()才能实现乘法运算; 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 “*” 不需要转义符号 “” 。
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 说明 举例 -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 -ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [$a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
布尔运算符(true | false)
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符 说明 举例 ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false
逻辑元算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 说明 举例 = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。 != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。 -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。 -n 检测字符串长度是否为0,不为0返回 true。 [ -n “$a” ] 返回 true。 $ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
文件测试运算符
操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。 -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。 -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。 -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。 -p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
其他检查符:
-S: 判断某文件是否 socket。 -L: 检测文件是否存在并且是一个符号链接
Shell打印输出命令
echo命令
作用:用于字符串的输出 语法:echo “字符串内容” 1.显示转义字符
echo "\" It is a test\""
2.显示变量 read 命令 从标准输入中读取一行,并把输入行的每个字段的值指 定给shell 变量
read name
echo "$name It is a test"
echo - e "OK! \n"
echo - e "OK! \c"
echo "It is a test" > myfile
echo `date`
printf 命令
作用:输出 语法:printf 格式声明 与格式声明相对应的参数列表 格式声明由两部分组成:百分比符号(%)和指示符
%d %s %c %f 格式替代符:
d:data 数字 -- 对应位置参数必须是数字型
s:str 字符串 -- 对应位置参数必须是字符串
c:char 字符 -- 对应位置是显示相对应参数的第一个字符
f:float 浮点 -- 对应位置参数必须是数字型
2.1 printf实例
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66. 1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48. 6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47. 9876
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符 -表示左对齐,没有则表示右对齐,任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。 %-4.2f 指格式化为小数,其中.2指保留2位小数。
更多实例:
printf "%d %s\n" 1 "abc"
printf '%d %s\n' 1 "abc"
printf % s abcdef
printf % s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j
printf "%s and %d \n"
执行脚本,输出结果如下所示:
1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j
and 0
printf的转义序列
序列 说明 \a 警告字符,通常为ASCII的BEL字符 \b 后退 \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 \f 换页(formfeed) \n 换行 \r 回车(Carriage return) \t 水平制表符 \v 垂直制表符 \\ 一个字面上的反斜杠字符 \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效 \0ddd 表示1到3位的八进制值字符
$ printf "a string, no processing:<%s>\n" "A\nB"
a string, no processing:<A\nB>
$ printf "a string, no processing:<%b>\n" "A\nB"
a string, no processing:<A
B>
$ printf "www.runoob.com \a"
www. runoob. com $
read读取控制台的输入
read [选项] (参数)
-p:指定读取值时的提示符 -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。 参数:变量:指定读取值的变量名