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 <<END > 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