linux基础知识1

1. 硬盘分区
  分区类型:主分区,扩展分区,逻辑分区;
  分区规则:
    一个硬盘只能有1到4个主分区;
    一个硬盘只能有1个扩展分区;
    一个硬盘的主分区和扩展分区最多只能有4个;
    扩展分区只能用来包含逻辑分区;
    一个硬盘主分区和扩展分区的分区号为1~4,逻辑分区的分区号从5开始;
  必须分区:
    / (根分区)
    swap (交换分区,此分区没有挂载点,其作用相当于虚拟内存,供操作系统进行使用)
  推荐分区:
    /boot (启动分区,当此分区空间不足时,系统将无法启动,推荐200M)
  相关链接:
    https://code.csdn.net/snippets/592005/master/linux-挂载新硬盘及分区设置/raw
    https://code.csdn.net/snippets/593828/master/linux-将多个硬盘合并到一个挂载点下/raw

2. 常用目录
/bin,  /usr/bin  普通用户可以执行的系统命令
/sbin, /usr/sbin 只有root才能执行的系统命令
/boot  存放启动文件
/dev   存放设备文件
/etc   存放配置文件
/home  普通用户家目录
/lib   存放系统库文件
/mnt   挂载目录(U盘, 文件服务器等)
/media 挂载目录(光盘)
/proc, /sys 系统内存信息
/tmp   临时目录
/var   系统文档

3. 常用命令
3.1 目录和文件
3.1.1 查询当前目录
  pwd
3.1.2 切换当前目录
  cd [目录]
  # cd   进入当前用户的家目录
  # cd ~ 进入当前用户的家目录
  # cd - 进入上次切换前的目录
  # cd .. 进入上级目录
3.1.3 查询目录中的内容
  ls [选项] [文件或目录]
  # -a 显示所有文件,包括隐藏文件
  # -l 显示详细信息
  # -h 人性化显示文件大小
  # -i 显示文件索引号
  # -d 查看目录属性
  # ls -l 等价于 ll
  示例:
  my_suse:/disk1 # ll -ih
  total 12K
  137014 -rw-r--r-- 1 root users 5.8K Feb  5 00:54 a.txt
  137018 drwxr-xr-x 2 root users 4.0K Feb  5 00:40 logs
  # 137014, 137018 表示文件的索引号
  # -rw-r--r-- 里面的第一个 '-' 表示文件
  # -rw-r--r-- 里面的前面三个 rw- 表示所属用户可读、可写、可执行
  # -rw-r--r-- 里面的中间三个 r-- 表示同组用户可读
  # -rw-r--r-- 里面的后面三个 r-- 表示其他用户可读
  # drwxr-xr-x 里面的第一个 'd' 表示目录
  # 1, 2 表示文件被引用的次数(文件默认是1,目录默认是2)
  # root 表示所属用户
  # users 表示所属组
  # 5.8K 表示文件大小
3.1.4 创建目录
  mkdir [-p] 目录名
  # -p 递归创建
3.1.5 创建文件
  touch 文件名称      # 文件大小为0
  echo "" > 文件名称  # 文件大小不为0
3.1.6 创建链接文件
  ln [-s] 原文件 链接文件
  # 默认硬链接,只能用于链接文件
  # -s  软链接,用于链接文件或目录
  示例:
  # /disk2 需要已存在,否则执行失败
  # /disk2/logs_link 存在时,  会创建一个链接文件 /disk2/logs_link/logs,并指向 /disk1/logs
  # /disk2/logs_link 不存在时,会创建一个链接文件 /disk2/logs_link,并指向 /disk1/logs
  ln -s /disk1/logs /disk2/logs_link
3.1.7 复制文件或目录
  cp [选项] [原文件或目录] [目标文件或目录]
  # -r 递归复制目录及其内容
  # -p 连带文件属性复制
  # -d 若原文件是链接文件,则复制链接属性
  # -a 相当于 -pdr
  示例:
  # /disk2 需要已存在,否则执行失败
  # /disk2/a.txt 存在时,复制时会直接覆盖此文件
  cp -r /disk1/a.txt /disk2/a.txt
  # /disk2 需要已存在,否则执行失败
  # /disk2/logs 存在时,  会将/disk1/logs 复制为 /disk2/logs/logs
  # /disk2/logs 不存在时,会将/disk1/logs 复制为 /disk2/logs
  cp -r /disk1/logs /disk2/logs
3.1.8 移动文件或目录
  mv [原文件或目录] [目标文件或目录]
  示例:
  # /disk2 需要已存在,否则执行失败
  # /disk2/logs 存在时,  会将 /disk1/logs 移动为 /disk2/logs/logs
  # /disk2/logs 不存在时,会将 /disk1/logs 移动为 /disk2/logs
  mv /disk1/logs /disk2/logs
3.1.9 删除文件或目录
  rm [选项] [文件或目录]
  # -r 删除目录
  # -f 强制删除
  # rmdir 这个命令只能删除空白目录
  rmdir [目录名]
3.2 搜索命令
3.2.1 搜索命令所在路径及帮助文档所在位置
  whereis [选项] 命令名
  # -b 只查找可执行文件
  # -m 只查找帮助文件
  示例:
  whereis ls    # 查找 ls 命令所在路径及帮助文档所在位置
  whereis -b ls # 查找 ls 命令所在路径
  whereis -m ls # 查询 ls 命令帮助文档所在位置
3.2.2 搜索命令所在路径
  which 命令名
3.2.3 在系统中搜索文件
  find [搜索范围] [搜索条件]
  # 缺点:避免大范围搜索,会非常耗费系统资源
  # 通配符
  *  # 匹配0个或多个任意字符
  ?  # 匹配1个任意字符
  [] # 匹配1个中括号内的任意字符
  # 逻辑关系
  ! expr         # 逻辑非,True if expr is false.
  expr1 -a expr2 # 逻辑与,等价于 expr1 expr2
  expr1 -o expr2 # 逻辑或
  # 搜索条件
  # -type  按文件类型进行搜索(-type d 表示目录, -type f 表示文件)
  # -name  按文件名搜索,大小写敏感
  # -iname 按文件名搜索,大小写不敏感
  # -user  按文件所有者搜索
  # -size  按文件大小搜索
           -10M 表示小于10M的文件
           10M  表示等于10M的文件
           +10M 表示大于10M的文件
  # -mtime [+-]n 查找最后一次被修改时的时间在 n 天前的文件
           -10 表示10天以内被修改的文件
           10  表示10天当天被修改的文件
           +10 表示10天之前被修改的文件
  # -inum  按文件索引号进行搜索
  # -exec command '{}' \; 对搜索结果执行 command 命令
  示例:
  # 搜索 /disk1 目录中以 test 开头的日志文件
  find /disk1 -name "test*.log"
  
  # 搜索 /disk1 目录中除 test3.log 之外的所有文件
  find /disk1 -type f -a ! -name test3.log
  
  # 使用正则表达式进行搜索
  find /disk1 -regextype posix-egrep -regex '.*\.(xml|log)'
  
  # 搜索 /disk1 下的目录,同时排除 work, logs 目录本身
  find /disk1 -mindepth 1 -type d -a ! \( -path /disk1/work -o -path /disk1/logs \)
  
  # 搜索 /disk1 下的目录,同时排除 work, logs 目录本身及子文件
  find /disk1 -mindepth 1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o \( -type d  -print \)
  
  # 搜索 /disk1 下的文件,同时排除 work, logs 目录本身及子文件
  find /disk1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o \( -type f  -print \)
  
  # 搜索 /disk1 下的目录和文件,同时排除 work, logs 目录本身及子文件
  find /disk1 -mindepth 1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o -print
3.2.4 在文件中搜索字符串
  grep [选项] 字符串 文件名
  # -i 忽略大小写
  # -v 排除指定字符串
3.3 帮助命令
  man 命令           # 查看命令的帮助文档
  命令 --help        # 查看命令选项的帮助
  help shell内部命令 # 查看 shell 内部命令的帮助(例如:help cd)
3.4 压缩与解压缩
3.4.1 .zip 格式
  zip    压缩文件名 源文件     # 压缩文件
  zip -r 压缩文件名 源目录     # 压缩目录
  unzip  压缩文件名 [-d exdir] # 解压缩
3.4.2 .gz 格式
  # 不能压缩目录本身,只能压缩目录中的子文件
  gzip 源文件                  # 压缩为.gz格式,不保留源文件
  gzip -c 源文件 > 压缩文件    # 压缩为.gz格式,保留源文件
  gzip -r 目录                 # 压缩目录下的所有子文件,不压缩目录
  gzip -d 压缩文件             # 解压缩文件,不保留压缩文件
  gunzip 压缩文件              # 解压缩文件,不保留压缩文件
  gzip -c -d 压缩文件 > 源文件 # 解压缩文件,保留压缩文件
  gunzip -c 压缩文件 > 源文件  # 解压缩文件,保留压缩文件
  gunzip -d 目录               # 解压缩目录中的所有压缩文件
3.4.3 .bz2 格式
  # 不能压缩目录
  bzip2 源文件                 # 压缩为.bz2格式,不保留源文件
  bzip2 -k 源文件              # 压缩为.bz2格式,保留源文件
  bzip2 -d 压缩文件            # 解压缩文件,不保留压缩文件
  bunzip2 压缩文件             # 解压缩文件,不保留压缩文件
  bzip2 -k -d 压缩文件         # 解压缩文件,保留压缩文件
  bunzip2 -k 压缩文件          # 解压缩文件,保留压缩文件
3.4.4 tar打包
  tar -cvf 打包文件名 源文件1 源文件2 ...
  # -c 打包
  # -v 显示过程
  # -f 指定打包后的文件名
  tar -tvf 打包文件名          # -t表示查看tar包中内容,但不解包
  tar -xvf 打包文件名          # -x表示解开tar包
  tar -xvf 打包文件名 -C /tmp/ # -C 表示解包到指定目录
3.4.5 .tar.gz 格式
  tar -zcvf 压缩包名.tar.gz 源文件  # 压缩,  -z 表示压缩为.tar.gz格式
  tar -zxvf 压缩包名.tar.gz         # 解压缩,-x 表示解压缩
3.4.6 .tar.bz2 格式
  tar -jcvf 压缩包名.tar.bz2 源文件 # 压缩,  -j 表示压缩为.tar.bz2格式
  tar -jxvf 压缩包名.tar.bz2        # 解压缩,-x 表示解压缩
3.5 关机和重启
3.5.1 shutdown命令
  shutdown [选项] 时间
  # -h 关机,同时关闭电源
  # -r 重启
  # -c 取消前一个关机/重启命令
  shutdown -r +10 # 10分钟后重启
  shutdown -c     # 取消前一个关机/重启命令
3.5.2 其他命令
  logout    # 注销当前用户
  reboot    # 立即重启
  init 6    # 立即重启,不安全(不会保存正在运行的程序)
  poweroff  # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
  init 0    # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
  halt -p   # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
  # init n  表示调用系统级别,linux有以下7个系统级别
  0 关机
  1 单用户
  2 不完全多用户,不含NFS服务
  3 完全多用户
  4 未分配
  5 图形界面
  6 重启
  # runlevel 查看当前系统级别
3.6 挂载命令
3.6.1 查询与自动挂载
  mount    # 查询系统中已挂载的设备
  mount -a # 根据/etc/fstab文件中的内容,自动挂载
3.6.2 mount 命令
  mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
  特殊选项有如下几种:
  rw/ro         # 读写/只读,默认rw
  suid/nosuid   # 是否具有suid权限,默认suid
  dev/nodev     # 可读/不可读文件系统上的字符或块设备
  exec/noexec   # 是否允许执行文件系统中的可执行文件,默认exec
  auto/noauto   # 执行mount -a命令时,是否按照/etc/fstab文件内容自动挂载,默认auto
  user/nouser   # 是否允许普通用户挂载,默认nouser
  async/sync    # 异步/同步,默认async
  default       # 相当于rw,suid,dev,exec,auto,nouser,async
  atime/noatime # 访问分区文件时,是否更新文件的访问时间,默认atime
  remount       # 重新挂载已经挂载的设备
3.6.3 挂载光盘
  # 创建挂载点
  mkdir /mnt/cdrom
  # 挂载光盘(/dev/cdrom是/dev/sr0的软链接)
  mount /dev/sr0 /mnt/cdrom 或者 mount /dev/cdrom /mnt/cdrom
  # 查看光盘中的内容
  ll /mnt/cdrom
  # 卸载光盘
  umount /dev/sr0           或者 umount /mnt/cdrom
3.7 查看登录用户信息
3.7.1 w命令,查看当前登录用户信息
  w [用户名] 
  # 命令输出:
    USER   登录用户名
    TTY    登录终端
    FROM   登录ip
    LOGIN@ 登录时间
    IDLE   闲置时间
    JCPU   和该终端连接的所有进程占用的时间
    PCPU   当前进程所占用的时间
    WHAT   当前正在执行的命令
3.7.2 who命令,查看当前登录用户信息
  who 
  # 命令输出:用户名,登录终端,登录时间(登录ip)
3.7.3 last命令,查看当前登录和过去登录的用户信息
  last 
  # 命令输出:用户名,登录终端,登录ip,登录时间,退出时间(在线时长)
  last | tac  # 将last命令的输出倒序显示
3.7.4 lastlog命令,查看所有用户的最后一次登录信息
  lastlog

4. Shell 基础
   cat /etc/shells # 查看系统支持的shell类型
   echo $SHELL     # 查看当前用户的shell类型
4.1 echo 命令
   echo "Hello world"                   # 输出字符串
   echo -e "Hello\nworld"               # -e 表示支持控制字符(例如:\r\n\t\b\v)
   echo -e "\e[1;31m Hello world \e[0m" # 带颜色的输出
   # 有如下几种常用颜色
   30m = 黑色, 31m = 红色, 32m = 绿色, 33m = 黄色
   34m = 蓝色, 35m = 粉红, 36m = 青色, 37m = 白色
4.2 编写并执行脚本
   my_suse:~ # vi hello.sh
   ---------- 文件内容如下 ------------
   #!/bin/bash
   #This is the first comment.
   echo "Hello world."
   ------------------------------------
   my_suse:~ # chmod 700 hello.sh
   my_suse:~ # ./hello.sh 
   Hello world.
   my_suse:~ # /root/hello.sh 
   Hello world.
   my_suse:~ # sh hello.sh 
   Hello world.
   my_suse:~ #
   备注:
     1. shell脚本中#表示注释;
     2. 但第一行的 #!/bin/bash 不是注释,表示当前文件的shell类型
4.3 别名
   alias               # 查看系统中所有别名
   alias 别名='原命令' # 设置新的别名
   unalias 别名        # 删除别名
   例如:
   my_suse:~ # alias hello='echo "Hello world"'
   my_suse:~ # hello
   Hello world
   my_suse:~ #
   # 命令执行顺序
     1. 用绝对路径或相对路径执行的命令
     2. 别名
     3. Bash的内部命令
     4. 按照$PATH环境变量定义的目录匹配到的第一个命令
4.4 快捷键
   Ctrl + l  # 清屏 = clear
   Ctrl + c  # 强制终止当前命令
   Ctrl + a  # 光标移动到行首
   Ctrl + e  # 光标移动到行尾
   Ctrl + u  # 从光标所在位置删除到行首
   Ctrl + z  # 把命令放入后台
   Ctrl + r  # 从历史命令中搜索
   Tab       # 自动补全命令或文件
             # 如果只有一个候选命令时,按一下Tab键自动补全
             # 如果存在多个候选命令时,按两下Tab键自动列出候选命令
4.5 历史命令
   history [选项] 
   # -c 清空历史命令
   # -w 把缓存中的历史命令立即写入~/.bash_history文件
        默认是在当前用户退出时才将缓存中的历史命令写入~/.bash_history文件
   # 历史命令默认保存数量为1000,可通过以下命令查询
   cat /etc/profile | grep HISTSIZE
   # 历史命令有以下几种调用方式
     1. 使用上下箭头调用历史命令
     2. 使用 !n 重复执行第 n 条历史命令
     3. 使用 !! 重复执行上一条历史命令
     4. 使用 !字符串 重复执行最后一条以该字符串开头的历史命令
4.6 重定向
4.6.1 标准输入输出
   设备    | 设备文件名  | 文件描述符 | 类型
   键盘    | /dev/stdin  |   0        | 标准输入
   显示器  | /dev/stdout |   1        | 标准输出
   显示器  | /dev/stderr |   2        | 标准错误输出
4.6.2 输出重定向
   # 标准输出重定向
   命令 > 文件            # 覆盖方式,将命令正确输出重定向到文件中
   命令 >> 文件           # 追加方式,将命令正确输出重定向到文件中
   示例:date > test.log
   
   # 标准错误输出重定向(注意:'>'前后都没有空格)
   错误命令 2>文件        # 覆盖方式,将命令错误输出重定向到文件中
   错误命令 2>>文件       # 追加方式,将命令错误输出重定向到文件中
   示例:cat /home 2>test.log
   
   # 标准输出和标准错误输出同时重定向
   命令 > 文件 2>&1       # 覆盖方式
   命令 >> 文件 2>&1      # 追加方式
   命令 &>文件            # 覆盖方式
   命令 &>>文件           # 追加方式
   命令 >> 文件1 2>>文件2 # 追加方式
   
   # 如果不想要任何输出,可以使用下面的命令(/dev/null代表linux中的黑洞)
   命令 &>/dev/null
4.6.3 输入重定向
   # wc 命令
   wc [选项] [文件名]
   # -c 统计字节数
   # -w 统计单词数
   # -l 统计行数
   
   # 把文件内容作为输入
   命令 < 文件名   # 示例:wc -l < /etc/passwd
   命令 <<标识符   # 起始标识符
   ...
   标识符          # 结束标识符,要处于最后一行的行首,前面没有空格
   示例:
my_suse:~ # wc -l < a
> b
> END
2
my_suse:~ #
4.7 管道符
4.7.1 多命令顺序执行
   命令1; 命令2   # 多个命令顺序执行,命令之间没有逻辑关系
   命令1 && 命令2 # 逻辑与,命令1执行成功时,命令2才会被执行
   命令1 || 命令2 # 逻辑或,命令1执行失败时,命令2才会被执行
4.7.2 管道符
   命令1 | 命令2  # 命令1的正确输出作为命令2的操作对象
                  # 命令2需要能够操作命令1的正确输出
   示例:
     ll /etc | more 
     netstat -an | grep ESTABLISHED | wc -l
4.8 通配符
4.8.1 通配符
   ?  # 匹配1个任意字符
   *   # 匹配0个或多个任意字符
   []  # 匹配1个中括号中的任意字符,[a-z]表示任意一个字母,[0-9]表示任意一个数字
   [^] # 匹配1个不在中括号中的任意字符,[^0-9]匹配一个非数字的字符
4.8.2 特殊符号
   '   # 单引号,在单引号中的所有特殊符号都没有特殊含义(例如:$ 和 `)
   "   # 双引号,在双引号中的所有特殊符号都没有特殊含义,但以下3个例外:
       # $ 表示调用变量的值, ` 表示引用命令, \ 表示转义符
   `   # 反引号,反引号括起来的内容是系统命令,在Bash中会先执行它。
       # 和$()作用一样,推荐使用$(),因为反引号非常容易看错
   $() # 和反引号作用一样,用来引用系统命令
   #   # 在Shell脚本中,#开头的行代表注释
   $   # 用于调用变量的值,例如 $name 表示调用变量name的值
   \   # 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符
   示例:
   name=100 ; echo $name
   name=200 ; echo '$name'
   name=300 ; echo "$name"
   name=400 ; echo "\$name"
   name=`pwd` ; echo $name
   name=$(pwd) ; echo $name
----------------------------------------------------------------
相关链接
http://www.imooc.com/learn/175 

--END

你可能感兴趣的:(linux基础知识1)