基础

本文为阅读鸟哥的 linux 私房菜笔记,仅记录个人觉得基础内容。想进一步深入同学请点击这里阅读

文件权限和目录配置

文件有拥有者、群组、其他人

文件类型rwx
文件读到文件内容修改文件内容执行文件内容
目录读到文件名修改文件名进入该目录的权限
  1. 文件属性

    ls -a显示所有的文件(包括隐藏的文件及以.开头命名的文件)

    ls -al显示所有文件(包括文件的详细信息) 在这里插入图片描述

    • 第一列:文件的权限

      第一位:d代表是文件夹,-代表是文件,l连接档(相当于 windows 快捷方式)(其余类型 goggle)

      后续每三

      位【r(可读)w(可写)x(可执行)】:分别代表文件拥有者、群组、其他人的文件权限。没有权限为-

    • 第二列:连接到此节点的数量

    • 第三列:文件拥有者

    • 第四列:文件所属群组

    • 第五列:文件大小(bytes)

    • 第六列:最后修改日期

    • 第七列:文档名字

  2. 改变文件权限、拥有者、群组

    -R : 进行递归的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

    • chgrp :改变文件所属群组

      chgrp [-R] 群组 dirname/filename

    • chown :改变文件拥有者

      chown [-R] 帐号名称 文件或目录 chown [-R] 帐号名称:群组名称 文件或目录

    • chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性

      • 数字类型改变文件权限

        1. r:4 w:2 x:1

          例如当权限为: [-rwxrwx---] 分数则是:

          > owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= --- = 0+0+0 = 0

        2. u:拥有者 g:群组 o:其他人 a:所有

          chmod u=rwx,go=rx .bashrc

      • 符号改变文件权限

        chmod +x ./test给 test 增加可执行权限 在这里插入图片描述

  3. /~区别(详细介绍

    /为系统根目录,~为默认的用户家目录,~xxx 为 xxx 的家目录 在这里插入图片描述

文件与目录管理

  1. 绝对路径和相对路径

    • 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
    • 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
  2. 目录操作

    • . 代表此层目录

    • .. 代表上一层目录

    *

    变量键盘读取与宣告

    mkdir [-mp] 目录名称
    mkdir -p test1/test2/test3/test4 (test2不存在使用-p)
    mkdir -m 711 test2
    选项与参数:
    -m :设置文件的权限
    -p :帮助你直接将所需要的目录(包含上层目录)递归创建起来!
    • ~account 代表 account 这个使用者的主文件夹(account 是个帐号名称)

    • cd:变换目录

    • pwd:显示目前的目录

      参数-P :显示出确实的路径,而非使用链接 (link) 路径

    • mkdir:创建一个新的目录

    • rmdir:删除一个空的目录

      rmdir [-p] 目录名称
      选项与参数:
      -p :连同上层空的目录也一起删除
      不是空目录使用`rm -r 目录` -r是递归删除
  3. 环境变量

    • env 列出当前 shell 环境下所有环境变量

    • set列出自定义变量和环境变量

    • export将自定义变量转成环境变量

  4. 复制、移动、删除

    1. 复制

      cp [-adfilprsu] 来源文件(source) 目标文件(destination)
      cp [options] source1 source2 source3 .... directory
      选项与参数:
      -a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
      -d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
      -f :强制(force)复制,覆盖已经存在的目标文件而不给出提示;
      -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
      -l :不复制文件,只是生成链接文件
      -p :除复制文件的内容外,还把修改时间和访问权限也复制到新文件中(备份常用);
      -r :递归复制文件夹下所有内容(常用)
      -s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
      -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
      --preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
      最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
    2. 移动

      mv [-fiu] source destination
      mv [options] source1 source2 source3 .... directory
      选项与参数:
      -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
      -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
      -u :若目标文件已经存在,且 source 比较新,才会更新 (update)
    3. 删除

      rm [-fir] 文件或目录
      选项与参数:
      -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
      -i :互动模式,在删除前会询问使用者是否动作
      -r :递归删除文件所有内容
  5. 获取文件名和目录名

    • 获取文件名

      basename /etc/sysconfig/network => network

    • 获取目录名

      dirname /etc/sysconfig/network => /etc/sysconfig

  6. 查看文件内容

    • cat 由第一行开始显示文件内容
    • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
    • nl 显示的时候,顺道输出行号!
    • more 一页一页的显示文件内容
    • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    • head 只看头几行
    • tail 只看尾巴几行
    • od 以二进制的方式读取文件内容!
  7. 文件预设权限:umask 在这里插入图片描述

    • 若使用者创建为“文件”

      默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下: -rw-rw-rw-

    • 若使用者创建为“目录”

      由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下: drwxrwxrwx

    umask 无权限为 7 分,有权限为 0 分。022 => rwx-rx-rx

    chmod 有 r(4)w(2)x(1)权限为 7 分

  8. 查看文件类型 file

    查看文件的基本数据(属于 ASCII、data 文件、binary 、有没有使用到动态函数库 (share library),

    file 文件地址

  9. 脚本文件名的搜寻

    which [-a] command 搜索某个命令的完整文件名 //-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

  10. 文件搜索

    • whereis

      whereis 文件或目录名

      whereis搜索快,因为只在特定文件夹下搜索

    • locate/updatedb

      locate keyword 查找带 keyword 的所有文件

      locate搜索文件很快,是在数据库中搜索。每天执行一次,新建立的文件想要被搜索到。使用updatedb命令更新数据库

    • find(搜索最慢)

      find [PATH] 文件查询某个路径下的文件

文件与文件系统的压缩、打包和备份

  1. 常见被压缩的文件后缀名

    *.Z compress 程序压缩的文件;
    *.zip zip 程序压缩的文件;
    *.gz gzip 程序压缩的文件;
    *.bz2 bzip2 程序压缩的文件;
    *.xz xz 程序压缩的文件;
    *.tar tar 程序打包的数据,并没有压缩过;
    *.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
    *.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
    *.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩
  2. gzip、bzip2、xz 讲目录内所有文件分别进行压缩

  3. tar 将多个目录或文件打包成一个大文件

    tar [-z|-j|-J] [cv] [-f 待创建的新文件名] filename... 打包与压缩
    tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] 查看文件名
    tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] 解压缩
    选项与参数:
    -c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
    -t :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
    -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
    特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。
    -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
    -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
    -J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
    特别留意, -z, -j, -J 不可以同时出现在一串命令行中
    -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
    -f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记)
    -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
    其他后续练习会使用到的选项介绍:
    -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
    -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
    --exclude=FILE:在压缩的过程中,不要将 FILE 打包!
    • 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
    • 查 询:tar -jtv -f filename.tar.bz2
    • 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

数据流重导向

  1. >

    1. 文件不存在,系统会自动的将它创建起来
    2. 文件存在,文件内容清空,再将数据写入!
  2. >>

    1. 文件不存在,系统会自动的将它创建起来
    2. 文件存在,添加到文件最后!
  3. 2>

    >不同的是,2>存的是错误内容。>存的是正确内容

  4. 2>>

    同上,将错误内容追加到文件最后

  5. 命令行执行判断依据(; && ||

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

    • cmd1 && cmd2

      1. 若 cmd1 执行完毕且正确执行(\$?=0),则开始执行 cmd2。
      2. 若 cmd1 执行完毕且为错误 (\$?≠0),则 cmd2 不执行。
    • cmd1 || cmd2

      1. 若 cmd1 执行完毕且正确执行(\$?=0),则 cmd2 不执行。
      2. 若 cmd1 执行完毕且为错误 (\$?≠0),则开始执行 cmd2。

管线命令

  1. 将历史记录翻页形式打开

    history | less

查漏补缺

  1. alias别名

    alias查看当前所有别名

    alias 别名='xxxx'

    unalias 别名取消别名

  2. 历史命令history

    历史命令存在~/.bash_history

    history [-raw] histfiles
    选项与参数:
    n :数字,意思是“要列出最近的 n 笔命令列表”的意思!
    -c :将目前的 shell 中的所有 history 内容全部消除
    -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
    则默认写入 ~/.bash_history
    -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
    -w :将目前的 history 记忆内容写入 histfiles 中!
    !number
    !command
    !!
    选项与参数:
    number :执行第几笔指令的意思;
    command :由最近的指令向前搜寻“指令串开头为 command”的那个指令,并执行;
    !! :就是执行上一个指令(相当于按↑按键后,按 Enter)
  3. login shellnon-login-shell

    • login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。
      • 你要由 tty1 ~ tty6 登陆,需要输入使用者的帐号与密码,此时取得的 bash 就称为“ login shell ”啰;
      • login shell 其实只会读取这两个配置文件:
        1. /etc/profile:系统整体的设置,你最好不要修改这个文件;
        2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设置,你要改自己的数据,就写入这里!
    • non-login shell:取得 bash 接口的方法不需要重复登陆的举动
      • 你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入帐号与密码,那个 bash 的环境就称为 non-login shell 了。
      • 你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入帐号密码, 那第二个 bash (子程序) 也是 non-login shell 。
  4. source读入环境配置文件的指令

    修改了 zsh 配置之后,执行此命令就不必注销登录来使配置生效了

  5. 指令搜寻的顺序

    1. 以相对/绝对路径执行指令,例如“ /bin/ls ”或“ ./ls ”;
    2. 由 alias 找到该指令来执行;
    3. 由 bash 内置的 (builtin) 指令来执行;
    4. 通过 \$PATH 这个变量的顺序搜寻到的第一个指令来执行。
  6. awksedgrep

  7. shell 脚本和 expect 脚本第一行的#!/bin/bash#!/usr/bin/expect -f

    默认使用的 shell 为 bash

    默认使用 expect 并且从文件读取命令

  8. scp 命令用于 Linux 之间复制文件和目录

  9. df -hl查看磁盘大小,已用、剩余空间

参考

  1. linux 命令大全