Linux

简介

Linux内核官网www.kernel.org

  • 内核版本2.6.18 3.16等等
  • 发行版本 redhat==conterOS ubuntu debian等等
  • 使用的自由
    • 绝大多数开源软件免费
  • 研究的自由
    • 可以获得软件源代码
  • 散步及改良的自由
    • 可以自由传播、改良甚至销售

应用

  • 基于Linux服务器
  • 嵌入式应用 手机,接顶盒等等

Linux和Windows的不同

  • Linux严格区分大小写
  • Linux中所有内容以文件形式保存,包括硬件
  • 以前内容皆文件
  • Linux不靠扩展名区分文件类型 (->权限)
    • 压缩包 .gz .bz2 .tar.bz2 .tgz登
    • 二进制软件包:.rpm
    • 网页文件: *.html .php
    • 脚本文件: *.sh
    • 配置文件: *.conf

字符界面

  • 占用系统资源更少
  • 减少出错、被攻击的可能性越少

挂载 给每个分区分配挂载点

安装

  • 服务器最小化安装

安装日志

  • /root/install.log: 储存了安装在系统中的软件包及其版本信息
  • /root/install.log.syslog: 储存了安装过程中留下的事件记录
  • /root/anaconda-ks.cfg: 以Kickstart配置文件的格式记录安装过程中设置的选项信息

常用的目录的作用

  • /根目录
  • /bin 命令保存目录(普通用户就可以读取的命令)
  • /sbin 超级权限才能读取的命令
  • /boot 启动目录,启动相关文件
  • /dev 设备文件保存目录
  • /etc 配置文件
  • /home 普通用户家目录
  • /lib 系统库保存目录
  • /mnt 系统挂载目录
  • /media 挂载目录
  • /proc和/sys 目录不能直接操作,保存的是内存的过载点
  • /usr 系统软件资源目录
    • /usr/bin/ 系统命令(普通用户)
    • /usr/sbin/ 系统命令(超级用户)
  • /var 系统相关文档内容

常用命令(文件处理命令)

命令的基本格式

  • ~代表当前所在位置 家目录,初始目录
  • #代表超级用户
  • $代表普通用户
  • 命令 [选项] [参数] -a -all简化

文件格式

  • rw- r– r– 分为三组,三组的权限
  • -文件类型(- 文件, d 目录, | 软连接文件)
  • rw- r– r–
  • 所有者 g所属着 o其他人
  • r读 w写 x执行
  • .文件为隐藏文件

pwd 显示当前所在路径 print working dictionary

mkdir -p [目录名]

  • -p 递归创建 /s/p 这样的

cd 进入目录

  • ~进入当前用户目录,家目录
  • ..上一级目录
  • .当前目录

rmdir [目录] remove empty dir

  • 只能删除空白目录

rm -rf 不询问是否删除

  • -r 删除目录
  • -f 强制

cp [选项] [源文件] [目标目录]

  • -r 复制目录
  • -p 连带文件属性复制
  • -d 若源文件是链接文件,则复制链接属性
  • -a 相当于 -pdr

mv 剪切或者改名命令

  • 源文件或者目录和目标文件目录 在一起,就是改名

链接命令

  • ln -s [源文件] [目标文件]
  • 命令英文愿意: link
  • 功能描述:生成链接文件
    • 选项: -s 创建软链接
  • 硬链接特征 (i 文件索引点)
    1. 拥有相同的i节点和储存block块,可以看作是同一个文件
    2. 可通过i节点识别
    3. 不能跨分区
    4. 不能准对目录使用
    5. 引用计数加1,同一个文件
  • 软链接特征
    • 类似于windows快捷方式
    • 拥有自己的i节点和block块,但是数据块中只保存源文件的文件名和i节点号,并没有实际的文件数据
    • Irwxrwxrwx I 软连接
      • 软连接文件的权限都为rwxrwxrwx
    • 修改任意文件,另一个都改变
    • 删除源文件,软连接不能使用

文件搜索命令

  • 文件搜索命令locate
  • 命令搜索命令whereis与which
  • 文件搜索命令find
  • 字符串搜索命令grep
  • find命令与grep命令的区别

locate (速度相对较快)

  • locate 文件名。 在后台数据库中按照文件名搜索,搜索速度更快
  • /var/lib/mlocate #locate命令所搜索的后台数据库
  • updatedb 更新数据库, 可能是一天更新一次,开机更新一次

whereis与which 搜索命令的命令

  • where 只能搜索系统的命令
    • -b 只查看命令所在位置
    • -m 只差看帮助文档
  • which 只能搜索系统的命令
    • 看命令所在位置,还能查到看别名

find命令

  • find [搜索范围] [搜索条件]

  • find / -name install.log

    • 避免大范围搜索,会非常耗费系统资源
    • find是在系统当中搜索符合条件的文件名。如果需要匹配,通常使用通配符匹配,通配符是完全匹配
  • * 匹配任意字符

  • ? 匹配任意一个字符

  • [] 匹配任意一个中括号内的字符 find -name ab[cd]

  • find /root -inname install.log 就不区分大小写了

  • find /root -user root 按照所有者搜索

  • find /root -nouser 查找没有所有者的文件

  • find /var/log/ -mtime +10 查找10天前修改的文件

    • -10 10天内修改的文件
    • 10 10天当天修改的文件
    • +10 10天前修改的文件
    • atime 文件访问时间
    • ctime 改变文件属性
    • mtime 修改文件内容
  • find . -size 25k 查找文件大小是25k的文件

    • -25k 小于25KB的文件 注意是小写的k,兆字节用大写的M
    • 25k 等于25KB的文件
    • +25k 大于25KB的文件
    • find . -size 25 不加单位就是扇区搜索
  • find /root -inum 262422 查找i节点是262422的文件

  • find /etc -size +20k -a -size -50k

    • 查找/etc/目录下,大于20kb小于50kb的文件
    • -a and 逻辑与,两个条件都满足
    • -0 or 逻辑或,两个条件满足一个即可
  • find /etc -size +20k -a -size -50k -exec ls -lh {} ;

    • 查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息
    • -exec/-ok 命令{} \; 对搜索结果执行操作,"{} \;"为标准格式,只要有-exec就要写它

grep命令

  • grep [选项] 字符串 文件名
    • 在文件档中匹配符合条件的字符串
    • -i 忽略大小写
    • -v 排除指定字符串

find 与 grep区别

  • find命令,在当前系统中搜索符合条件的文件名,如果需要匹配。使用通配符匹配,通配符是完全匹配
  • grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配

帮助命令

  • man帮助等级

    1. 查看命令的帮助
    2. 查看可被内核调用的函数的帮助
    3. 查看函数和函数库的帮助
    4. 查看特殊文件的帮助(主要是/dev目录下的文件)
    5. 查看配置文件的帮助
    6. 查看游戏的帮助
    7. 查看其他杂项的帮助
    8. 查看系统管理员可用命令的帮助
    9. 查看和内核相关文件的帮助
  • man 命令 -> 获取指定命令的帮助 man ls

  • man -f 相当于 whatis 命令

  • man -k 相当于 apropos命令 eg: apropos passwd

  • shell内部命令帮助

    • help 只能获取shell内部命令的帮助 eg: whereis cd. help cd
    • 是安装的软件,就有路径,比如 /bin/ls ,如果 没有比如cd 就是shell内部命令。『whereis cd』
  • info 命令

    • 回车 进入子帮助页面 (带有*号标记)
    • u 上层
    • n 下一帮助小节
    • p 上一帮助小节
    • q 退出

压缩与解压缩命令

.zip .7z .rar .gz .bz2 .tar.gz .tar.bz2等等

.zip格式

  • zip 压缩文件名 源文件名 eg: zip xxx.zip xxx
  • zip -r 压缩目录 源文件
  • unzip 解压缩文件

.gz格式

  • gzip 源文件 压缩为.gz格式的压缩文件,源文件会消失
  • gzip -c 源文件 > 压缩文件
    • 压缩为.gz 格式,源文件保留
    • eg: gzip -c cangls > cangls.gz
  • gzip -r 目录
    • 压缩目录下所有的子文件,但是不能压缩目录
  • gzip -d 解压缩
  • gunzip 解压缩

.bz2格式

  • bzip2 源文件 不保留源文件
  • bzip2 -k 源文件
    • 压缩之后保留源文件

      注意:bzip2命令不能压缩目录

  • bzip2 -d 解压缩 -k保留源文件
  • bunzip2 -k保留源文件

.tar.gz .tar.bz2

先压缩成.tar 再压缩成.gz / .bz2

tar -cvf 打包文件名 源文件

  • -c 打包

  • -v 显示过程

  • -f 指定打包后的文件名

  • -x 解压缩 eg -xvf

  • -t 只查看

  • .tar.gz (z)

    • -z 压缩为.tar.gz格式 tar -zcvf xx.tar.gz 源文件
    • -x 解压缩为.tar.gz格式 tar -zxvf xx.tar.gz
  • .tar.bz2 (j)

    • -j 压缩为.tar.bz2格式 tar -jcvf xx.tar.bz2 源文件
    • -x 解压缩为.tar.bz2格式 tar -jxvf xx.tar.bz2
  • -C 位置

关机和重启命令

shutdown [选项] 时间

  • -c 取消前一个关机命令
  • -h 关机
  • -r 重启

其他关机命令 (非安全,建议shutdown)

  • halt (非安全,建议shutdown)
  • poweroff (非安全,建议shutdown)
  • init 0 (非安全,建议shutdown)

其他重启命令

  • reboot 相对安全
  • init 6 非安全

系统运行级别

查看系统运行级别
cat /etc/inittab 默认级别
runlevel

  • 0 关机
  • 1 单用户
  • 2 不完全多用户,不包含NFS服务
  • 3 完全多用户
  • 4 未分配
  • 5 图形界面
  • 6 重启

其他命令

挂载命令

用户登录查看和用户交互命令

  • mount 查询系统中已经挂载的设备
  • mount -a 依据配置文件/etc/fstab的内容,自动挂载

挂载命令格式

mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点

  • -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
  • -0 特殊选项:可以指定挂载的额外选项
  • #!/bin/bash 最好必须写
  • 默认是可执行 exec.
  • mount -0 remount, noexec /home 重新挂载/boot分区, 并使用noexec权限
  • remount 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限

挂载光盘

  • mkdir /mnt/cdrom/ 建立挂载点
  • mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
  • mount /dev/sr0 /mnt/cdrom
  • umount /mnt/cdrom 必须卸载

挂载U盘

  • fdisk -i 查看U盘设备文件
  • mount -t vfat /dev/sdb1 /mnt/usb/
  • 注意:Linux默认不支持NTFS文件系统

用户登录查看命令

  • w 用户名 命令输出如下
    • USER: 登录的用户名
    • TTY: 登录终端
    • FROM: 从哪个IP地址登录
    • LOGIN@: 登录时间
    • IDLE: 用户闲置时间
    • JCPU: 指的是和该终端廉洁的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
    • PCUP:是指当前进程所占用的时间
    • WHAT: 当前正在运行的命令
  • who 用户名
  • last 默认是读取 /var/log/wtmp文件数据,输出如下
    • 用户名
    • 登录终端
    • 登录IP
    • 登录时间
    • 退出时间(在线时间)
  • lastlog 默认是读取/var/log/lastlog文件内容
    • 用户名
    • 登录终端
    • 登录ip
    • 最后一次登录时间

Shell部分

Shell概况

  • 命令行解释器,计算机可不认识命令,只认识0101. 为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启东、挂起、挺直甚至是编写一个程序
  • SHell还是一个功能相当强大的编译语言,易变写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Sjell中可以直接调用Linux系统命令

Shell的分类

  • Bourne Shell: 从1979起Unix就开始使用Bourne Shell, 主文件名为sh。
  • C Shell: 主要在BSD版的Unix系统中使用,其语言和C语言像相似而得名
  • Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要有sh、ksh、Bash、psh、zsh; C家族主要包括csh、tcsh

脚本执行方式

  • echo
  • vi hello.sh (#!/bin/bash) 可以调用系统命令
  • 赋予执行权限,直接运行
    • chmod 755 hello.sh
    • ./hello.sh
  • 通过Bash调用执行脚本
    • bash hello.sh

别名与快捷键

  • alias cp = ‘cp -i’, mv = ‘mv -i’, rm = ‘rm -i’等等,提示,是否xxx?
  • unalias 删除别名
  • vi ~/.bashrc 写入环境变量配置文件
  • source ~/.bashrc 可以让配置重新生效

命令生效顺序

  1. 用绝对路径或相对路径执行的命令
  2. 执行别名
  3. 执行Bash的内部命令
  4. 执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

快捷键

  • ctrl+c 强制终止当前命令
  • ctrl+l 清屏
  • ctrl+a 光标移动到命令行首
  • ctrl+e 光标移动到命令行尾
  • ctrl+u 从光标所在位置删除到行首
  • ctrl+z 把命令放入后台
  • ctrl+r 在历史命令中搜索

历史命令

  • history [选项] [历史命令保存文件]
  • -c 清空历史命令
  • -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
  • vim /etc/profile
  • 上下剪头调用以前的历史命令
  • !n 重复执行第n条历史命令
  • !! 重复执行上一条命令
  • !字符串 重复执行最后一条以该字符串开头的命令

Bash命令补全

  • tab键

输出重定向

把命令输出保存到文件, > 代表覆盖的形式写入, >>代表追加的方式写入

  • ‘>’覆盖,>> 追加
  • 命令 > 文件 2>&1
  • 命令 >> 文件 2>&1
  • 命令 &> 文件
  • 命令 &>> 文件
  • 命令>>文件1 2>>文件2 把正确的输出追加到文件1,把错误的输出追加到文件2中
  • ls &>/dev/null 相当于既不显示到屏幕上,也不保存

输入重定向

wc [选项] [文件名]

  • -c 统计字节数
  • -w 统计单词数
  • -l 统计行数

管道符

多命令顺序执行

  • ; 命令1:命令2 多个命令顺序执行,命令之间没有任何联系
  • && cmd1 && cmd2 只有当cmd1正确执行 命令cmd2才会执行
  • || cmd1 || cmd2 当命令cmd1不正确的时候,命令2才会执行,正确则不执行

管道符

命令1 | 命令2,命令1的正确输出作为命令2的操作对象

  • ll -a /etc/ | more
  • netstat -an | grep xxx

通配符

  • ? 匹配一个任意字符
  • * 匹配0个或任意多个任意字符,也就是可以匹配任何内容
  • [] 匹配中括号中任意一个字符,例如:[abc]代表一定匹配一个字符串,或者是a,或者b,或者c。
  • [-] 匹配中括号中任意一个字符, -代表一个范围。例如[a-z]代表匹配一个小写字母
  • [^] 逻辑非,代表匹配不是中括号内的一个字符。例如:[^0-9]代表匹配不是一个数字的字符

Bash中其他特殊字符

符号 作用
‘’ 单引号。在单引号中所有的特殊符号,如”$”和”`“(反引号)都 没有特殊含义
“” 双引号。在双引号中特殊字符都没有特殊含义,但是”$”、”`”、和”"是例外,拥有”调用变量的值”、”引用命令”、”转义符”的特殊含义。
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,补货推荐使用$(),因为反引号非常容易看错
$() 和反引号作用一样,用来引用系统命令
# 在Shell脚本中,#开头的行代表注释。
$ 用于调用变量的值,如需要调用变量name的值得时候,需要用$name的方式得到变量的值
\ 转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符。如$ 将输出”$”符号
希望对您有所帮助,您的支持将是我莫大的动力!