《鸟哥的Linux私房菜:基础版》笔记

本文主要是关于《鸟哥的Linux私房菜:基础篇》中第四章到第十二章的笔记,有些自己已经理解或感觉很少会使用到的东西没有再做记录,笔记的顺序做过一定的整理,不是完全按照书上的顺序,此外还加入了一些在别的地方学到的Linux的常用知识。

在命令行中[]表示可选,<>表示必选,{}表示任选一个。

一、基础知识

  • Ctrl+Alt+[F1~F6]:在桌面按下可进入编号为1~6的文本模式(又称终端接口、terminal、console),再按下相同的按键返回图形化窗口。

  • command [-options] 参数1 参数2 ...:一般的指令格式

    • command:指令名

    • []:表示可选

    • -:表示是缩写,如-h

    • --:表示全称,如--help

    • 参数:命令的参数

      在某些特殊情况下选项和参数前面也有可能带有正号+

    在指令中无论空几格都视为一格。在Linux中大小写字母是不一样的。

  • Tab:具有命令补全和文件补全的功能

    • 在一个没打完的命令名后按两次Tab就可以显示所有以该字符串为前缀的命令名
    • 在一个没打完的文件名后按两次Tab就可以显示所有以该字符串为前缀的文件名
    • ---后面按两次Tab就可以显示改命令所有的可选项
  • Ctrl+其他键

    • Ctrl+c:终止当前进程的运行
    • Ctrl+z:挂起当前进程
    • Ctrl+d:键盘输入结束,即EOF,并且该组合键还可以当作exit命令来使用
    • Ctrl+a:让光标移动到整个指令串的最前面
    • Ctrl+e:让光标移动到整个指令串的最后面
    • Ctrl+?:清除本行指令
  • 文件有好多种,在输入ls -al显示文件的属性时,第一个字符为-则是一般文件,为d则是目录文件,为l则为快捷方式(连结档)

  • Linux 中的文件实际上没有扩展名,不过仍常根据文件的拓展名来区分文件的类型,如.sh是shell的脚本文件,.tar, .tar.gz, .zip, .tgz等为压缩文件

  • 文件名的第一个字符为.时表示为一个隐藏文件。

  • 根据约定好的标准,linux下不同的目录所存储的文件类型是一样的,以下目录中比较重要的有/etc, /bin, /dev, /lib, /sbin等。

    • /bin:存储可执行文件
    • /boot:存储开机会用到的文件
    • /dev:存储装置和接口设备
    • /ect:存储配置文件
    • /lib:存储函式库文
    • /media:存储可移除的装置,如软盘、光盘、DVD等
    • /mnt:存储暂时挂载的其他装置
    • /opt:存储第三方协议软件
    • /run:存储开机后产生的各项信息
    • /sbin:存储开机、修复、还原系统所需要的指令
    • /tmp:存储一般用户或正在执行的程序所产生的文件
    • /usr:存储各种软件
    • /var:存储变动性的数据
    • /home:默认的用户家目录
    • /root:root用户的家目录
  • 目录符号

    • .:本层目录
    • ..:上层目录
    • -:前一个目录
    • ~:当前用户的家目录
    • ~用户名:该用户的家目录
    • /root:root 用户的家目录
    • /home/用户名:普通用户的家目录
    • /:根目录,即所有目录最顶层的目录
  • vim是进阶版的vi,可以用不同颜色显示文字内容,并且具有程序编写的功能,可以根据程序的类型来进行显示。vi有三种模式:

    • 一般指令模式:用vi打开文件后默认进入一般指令模式
      • 30↓:往下移动30行
      • Ctrl+fPageDown:下一页
      • Ctrl+bPageUp:上一页
      • n+Space:光标右移n个字符,n表示数字
      • 0home:移动到这一行的最前面字符
      • $end:移动到这一行的最后一个字符
      • Shift+g:移动到文件的最后一行
      • gg:移动到文件的第一行
      • n+Enter:光标往下移动n行
      • /字符串:从光标处开始往下寻找字符串
      • ?字符串:从光标处开始往上寻找字符串
      • n:向下重复前一个搜寻操作
      • :n1,n2s/word1/word2/g:在第n1行和n2行之间搜寻word1并将其替换为word2
      • :1,$s/word1/word2/g:从第一行到最后一行寻找word1,并将其地换为word2
      • dd:删除光标所在的一整行
      • yy:复制游标所在的那一行
      • p:在光标的下一行粘贴
      • u:复原上一个动作
      • .:重做上一个动作
    • 编辑模式:按下i,I,o,O,a,A,r,R中的任意一个字母后进入编辑模式,按下ESC键退出
    • 指令行命令模式:输入:,?后进入指令行命令模式
      • :set nu:显示行号
      • :set nonu:取消行号
  • 在输入命令时,如果想输入多行,可以先输入\,然后立刻输入回车键,就可以在下一行继续写了。

  • vi 文件名当文件名存在时直接打开,不存在时新建。一般输入i进入编辑模式,输入ESC键退出编辑模式,输入:进入指令行命令模式,:wq!w是写入保存,q是退出,!是强制执行

  • 如果输入alias显示 vi=‘vim’,则说明在执行vi指令时,默认使用的是vim

  • 可以用vim 后面接多个文件来同时对多个文件进行编辑,在指令行模式下,:n是编辑下一个文件,:N是编辑上一个文件,:files是列出目前这个vim所开启的所有文件。在指令行模式下输入:sq [文件名]可以同时浏览多个文件,当加文件名时则在一个新窗口打开该文件,当不加文件名时,在同一个窗口内打开。Ctrl+w+↑切换到上面的窗口,Ctrl+w+↓切换到下面的窗口,Ctrl+w+q退出当前窗口。

  • linux下默认的shell是bash

  • /etc/profile:保存系统整体的设定的文件,在用户登录系统时,会自动调用/etc/profile然后该文件又会自动调用其他配置文件

  • ~/.bash_profile~/.bash_login~/.profile:当前用户的设定文件

  • source 配置文件名:不需注销即可把配置文件里的内容加载进来,source的作用同.

  • 通配符

    • *:0到无穷多个任意字符
    • ?:一个任意字符
    • [abcd]:取[]中的任意一个字符
    • -:在编码顺序内的所有字符,如[0-9]表示0-9共10个数字
    • ^:反向选择,如[^abc]表示除了abc之外的其他一个字符
  • 特殊字符

    • #:注释符号
    • \:转义字符
    • |:管线,分割两个管线命令的界定
    • ;:连续性命令的节点
    • $:取用变数的前导符
    • &:工作控制,将指令变为背景下工作
    • !:逻辑非
    • ():中间为子shell的起始和终止
    • {}:中间为命令区块的组合。
  • >>>是输出重定向,即将本来要输出到屏幕的内容输出到其他位置,如某个文件中,前者是覆盖写入,后者是追加写入,如ls -a / >~/rootfile将目录/下的所有文件名以覆盖的形式写入到~/rootfile中,文件不存在时会自动建立。1>1>>是标准输出的重定向,即将指令正常运行时的信息重定向输出,2>2>>是标准错误输出的重定向,即将指令运行错误时的信息重定向输出。&>可以将正确和错误信息输出到同一个文件中,并且顺序不会乱

  • <<<是输入重定向,即将本来要从键盘输入的内容改为由其他方式(如文件)输入,后者由文件输入之后必须通过键盘输入EOF之后才结束

  • cmd;cmd:不考虑指令相关性的连续指令下达

  • cmd1 && cmd2:若cmd1正确执行完毕,则继续执行cmd2,反之不执行cmd2

  • cmd1 || cmd2:若cmd1正确执行完毕,则不执行cmd2,反之执行cmd2

  • 管线命令|和连续下达命令;是不同的,它可以让第一个命令的正确输出信息作为第二个命令的输入,有多个命令时以此类推。不是所有的指令都可以当作后面的指令,它必须要有接收标准输入的能力

  • 在管线中当某些指令需要用到文件名来进行处理时,该标准输入和标准输出可以利用-来代替

  • &可以让命令在后台运行,如cp -r /usr/* test &/usr目录下的所有文件和目录复制到test目录下,该过程在后台完成

二、常用命令

  • exit:在命令行里输入可以实现当前用户的注销(退出当前命令行,非关机)

  • man readline:查看bash中的默认快捷键

  • date:显示日期和时间

  • cal [month] [year]:显示日历

  • bc:简单好用的计算器

    • + - * / ^ %:支持加、减、乘、除、指数、取余等,默认输出只支持整数;
    • 输入quit退出。
  • command --help:查看指令的帮助信息,即怎样使用

  • who:查看当前有哪些用户在线

  • shutdown|poweroff|halt:关机,常用第一个

  • shutdown [-krhc] [时间] [警告信息]:关机

    • -k:只发出警告信息不关机
    • -r:重新启动
    • -h:立即关机
    • -c:取消正在进行的shutdown指令
    • 时间:系统关机的时间,单位是分钟,默认为1分钟

    例:

    • shutdown -h now:立即关机
    • shutdown -h 20:25:下一个20点25分关机
  • reboot:可以重启

  • su 用户名:切换用户

    • exit:在进入新用户身份后,该指令可返回原用户身份
  • echo $PATH:查看环境变量,echo有显示、印出的意思,$表示后面接的是变量名

  • alias lm='ls -al':命令别名设定功能,将ls -al这个指令设定一个别名lm

    • 不加参数:查看所有有别名的命令
    • unalias lm:取消命令的别名。
  • history [n]:查看历史命令

    • n:数字,列出最近的n条命令
    • history [-c]:将所有历史命令全部清除
    • history [-raw] histfiles:查看历史命令
      • -a:将历史命令额外保存在histfiles文件中
      • -r:将histfiles文件中的内容读入到history记忆中
      • -w:将目前的history记忆内容写入到histfiles中。

    !number执行history记忆中的第number个命令,!command向前搜索以command为开头的指令并执行,!!执行上一个命令

  • df [-ah] [文件或目录名]:列出文件系统的磁盘使用量

    • -a:列出所有的文件系统
    • -h:自动以KB、MB、GB等合适的格式显示
  • du [-ah] [文件或目录名]:评估文件系统的使用量

    • -ah:如上,默认以KB为单位显示

    例:

    • du -sh *:查看当前目录下每个文件、文件夹的大小
  • gcc 文件名:对源代码进行预处理、编译、汇编和链接,默认输出为:可执行文件"a.out",编译后的文件"sourcename.o",汇编文件是"sourcename.s",预处理后的C源代码送往标准输出

  • gcc 文件名 -o 输出文件名 :指定输出文件的文件名

  • 对于多个文件联合执行的,除.h文件不需要编译外,其他文件都需要编译:

    • gcc -c example.c
    • gcc -c add.c
    • gcc -c modify.c
    • gcc -c delete.c

    编译后生成目标文件example.o, add.o, modify.o, delete.o

    • gcc example.o add.o modify.o delete.o -o example

    链接以上四个文件,生成可执行文件example

  • gcc 文件名 -l 路径名:如果头文件不在gcc的搜索路径中,可以用该选项指定额外搜索路径,如gcc helloworld.c -l /usr/include -o helloworld 将该目录加入到头文件的搜索路径中

  • wget [-bc] url:从指定URL下载

    • -b:在后台下载
    • -c:断点续传

    进入后台下载的任务,可以先找到其下载日志文件,然后用tail -f wget-logcat wget-log查看下载情况


##########目录操作命令:cd, pwd, mkdir, rmdir, ls##########


  • cd:变换目录(change directory),cd后不加任何目录表示回到家目录
  • pwd [-P]:显示当前目录(print working directory)
    • -p:显示确实的路径,而不是用链接路径
  • mkdir [-mp] 目录名:创建一个新的目录
    • -m:配置文件的权限,例:mkdir -m 777
    • -p:直接将所需的目录(包括上层目录)递归的建立起来
  • rmdir [-p] 目录名:删除空目录
    • -p:连同上层的空目录一起删除,若目录中有内容则无法删除,例:rmdir -p a/b/c
  • ls [-ahl] 文件名或目录名:显示文件或目录信息
    • -a:显示所有文件(包括以.开头的隐藏文件)
    • -h:将文件的容量以人类易读的方式显示
    • -l:长数据串行出,包含文件的属性与权限等数据

##########文件操作命令:cp, rm, mv, sort, uniq, wc##########


  • cp [-adfirsu] 源文件名 目标文件名:复制文件或目录

    • -a:相当于-dr --preserve=all
    • -d:若源文件为链接文件的属性,则复制链接文件属性而非文件本身
    • -f:强制的意思
    • -i:若目标文件已经存在,则在覆盖时会先进行询问
    • -r:递归持续复制,用于目录的复制行为
    • -s:复制为符号链接文件,即快捷方式文件
    • -u:当源文件比目标文件新或目标文件不存在时才进行更新或复制
    • --preserve=all:连同文件的各种属性也复制过去
  • rm [-fir] 文件名或目录名:移除文件或目录

    • -f:强制执行,可以忽略不存在的文件,不出现警告信息
    • -i:互动模式,删除前会先询问
    • -r:递归删除

    例:

    • rm -i bashrc*:删除以bashrc开头的文件或目录,其中*表示0到无穷任意多个字符
    • rm ./-aaa:删除名为-aaa的文件,不能直接运行rm -aaa,因为-会被当作选项。
  • mv [-fiu] 源文件名或目录名 目标文件名或目录名:移动文件或目录,或更名

    • -f:强制覆盖目标文件
    • -i:覆盖前先询问
    • -u:若源文件比目标文件新时才更新

    例:

    • mv 旧文件名 新文件名:实际是更名的效果
    • mv 文件名1 文件名2 目录名:当有多个文件或目录名是,最后一个一定是目录,其作用是将所有文件都移动到目录中
    • rm *:删除当前目录下的所有文件
    • rm *.txt:删除当前目录下的所有文本文档
  • sort [-fbnru] 文件名:排序

    • -f:忽略大小写
    • -b:忽略最前面的空格
    • -n:以纯数字(而不是字符)的方式排序
    • -r:反向排序
    • -u:对于相同的数据只显示一行
  • uniq [-ic] 文件名:对文本文件中的行去重,通常与sort命令配合

    • -i:忽略大小写
    • -c:在第一列显示重复次数
  • wc [-lwm] 文件名:统计文件信息

    • -l:仅列出行数
    • -w:仅列出多少字
    • -m:多少字符

##########读写文件命令:echo, vi, cat, tac, nl, head, tail, od, more, less##########


  • echo 内容 > 文件名:创建文件并写入文本内容

    例:

    • echo "love you" > zza.txt:将文本写入到zza.txt中
  • echo 内容 >> 文件名:向文件里追加内容,若文件不存在则新建

  • vi 文件名:打开或创建一个文本文件,并可以在vi界面输入内容

  • cat > 文件名:创建文件并在下一行写入文本内容,输入Ctrl+C表示输入结束

  • cat >> 文件名:在文件中追加内容

  • cat [-nv] 文件名:由第一行开始显示文件内容,cat是concatenate(连续)的缩写

    • -n:打印出行号,空白行也有行号
    • -v:列出一些看不出来的特殊字符
  • tac 文件名:从最后一行开始显示(是cat倒着写)

  • nl [-bnw] 文件名:显示的时候输出行号,catnl都不可以用PageDownPageUp进行翻页

    • -b a:无论是否为空行,都显示行号
    • -n ln:在屏幕的最左方显示行号
  • head [-n number] 文件名:从头开始显示指定行数的文件内容

  • tail [-f] [-n number] 文件名:从末尾开始显示指定行数的文件内容

    • -f:持续侦测文件内容,当文件正在写入时使用

    例:

    • tail -n +100 /etc/man_db.conf:显示第100行往后的内容
  • od 文件名:以二进制的方式读取文件内容

  • more 文件名:显示文件内容

    • Space:往下翻页
    • b:往上翻页
    • Enter:往下翻一行
    • /字符串:在当前显示内容中往下搜索字符串
    • :f:显示文件名和当前显示的行数
    • q:退出
  • less 文件名:除了more有的操作,还有

    • PageDown:往下翻页
    • PageUp]:往上翻页
    • ?字符串:向上搜索字符串
    • n:重复前一个搜索
    • g:跑到文件的第一行
    • Shift+g:跑到文件的最后一行
  • od [-t TYPE] 文件名:显示文件内容

    • -t a:用默认字符来输出
    • -t c:用ASCII字符来输出、
    • -t d:用十进制来输出
    • -t f:用浮点数来输出
    • -t o:用八进制来输出
    • -t x:用十六进制来输出

##########修改文件属性命令:touch, umask, chattr, lsattr##########


  • touch [-am] 文件名:修改文件或目录的时间属性

    • -a:仅修改access time
    • -m:仅修改modification time
  • umask [-S]:查看或指定当前用户在建立文件或目录时的权限默认值。

    • 不加参数:显示四个数字,分别表示root用户、当前用户、用户组和其他用户的权限,其中读权限r为4分,写权限w为2分,执行权限x为1分
    • -S:以人能读懂的方式显示当前用户、用户组和其他用户的权限,如drwxr-xr-x中的第一个d表示为目录,若为-表示为普通文件,当没有相应的权限时用-占位

    例:

    • umask 022:指定当前用户、用户组和其他用户的权限
  • chattr [+-=][ai] 文件名或目录名:配置文件隐藏属性

    • +:增加一个特殊参数
    • -:删除一个特殊参数
    • =:设定一定,且仅有后面的参数
    • -a:设定文件只能增加数据,不能删除和修改
    • -i:设定文件不能删除、改名或增加数据等。-ai只有root用户才能设定。
  • lsattr [-adR] 文件名或目录名:显示文件隐藏属性

    • -a:将隐藏文件的属性也显示出来
    • -d:如果是目录则只列出目录本身的属性而非目录内文件的属性
    • -R:连同子目录的数据也一并列出来

##########寻找文件命令:which, whereis, locate, find, grep##########


  • which [-a] command:寻找可执行文件/命令的路径
    • -a:将所有PATH目录中可以找到的指令均列出,默认是只列出第一个
  • whereis 文件或目录名:在一些特定的目录中寻找文件
  • locate [-i] 关键词:利用数据库来寻找文件,数据库一般是一天更新一次,可以用updatedb来更新数据库
    • -i忽略大小写
  • find [PATH] [option] [action]:在硬盘上寻找文件
    • option
      • -name filename:指定文件名
      • -size [+-]SIZE:搜索比SIZE大还是小的文件,c表示byte,k表示KB,m表示MB
      • -type TYPE:指定文件类型,f是一般文件,d是目录,l是连接档。
    • path:默认是全名,也可以带有*等
    • action:有执行和打印等,如find / -size +1M -exec ls -l {} \;,从-exec到;为find命令额外执行的动作,{}表示由find找到的内容,;是结束的标志。即先找到size小于1M的文件,然后用ls命令列出来
  • grep [-acinv] [--color=auto] '搜索字符串' 文件名:分析一行讯息,若有所需信息则取出来
    • -a:将二进制文件以文本文件的方式搜索
    • -c:计算找到‘搜索字符串’的次数
    • -i:忽略大小写
    • -n:顺便输出行号
    • -v:反向选择,即显示没有出现’搜索字符串’的那一行

##########压缩命令:gzip, bzip2, xz, tar##########


  • 压缩文件的拓展名大多是*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,其中.tar的文件只是打包过,没有经过压缩
  • gzip [-dtv#] 文件名:压缩/解压缩命令
    • 不加参数:压缩成扩展名为.gz的文件
    • -d:解压,解压后会删除源文件,可对扩展名为.Z, .zip, .gz 的文件进行解压
    • -t:检验压缩文件的一致性,检验文件是否出错
    • -v:显示压缩比等信息(压缩时用)
    • #:为数字的意思,代表压缩等级,-1最快但压缩比大,-9最慢但压缩比小
  • bzip2 [-dkv#] 文件名:压缩时生成的文件后缀名为.bz2,该命令的压缩率比gzip高,但速度慢些
    • -k:保留源文件而不删除
    • -dv#:和gzip相同
  • xz [-dlk#] 文件名:压缩时生成的文件后缀名为.xz,压缩率更高
    • -l:列出压缩文件的相关信息,如压缩前后的大小和压缩率等
    • -dk#bzip2相同

以上三个指令只能对单一的文件进行压缩,如果是多个文件则需要先进行打包,再进行压缩

  • zcat/zmore/zless:用来读取纯文本文档被压缩后的压缩文件

  • tar [-z|-j|-J] [-cv] [-f 待建立的新文件名] 要打包或压缩的文件名列表:打包或压缩

  • tar [-z|-j|-J] [-tv] [-f 已有的文件名]:查看打包文件包括哪些文件

  • tar [-z|-j|-J] [-xv] [-f 已有的文件名] [-C 目录名]:解打包或解压缩,C为大写

    -c, -t, -x不可同时出现在同一指令中

    • -z:用gzip进行压缩/解压缩
    • -j:用bzip2进行压缩/解压缩
    • -J:用xz进行压缩/解压缩

    -z, -j, -J不可同时出现在同一指令中

    • -v:在压缩/解压缩过程中将正在处理的文件名显示出来
    • -f 文件名:指定要处理的文件
    • -C 目录:指定要解压到的目录

    例:

    • tar -jxv -f filename.tar.bz2 -C 目录名:用bzip2将该压缩文件解压到指定目录中
    • tar -jcv -f /root/system.tar.bz2 --exclude=file1 --exclude=file2:不打包目录中的某几个文件

    如果不加[-z|-j|-J]则是进行打包,此时文件名要指定为*.tar,若添加[-z|-j|-J]进行压缩时文件名要指定为\*.tar.gz|\*.tar.bz2|\*.tar.xz,通过tar命令打包的文件被称为tarfile,通过tar命令压缩的文件被称为tarball


##########进程相关命令:ps, top, kill, jobs, fg, bg##########


  • ps [-alru]:(process state)查看进程状态,结果并不动态连续
    • -l:以表格形式输出
    • -u:按用户名启动时间的顺序来显示进程
    • -a:显示所有用户的所有进程
    • -r:显示运行中的进程
  • top [-bcdinpqsS]:动态件事系统任务,输出结果是连续的
    • -b:以批量模式运行,但不能接受命令行输入
    • -c:显示命令行,而不仅仅是命令名
    • -d 秒数:设置两次刷新时间的间隔
    • -i:禁止显示空闲进程或僵尸进程
    • -n 次数:设置更新次数,显示完后退出。
    • -p PID:仅件事指定进程的ID,PID是个数值
    • -q:不经任何延时就刷新
    • -s:安全模式运行,禁用一些效互指令
    • -S:累计模式,输出每个进程的总CPU时间
  • kill 进程号:删除进程
  • kill -9 PID:杀死正在占用显存的进程
  • fg 任务号:恢复到前台运行
  • bg 任务号:恢复到后台运行
  • jobs:查看被挂起的进程

##########用户管理命令:useradd, usermod, userdel, passwd, su, id, whoami, w##########


  • useradd [-degsu] 用户名:新建用户帐号(超级用户可用)
    • -d 目录名 用户名:指定用户登入时的主目录
    • -e 日期 用户名:帐号终止日期
    • -g 群组 用户名:指定账户所属的用户组
    • -s shell 用户名:指定账户登录后所使用的shell
    • -u uid 用户名:指定用户ID
  • usermod [-degsul] 用户名:修改用户属性(超级用户可用)
    • `-d 目录名 用户名指定用户登入时的主目录
    • -e 日期 用户名:帐号终止日期
    • -g 群组 用户名:指定账户所属的用户组
    • -s shell 用户名:指定账户登录后所使用的shell
    • -u uid 用户名:指定用户ID
    • -l 新用户名 旧用户名:修改用户名
  • userdel [-rf] 用户名:删除指定的用户帐号(超级用户可用)
    • -r 用户名:不仅删除帐号,还删除所属文件
    • -f 用户名:删除用户登入目录及目录中的所有文件
  • passwd [-dlus]:设置或修改用户口令及其属性
    • -d 用户名:删除用户的口令
    • l用户名:暂时锁定指定的用户帐号
    • -u 用户名:结束指定用户帐号的锁定
    • -s 用户名:显示指定用户帐号的状态
  • su 用户名:切换用户身份,超级用户可切换为普通用户,而不输入口令,普通用户则需要输入口令。使用exit可以返回原来的用户
  • sudo passwd root:然后输入两遍密码,即可更新root用户的密码
  • id 用户名:查看用户的UID、GID和用户所属组的信息,默认为当前用户
  • whoami:查看当前用户名
  • w:查看当前登录系统用户和详细信息

##########用户组管理类命令:groupadd, groupmod, groupdel##########


  • groupadd [-go] 用户组名:新建组群(超级用户可用)
    • -g:指定用户组ID
    • -o:允许组ID不唯一
  • groupmod [-gno] 用户组名:修改指定用户组的属性(超级用户可用)
    • -g:指定新的用户组ID
    • -n:指定新的用户组名字
    • -o:允许组ID不唯一
  • groupdel 用户组名:删除指定的用户组(超级用户可用)

##########文件权限管理命令:chmod, chown, chgrp##########


  • chmod 对象 操作符 权限:修改文件的访问权限

    • 对象
      • u:文件所有者
      • g:同组用户
      • o:其他用户
    • 操作符
      • +:增加
      • -:删除
      • =:赋予
    • 权限
      • r:读
      • w:写
      • x:执行
      • s:设置用户ID

    例:

    • chmod g-w file:取消同组用户对file文件的写入权限
    • chmod 755 pict:将pict目录的访问权限设置为775
  • chown [-cR] 所有者/组 文件名:将指定文件的拥有者改为指定的用户或用户组

    • -c:显示更改的部分的信息
    • -R:处理指定目录以及其子目录下的所有文件
  • chgrp [-cR] 组名 文件名:改变文件的所属用户组

    • -c:显示更改的部分的信息
    • -R:处理指定目录以及其子目录下的所有文件

三、不常用命令

  • man command:查看指令如何使用,进入man指令的功能后
    • Space:往下翻页
    • q:退出
    • /:后加字符串,可以向下搜索该字符串
    • ?:向上搜索字符串
    • n:搜索下一个
  • info:和man指令的作用差不多,它把文件数据拆成一个个独立页面(节点),并用超链接来跳转到不同的页面,每个节点前有*符号
    • U:跳到上一个节点处
    • N:跳到下一个节点处
    • ↑|↓:移动到某个节点
    • Enter:进入节点
    • Tab:在节点之间快速移动
    • q:退出info page
  • sync:让内存中尚未更新保存的数据写入到磁盘中
  • basename /etc/sysconfig/network:取最后的文件名,即network
  • dirname /etc/sysconfig/network:取目录名,即/etc/sysconfig
  • ln [-sf] 源文件 目标文件:制作连接档
    • -s:软连接,即快捷方式,默认是硬连接
    • -f:强制执行,若目标文件存在则将其删除后再建立
  • linux中的变量的设定name="my name is $NAME",如果变量内容有空格符,需要用单引号或双引号将其括起来,在双引号中$符后面的被当做是变量名,单引号中的特殊字符被当作纯文本。
  • 若为变量扩增内容时,可使用:PATH="$PATH":/home/binPATH=${PATH}:/home/binPATH=$PATH:/home/bin
  • unset 变量名:取消变量的设定
  • env:查看所有的环境变量
  • export [变量名]:将自定义变量转成环境变量,若不加变量名则默认全部环境变量
  • read [-pt] 变量名:从键盘输入变量
    • -p:后面接提示字符
    • -t:后面接等待的秒数
  • declare [-aixr] 变量名:宣告变量的类型
    • -a:将后面的变量定义为数组类型
    • -i:将后面的变量定义为整数类型
    • -x:将后面的变量变成环境变量
    • -r:将后面的变量设定为只读类型

一个变量有多个不同的内容时,内容之间由:隔开。

  • ${variable#/*local/bin:}:可以删除结尾是local/bin的变量内容,并且从左往右开始删除第一个

    • #:从最前面开始删除且只删除第一个
    • ##:把匹配到的全删除
    • %%%:与###类似,只不过是从后面开始删除
  • ${variable/old/new}:用新的值取代旧的值,若为//old/new则所有符合的内容都要取代

  • new_var=${old_var-content}:如果旧变量存在则将其值赋给新变量,否则新变量的值为为content

  • new_var=${old_var:content}:和前者类似,只是当旧变量为空时,新变量的值也取content

  • stty [-a]:设定终端机的输入按键代表的含义,stty 是 setting tty 的缩写

    • -a:将目前所有的syyt参数列出来。列出的内容中intr=^C中intr表示终止当前运行的程序,^表示Ctrl键,类似的kill表示删除当前指令行的所有内容,?表示退格键。
    • stty erase ^h设置向后删除字符的快捷键为Ctrl+h
  • cut -d '分隔字符' -f fields:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出

    • -d:后面跟分隔字符,与-f一同使用
    • -f:依据-d后面的分隔字符将一段讯息分为数段,用-f取出第几段
    • -c:以字符为单位取出固定字符区间,后面跟数字范围,如12-12-20。如echo ${PATH} | cut -d ':' -f 3,5将PATH信息以字符:分隔后,取出第3,5段
  • tee [-a] 文件名:读取标准输入的数据,并将其内容输出到文件和屏幕

    • -a以追加的方式写入到文件中
  • col [-x]:过滤控制字符

    • -x:将Tab键转换为对等的空格键
  • join [-ti12] 文件名1 文件名2:对比两个文件,将具有相同数据的行合并

    • -t:分隔符,默认是空格
    • -i:忽略大小写
    • -12:分别表示第1、2个文件要用哪个字段来分析,即用第1个文件的第几列和第2个文件的第几列相匹配

    如第一个文件中有"name:root",第二文件中有"name:zuzhiang",则以“:”为分隔符,合并后的结果是"name:root:zuzhiang"

  • paste [-d] 文件名1 文件名2:将两个文件对应的两行放到同一行,中间以Tab键隔开

    • -d:分割字符,默认是Tab
    • -:如果file部分写成 -,表示来自标准输入的意思
  • expand [-t] 文件名:将Tab键转成空格键

    • -t:后面接数字,表示一个Tab键由几个空格代替
  • split [-bl] 文件名 前缀:将大文件分区成为小文件

    • -b:后面接想要分区后的文件大小,可加单位b,k,m等
    • -l:以行数来进行分区
    • 前缀:前导符的意思,可作为分区文件的前导文字
  • xargs [-0epn] 命令:读入标准输入的数据,并以分隔符为界,将其分隔成为不同的参数,xargs后面没有接任何指令时,默认以echo来进行输出

    • -0:可将,\Space等字符还原成一般字符
    • -n:接参数的个数

    例:

    • xargs ls -al:然后输入两个文件夹的名称,则会用ls -al命令列出两个文件夹包含的文件信息

四、未整理

第十一章 正则表达式

正则表达式和通配符是完全不一样的东西

[:alnum:]表示英文大小写字符和数字,[:alpha:]表示任何英文大小写字符,[:blank:]表示空格键和Tab键,[:cntrl:]表示控制键,包括CR/LF/Tab/Del等,[:digit:]表示数字,[:graph:]除了空格键和Tab键之外的所有按键,[:lower:]表示小写字符,[:print:]表示任意可以被打印出来的字符,[:punct:]表示标点符号#$也是,[:upper:]表示大写字符,[:space:]表示任何会产生空白的字符,如空格键、Tab键、CR键等,[:xdigit:]表示十六进制的数字,包括0-9,a-f,A-F。

grep [-A] [-B] [--color=auto] '搜索字符串' filename-A后面可加数组,为after的意思,除了列出该行外,后续的n行也列出来,-B后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来。

[]表示搜索字符的集合,只表示一个字符,[^]表示反向选择,^表示定位在行首,$表示定位在行尾,.任意一个字符,*任意0到无穷多个字符,{number[,number]}表示重复字符数,如o\{2\}表示两个o,o\{2,5\}表示2到5个o,o\{2,\}表示2到 无穷个o。

^word待搜索字符串在行首,word$待搜索字符串在行尾,.任意一个字符,*任意0到无穷多个字符,[list]字符集合,从中任取一个,[n1-n2]字符范围,[^list]不是该字符结合的任意一个字符,\{n,m\}

sed [-nefr] [动作]分析标准输入,-n使用安静模式,标准输入只有在经过sed处理的那一行才会被显示在屏幕上,-e直接在指令行模式上进行sed的动作编辑,-f直接将sed的动作卸载一个文件内,-f filename可以执行filename中的sed动作,-rsed的动作支持的是延伸型正则表达式语法,-i直接修改读取的文件内容,而不是由屏幕输出。

[n1[,n2]]functionn1,n2表示进行动作的行数,function可以是a新增,c取代,d删除,i插入,p打印,s取代,通常搭配正则表达式。如sed 's/old_str/new_str/g'取代

+一个或多个字符,?0个或1个字符,|用or的方式找出数个字符串,()找出群组字符串,其中的字符串是有顺序的一个整体,()+多个重复的群组。

diff [-bBi] from-file to-file对比两个文件的差异,-b忽略一行当中仅有多个空白的差异,-B忽略空白行的差异,-i忽略大小写的不同。

cmp [-l] file1 file2以字节为单位对比两个文件,-l将所有的不同点的字节都列出来,预设是只会输出第一个不同的点。

patch -pN < path_file更新文件,-p表示取消几层目录的意思,patch -R -pN < patch_file还原文件,-R表示还原。

第十二章 Shell脚本

如果读取到一个回车符(CR)就尝试执行该行命令;如果一行的内容太多,可以用\Enter来延伸至下一行;#可作为注释符号。

脚本文件的扩展名为.sh,可以通过bash shell.shsh shell.sh来执行

exit 0表示退出脚本程序,var=$((运算内容))

read -p "Please input your name:" name
echo -e "\nYour name is: ${name}"
total=$((${a}*${b})) #a*b
exit 0

test -efd filename测试,-e该文件名是否存在,-f文件名是否存在并且为文件,-d文件名是否存在且为目录。

test -rwxs filename-rwx该文件名是否存在且具有可读、可写、可执行权限,-s该文件名是否存在且为非空白文件。

test file1 -nt|ot|ef file2-nt判断file1是否比file2新,-ot判断file1是否比file2旧,-ef判断file1和file2是否指向同一文件。

test n1 -eq n2关于两个整数之间的判定,-eq两数值相等,-ne两数值不等,-gtn1大于n2,-ltn1小于n2,-gen1大于等于n2,-len1小于等于n2

test -z string判断字符串是否为空串,若是则返回True,test -n string判断字符串是否为非空串,若是则返回True,test str1==str2判断str1是否等于str2,若相等则返回True,test str1!=str2判断str1是否不等于str2,若不相等则返回True

test -r filename -a|o -x filename多重条件判定,-a表示and,-o表示or,test ! -x file!表示取反。

[] 也可以起到判断的作用,但是其中的每个部分之间必须有空格来分割,如[ "${home}" == "${mail}" ]判断home与mail变量是否相等,变量最好用双引号括起来,不然可能会出错。

$#代表后面接的参数个数,$@代表"$1"、"$2"等,每个变量是独立的,需要用双引号括起来,$*代表"$1c$2c$3",其中c为分割字符,一般为空格。从0开始。shift [number]可以拿掉最前面的几个参数,默认是1个。

比如在test.sh文件中写

echo "Total parameter number is: $#" #参数个数
echo "Your whole parameter is: $@" #所有的参数
echo "The 1st parameter is:${1}" #第一个参数
shift 2
echo "Your whole parameter is: $@" #只输出第三个参数以后的参数
# 当在命令行运行sh test.sh command one two three时command就是第0个命令,依此类推
if [条件判断式1]; then #在条件判断时,$$表示and,||表示or
	指令
elif [条件判断式2]; then
	指令
else
	指令
fi #结束if之意
case $变量名 in
  第一个变量内容)
		程序段
		;;
  第二个变量内容)
		程序段
		;;
  *)
		变量内容为其他时执行的程序段
		exit 1
		;;
esac
function fname(){
	程序段
}
while [条件]
do
	程序段
done

until [条件]
do
	程序段
done

for var in con1 con2 con3 #在每次循环中var分别为con1,con2,con3
do
	程序段
done

for ((初始值;终止值;步长))
do
	程序段
done

sh [-nvx] scripts.sh执行或debug脚本文件,-n不执行脚本,仅查询语法问题,-v在执行脚本之前先将其内容输出到屏幕上,-x将使用到的脚本内容输出的屏幕上。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值