linux系统入门

1.退出shell:
在系统提示符下,按 Ctrl+D 组合键(不用回车)或者,输入exit命令(需要回车)

2.会话:用户使用一次计算机的全过程:从登录开始——->到退出结束

3.普通用户$
超级用户#
普通用户切换到超级用户:sudo su/su root
超级用户切换到普通用户:su + 用户名/exit

4.linux字符终端:ctrl+alt+F1F6
linux图形终端:ctrl+alt+F7
F12

5.命令行格式:$ <命令名> [-<选项>] [<参数>] <回车>(命令行字母大小写敏感)
行尾反斜线符号“\”,表示命令行未完,后面还有续行

6.最基础命令

who命令:查看系统信息
who -H
who –heading

cal命令:日历命令

  • cal 2016:显示2016年所有的月份日历
  • cal 5 2016:只显示2016年5月的日历
  • cal -m 2:当前年的2月的日历
  • cal -3:连续显示3个月的日历(当前月居中)
  • cal -3 -m 2:连续显示3个月的日历(2月居中)

man命令:联机手册
man + 命令名
man -k <keyword> 关键词查找命令

Linux 文件系统基础

1.linux系统的文件组成:

  • 普通文件 Regular Files
  • 目录文件 Directory Files
  • 特殊文件 Special Files:设备、管道、套接字等

2.“/”字符不能用于一般文件名中,根目录的名字只能是“/”

3.针对目录的操作:

  • 显示工作目录的目录名:pwd
  • 改变工作目录:cd
  • 创建目录:mkdir
  • 删除目录:rmdir
  • 目录列表:ls

4.特殊的文件名:“.”开头的文件,每个目录中都有的两个特殊文件:. 和..

5.d r w x r w x r w x
第1位:文件类型(- 普通文件 d 目录 l 符号链接 b 块设备 c 字符设备)
权限:r:可读 w:可写 x:可执行
第2-4位:u 文件所有者
第5-7位:g 文件组用户
第8-10位:o 其他用户

6.改变文件权限的命令chmod:

  • chmod 600 blabla
  • chmod g+w foo
  • chmod go-x foo
  • chmod u=rw,go-x foo
  • chmod a=rwx foo

7.针对文件的其他操作:

  • 显示文件内容:cat
  • 打印命令:lp, lpr
  • 取消打印:cancel
  • 打印机状态:lpstat
  • 删除文件:rm

深入Linux文件系统

1.cp命令

命令格式cp originalfile copiedfile

cp 命令的风险:如已经存在同名的目标文件,将会被覆盖!

cp的命令行参数:

  • −b 备份目标文件
  • −i 覆盖确认提示
  • −r 连同目录复制

2.删除命令:

  • rm 文件 删除文件
  • rm -r 目录(空或非空) 删除目录
  • rmdir 目录 删除空目录

3.链接

含义:指向文件的一个名字

类型:
a.链接(硬链接):硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

b.符号链接(软链接):删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。

c.创建:

  • a)创建链接:ln existed_file new_name
  • b)创建符号链接:ln -s existed_file another_name

文件内容操作

1.查看文件内容
(1)vim命令查看文件内容:vim -R fileNameview fileName命令一致
(2)cat命令查看文件内容:cat fileName

  • 若文件内容过多,采用滚屏阅读:ctrl+Q 恢复 ctrl+S 暂停
  • cat 查看多个文件内容:cat fileA fileB fileC

2.分页查看文件内容
(1)pg longfile
(2)more longfile
(3)less longfile
(4)h 帮助 q 退出 回车 下一行 空格 下一屏 b 回滚一屏

3.查看文件局部内容

(1)查看文件头部内容命令head:
a.head longfile:显示文件的头10行

b.head -n 26 longfile:显示文件的前26行

c.head -n -9 longfile:从头开始显示文件,除了尾部最后的9行

(2)查看文件尾部内容命令tail
a.tail longfile:显示文件的末尾10行

b.tail -n 26 longfile:显示文件的末尾26行

c.tail -n +9 longfile:跳过前部,从第 9 行开始显示文件

(3)查看文件中间内容的命令(head与tail命令的结合)
a.没有一个专用的命令

b.联合使用 head 和 tail 命令

c.显示文件的第 24 行到第 26 行:head -n 26 longfile | tail -n 3另一种方法tail -n +24 longfile | head -n 3

4.cut命令,输出指定的列(具体用法百度之)

5.合并文件内容cat
a.常用格式:cat fileA fileB fileC > file_all_in_one(符号“>”表示输出重定向符号“>>”表示输出重定向,追加方式)

b.按行合并文件paste命令:paste one two > one_and_two_side_by_side

6.复制文件的两种方式
a.cp fileA fileB

b.cat fileA > fileB

7.文件改名的三种方式
a.mv fileA fileB

b.cp fileA fileB
rm fileA

c.ln fileA fileB
rm fileA

vi编辑器初始

vi常用操作:

vi新建文件:vi newFile

vi以只读的方式打开文件:vi -R fileName

vi进入编辑模式:i

vi进入命令模式:ESC

vi保存文件并退出vi编辑器: :wq <回车> 或者 ZZ

vi退出编辑器

a.保存文件(不退出,继续编辑): :w <回车>

b.退出编辑器(若已保存,将退出;若有改动未保存,将拒绝退出)::q <回车>

c.保存文件并退出 vi 编辑器::wq <回车>

d.有改动,但不想保存,放弃所做的修改,坚决退出::q! <回车>

e.注意:编辑发生在缓冲区中,未经保存,文件内容不会变化

启动vi

a.通常启动 vi 的命令:vi <文件名>

b.在 vi 内打开原有文件::e <文件名>

c.在保存文件时,指定文件名:
:w <文件名>
:w! <文件名> 强制覆盖已有的同名文件
:wq <文件名>
:wq! <文件名>

vi中常用的编辑命令:

a.光标移动:
左:h 下: j 上: k 右: l

b.增:

  • i:进入编辑模式,进行插入文本(将内容插入到光标位置之前)
  • I:进入编辑模式,进行插入文本(将光标移动到行首,然后进行插入)
  • a:进入编辑模式,进行插入文本(将内容插入到光标位置之后)
  • A:进入编辑模式,进行插入文本(将光标移动到行尾,然后进行插入)
  • o:在当前行的下面开辟一行进行插入数据(相当于i+回车进行插入内容)
  • O:在当前行的上面一行进行插入数据

c.删除:

  • x:删除光标所在的字符(5x表示向右删除5个字符,从光标开始,并且包括光标)
  • X:删除光标前的一个字符(5x表示向左删除5个字符,不包括光标所在的字符)
  • dd:删除当前行(一整行)
  • D:从光标开始(包括光标),删除到行尾(光标往前移动一个字符)

d.改:

  • r:例如rA表示将当前光标的字符替换为A,4rA便是从当前光标开始(包括光标),往后的4个字符都变成A(即:AAAA)
  • R:例如5RAA:表示将AA覆盖光标内容,按ESC,会继续重复四次AA,但是以后面追加的形式插入(原数据:sOfdss假设光标在O字符上执行5RAA后:sAAAAAAAAAAdss)
  • c:c6G:表示将光标移动到第六行,将该行删除(变成一行空白),进行插入数据
  • cc:将当前行删除(变成一行空白),进行插入数据 + C:5C:从当前行开始,包括当前行的下面5行进行删除((变成一行空白)),相当于 5cc

5.vi中移动光标常用的手段

  • a.按单词移动光标:
  • w:将光标移动到下一个单词的开头(特殊符号算一个单词例如< , / >)
  • W:移动到非空白的单词的开头(例如:ds.aaa vdo 按w跳转到. 按W跳转到v )
  • e:与w相反将光标移动到单词的结尾
  • E:与W相反将光标移动到单词的结尾
  • ge:将光标移动到光标所在单词的开头,若光标本身就在单词的开头,那么光标 移动到上一个单词的结尾(相当于b)
  • b.移动到行首与行末
  • 0:将单词移动到行首(若行首为空格,光标移动到空格处)
  • ^:将单词移动到行首(若行首为空格,光标移动到空格后的第一个字符)
  • $:将单词一共到行末
  • c.移动到上一段、下一段:{, }
  • d.本行内移动到特定字符:(x 代表特定字符)
  • fx:向后查找特定字符x,查到到光标落在x上(只限于当前行查找)
  • Fx:向前查找特定字符x,查到到光标落在x上(只限于当前行查找)
  • tx:向后查找特定字符x,查到到光标落在x的前一个字符上(只限于当前行查找)
  • Tx:向前查找特定字符x,查到到光标落在x的后一个字符上(只限于当前行查找)
    执行完上面四条命令后,若当前行还有其他的x,可以使用,(后)或:(前)来代替该命令

6.组合命令:

a.动作类:
    d:删除
    y:复制(yank)
    p:粘贴(到光标右/下)
    P:粘贴(到光标左/上)
    c:更改
    s:替换

b.范围类:
    0:到行首
    `$`:到行尾
    e:到词尾
    w:到下一词首(包含词后的空)
    b:(退)到词首
c.进行组合(动作+范围):
    d$:删除到行尾
    d0:删除到行首
    d5G:将光标所在的行到第五行都删除
    ce:改变到词尾(删除到词尾,并进入文本输入模式)
    yw:复制到下一词首(包含本词后的空)
    yb:向后退方向复制到词首
d.动作字符重复
    dd:删除一行
    yy:复制一行
    cc:改变一行
    e.数字 + 动作 + 范围
    3dd:删除三行
    5yw:复制五个词
    4p:把临时寄存器中的内容在当前位置后,复制 4 次
    12P:把临时寄存器中的内容在当前位置前,复制 12 次
f.数字用于光标移动命令之前
    23l:向右移动 23 个字符
    5j:向下移动 5 行
    7w:向右移动 7 个单词
    4fe:本行之内,向右移到第 4 个字母 e 上
g.动作 + 数字 + 范围
    c3w:更改 3 个单词
    d2d:删除两行(本行及下方一行)
    y2w:复制 2 个单词
    5p:临时寄存器的内容在右方或本行下方复制 2 次
    3d2d:删除 6 行

7.搜索字符串(搜索字符使用fx,Fx,tx,Tx):

  • /string:向前搜索
  • ?string:向后搜索
  • *:向前搜索光标处的单词
  • #:向后搜索光标处的单词
  • n:下一匹配处
  • N:上一匹配处

8.undo机制:

  • u:取消上一次的改动(回退一步)
  • Ctrl-R:撤销一次回退操作
  • U:一次性取消最近在本行上的全部改动

深入vi编辑器

1.编辑命令的组合:

a.移动行: dd 删除一行 移动到目标处 p 贴上去
b.复制行: yy 复制一行到临时缓冲区 移动到目标处 p 贴上去
c.移动单词:dw 删除一个词 ⇒ 光标移动到恰当位置 ⇒ p 或 P 贴上去
d.复制单词:yw 复制一个词 ⇒ 光标移动到恰当位置 ⇒ p 或 P 贴上去

2.更大范围的光标移动

  • 到达指定行:gg(文首), 1G(=gg), G(文末), 58G(58行)
  • 滚屏:Ctrl-U Ctrl-D (半屏)Ctrl-F Ctrl-B (全屏)
  • 移动到配对的括号: %
  • 按句子移动:(, )
  • 按段落移动:{, }
  • 搜索:使用 / 或者 ? 搜索命令
  • 搜索:使用 * 或者 # 搜索光标所在的单词

3.vi缓冲区

a.介绍
    无名缓冲区:d c s x y 等命令删去或复制的内容自动放入此缓冲区
    数字缓冲区:1 -- 9,9 个数字编号的缓冲区形成 FIFO 缓冲队列
    字母缓冲区:a -- z,26 个字母编号的缓冲区内容不滚动
    使用双引号作为引用缓冲区的标志:"1 "2 "3 …"9 ; "a "b "c …"z
b.使用
    相邻的两行复制到缓冲区 a 当中:"a2yy 或"ay2y
    把缓冲区 b 当中的内容,粘贴到光标之后:"bp
    把缓冲区 4 当中的内容粘贴到光标之前:"4P
    当前位置的 3 个单词删去,存放到缓冲区 c 之中,打算以后再用:"cd3w

4.多重文件编辑

  • :n 切换到下一个文件
  • :wn 保存当前文件,并切换到下一个文件
  • :n! 放弃当前文件的改变,并切换到下一个文件
  • :N 切换到上一个文件
  • :ar 列出在编辑队列中,有哪些文件
  • :e 开始编辑一个新文件
  • :sp 以多窗口的方式打开一个编辑窗
  • :wq 保存并结束一个文件
  • :wqa 保存并结束所有文件

5.使用 ex 兼容命令

a.基本知识
    .  当前行
    n  编辑器的第n行,行号从一开始顺序编排
    $  最后一行
    %(等同于1,$) 从第一行到最后一行,即所有行
    +n或者-n 表示当前行的位移
    (例如将当前行为100行定位到103行,可以表示为 .+3或者+3或者+++)
            g 表示所有
b.基本使用
    :15,100d                删除15到100行的正文
    :.,+5d                删除当前行和它后面的5行(注意一共删除了六行)
    :%s/oldstr/newstr/g    将所有的 oldstr 替换为 newstr。
    :%s/oldstr/newstr/gc    将所有的 oldstr 替换为 newstr。交互确认。
    :s/oldstr/newstr/g        将本行所有的 oldstr 替换为 newstr。
    :7,23s/oldstr/newstr/g    将 7 到 23 行所有的 oldstr 替换为 newstr。
    :.,$s/oldstr/newstr/    从当前行到最后一行,所有行第一个oldstr 替换为newstr

6.缩写和宏
a.缩写::ab i18n internationalization
b.取消缩写::unab i18n
c.录制宏::map Q kyypj
d.取消指定的宏::unmap Q

Linux shell

1.shell基础

a.shell是什么?
    本质上,shell 是 Linux 系统上的一个应用程序
    实际上,shell 已成为 Linux 系统的一个组成部分
    用户可以选择不同的 shell
b.shell功能
    命令行执行、文件名替换、I/O 重定向、管道、环境控制、后台处理、脚本支持
c.重定向
    > 输出重定向符号
    >> 输出重定向符号(添加方式)
    < 输入重定向
    << 输入重定向(脚本文件的嵌入文档)
    d.通配符
    ? 匹配任意单个字符
    * 匹配 0 到多个字符构成的串
    [list] 匹配所列出的字符
    [!list] 匹配未列出的字符

2.管道

a.管道是进程之间的一种通信机制,管道两侧的命令并发执行
b.管道运用实例
    a)目录/etc 下共有多少个文件?
    方法一:  ls -1 /etc > temp
    wc -l temp 
    rm temp
    方法二:  ls -1 /etc | wc -l 
    b)显示当前小时数
    date --rfc-3339=second | cut -c 12-13
    或者:date|cut -c 31-32
    c)文件名替换(你想删除所有以“report”开头的文件)
    rm -rf report*
    d)如果把 rm report*误打成 rm report *的后果(文件全部删除)

3.文件查找命令:find

a.find作用:find命令
   在目录树中查找文件或子目录的位置。可以使用文件通配符作为              查找的依据。
b.find命令格式:find 路径名 搜索选项 动作选项
c.find用法示例:
    find . -name "*.c" -print   将以后缀为.c的文件的名字打印输出至屏幕
    find . -name "*.bak" -exec rm {} \; 将查找到的后缀为.bak的文件进行删除

4.转义与引用

a.转义
    echo 3 < 5        输出:bash: 5: 没有那个文件或目录
    echo 3 \< 5        输出:3 < 5  
    echo 5 > 3         无输出,将5写入文件名为3的文件中
    echo 5 \> 3        输出:5 > 3
    echo 5 \\> 3        无输出,将5 \写入文件名为3的文件中
    echo 5 \\\> 3        输出:5 \> 3
    echo 5 \\\\> 3        无输出,将5 \\写入文件名为3的文件中
b.引用
    echo "5 > 3"        输出:5 > 3
    echo '5 > 3'       输出:5 > 3
    echo '5 \\\> 3'        输出:5 \\\> 3
c.单引号与双引号的细微差别
    双引号对括住的 shell 变量引用,被 shell 展开。
    单引号对所括住的一切内容,均严格保持原貌。
    echo "This is $HOME"        输出:This is /root
    echo ‘This is $HOME’        输出:‘This is $HOME’
    echo *                    输出所有文件名
    echo “*”                    输出:*
    echo ‘*’                输出:*

过滤程序和正则表达式

1.过滤

a.过滤作用的命令
    head, tail, cut,wc, more, less
b.分离输出:tee 命令
    ls /home > dir.list        无输出,但home下文件名全写入dir.list文件中
    ls /home | tee dir.list    ls正常输出,同时home下文件名全写入dir.list文件中
c.排序命令: sort
    a)sort 命令既可以对文件的内容排序,又可以对其他命令的输出排序。
      排序之后的内容,可以写入文件,也可送标准输出。
    b)注意以下有用的排序选项:
        -b 忽略前导空格
        -d 用字典顺序排序
        -f 忽略大小写的区别
        -n 数字以数值大小排序
        -r 逆序(缺省为升序)
        -o 输出改为指定文件,而非标准输出设备
        -k 指定排序的关键字位置
    c)举例:
        将/etc目录下文件名排序:ls /etc/|sort -d
d.滤除重复行:uniq(如何使用)
经过 uniq 的过滤,相邻的重复行,仅仅显示一次。
uniq 还有滤掉空行的功能
e.搜索命令:grep
    a)grep 命令可以从一个或一批文件之内容中,搜索含有特定字符串的
    行。
    b)grep命令格式:grep < 字符串模式 > < 接受搜索的文件名 >
    如果文件中含有与“字符串模式”相匹配的行,该行就会被显示出来。
    c)grep选项
        -c 显示每个文件中匹配的行数
        -i 不分大小写
        -l 显示具有相匹配行的文件名,而不是匹配行本身
        -n 显示匹配行的行号
        -v 显示不匹配的行(匹配的行不显示)
        -r 搜索范围包含以下各级子目录中的文件
d)举例:
    grep include ./sdn.c     显示存在include字符串的的行的具体信息
    grep --c include ./sdn.c     显示存在include字符串的的行的个数
    grep 'more'  *.tex | grep ' 格式' 若查找到信息过多,可进行两次筛选

2.正则表达式(Regular Expression)

a.组成:
    普通字符:A, B, …a, b …1, 2 …
    _(下划线)、␣(空格)…
    特殊字符(不可打印字符):换行符:\n,回车符:\r,制表符:\t,
    元字符:
    . 任意单个字符(除换行符外)
    ˆ 行的开头(或者表示逻辑非)
    $ 行的结尾
    \ 转义字符:    \$ 代表 $    \ˆ 代表 ˆ    \\ 代表 \ 自身

b.常用的字符集
    [a-z] 所有的小写字母
    [A-Z] 所有的大写字母
    [a-zA-Z] 所有的字母
    [0-9] 所有的数字
    [0-9\.\-] 所有的数字,句号和减号
    [ \f\r\t\n] 所有的白字符

c.基本用法
    ^ab        匹配以ab开头的字符串
    ab$        匹配以ab结尾的字符串
    [tT]he    匹配the或者The
    [^Tt]     匹配除T或t之外的其他单个字符(此时^代表NOT)

d.限定符(限定符指明在其前面的字符或子表达式出现的次数)
    a)*    之前的字符或子表达式重复零次或多次
    zo* 匹配 z, zo, zoo, zooo
    b)+ 一次或多次
    zo+ 匹配 zo, zoo,zooo   不匹配 z
    c)?    零次或一次
    do(es)? 匹配 do 或 does
    does? 匹配 doe 或 does
    d)
        {n}        匹配确定的 n 次
        o{2}    不匹配 Bob 中的 o 匹配 food 中的两个 o
        {n,} 至少 n 次
        {,m} 至多 m 次
        {n,m} n 到 m 次
        * 等价于 {0,}
        + 等价于 {1,}
        ? 等价于 {0,1}

e.定位符(定位符指明字符或子表达式所在的位置)
    a)构成
        ^ : 行首
        $ : 行尾
        \< : 单词的开始处
        \> : 单词的结尾处
        \b : 单词的边界(首或尾)
        \B : 不在单词的边界
    b)使用
        \<it\> 只匹配单词”it”,不匹配”sitting”当中的”t”

f.选择
    a)使用
    圆括号()表示一个组,某些应用场合中用 \(和 \) 代替
    竖线|表示 “OR”,用来表示选择的含义。
    b)举例
        ab+c     表示 a 后面有一个 b 或多个 b 并跟有 c,yabcw, abbc57 符合
        (ab)+c    表示一个或多个字符串 ab 并跟有 c,zabcd, ababc 符合
        industr(y|ies) 相当于 industry|industries,匹配 industry, 也匹配 industries

g.引用
    & : 整个正则表达式所匹配的内容
    \n : 第 n 个子表达式所匹配的内容
    \1 第一个子表达式匹配的内容
    \2 第二个子表达式匹配的内容
    h.vi编辑器中使用正则表达式
    025 nanjing
    027 wuhan
    命令:
    :%s/0[0-9]* \+[a-zA-Z]\+/X&Y/             在每一行前面加上X,末尾加上Y
    :%s/\(0[0-9]*\) \+\([a-zA-Z]\+\)/\2 \1/        将数字列和字母列互换

Linux shell(续)

1.命令序列:分号
同一个命令行中的多个命令,用分号分隔被分号隔开的命令,会依次执行

2.命令编组:括号对 ( )
( ls; date; pwd ) > outfile与ls; date; pwd > outfile区别

3.后台执行:元字符“&”

a.如果命令行的尾部,用 & 符号结束,表示,该命令放到后台执行。
b.什么命令适合放在后台执行;
    耗时较长
    运行时无交互
    数据往往来源于文件
    结果一般输出到文件
c.举例
    find . -name xyz.xyz -print > result &
    (date; find / | sort ; date) 2> /dev/null > result &

4.前后台作业控制

a.基础操作
    命令行末尾,加 & 字符,作业放到后台执行
    组合键 [Ctrl-Z]:把正在前台执行的作业挂起,并置于后台
    fg 命令:把后台作业调到前台执行:fg <作业号>
    bg 命令:让后台挂起的作业,继续在后台执行:bg <作业号>
    jobs 命令:了解当前作业情况
b.作业终止
    终止后台作业:kill <作业号>
    终止前台作业:[Ctrl-c]
    要想在用户退出后,作业继续运行:nohup <想要继续执行的命令>

5.进程状态显示命令:ps

  • a.UNIX 风格的常用选项:
  • ps -ef
  • -e 代表选择所有进程
  • -f 代表完整的输出格式
  • b.BSD 风格的常用选项:
  • ps auxw
  • a 代表选择所有进程
  • u 代表显示出进程所有者
  • x 代表包括不拥有终端的进程
  • w 代表输出更详尽的信息

6.进程控制
终止进程:kill 进程号
对顽固的进程,发出不同信号:kill -信号值 进程号
了解系统支持哪些信号值:kill -l

7.shell 变量

a.定义:通常,为用户的应用程序,提供关于运行环境信息的那些变量,被成为环境变量。
b.shell 的常用环境变量
    HOME 用户主目录        DISPLAY 当前显示器
    PWD 当前目录        SHELL用户缺省 shell
    TERM 终端类型        PATH 搜索路径            USER用户名
c.shell 变量操作
    set 显示全部的 shell 变量
    XYZ=10 设置 XYZ 变量的值为 10
    unset XYZ 清除 XYZ 变量
    echo $XYZ 引用 XYZ 变量的例子,变量之前的 $ 符号不能缺少
d.shell 的配置
    a)对 shell 的配置是通过配置文件进行的。
    全局配置文件 /etc/profile
    用户配置文件 $HOME/.profile
    b)Linux 缺省的shell是bash,bash的配置文件,是用户主目录之下的隐藏文件:.bash_profile