本篇笔记是 慕课网 《Linux达人养成计划I》 课程的笔记。
我们平时所说的Linux分为内核版本和发行发版
1.Linux内核版本
2.Linux发行版本
不同厂商的发行版本,用的内核版本差不多
另外,需要注意的是,实际使用中并不是版本越新越好,往往是越稳定、越安全越好
多说一句,Linux是开源的,我们可以拿到源代码进行分析学习。
开源软件的好处很多,诸如使用的自由、研究的自由、散步及改良的自由。但是需要注意开源软件不一定是免费的。
Linux应用领域
1.基于Linux的企业服务器
在www.netcraft.com可以查看站点服务器的系统
2.嵌入式领域
Linux与Windows的不同
Linux严格区分大小写
Linux中所有内容以文件形式保存,包括硬件
Linux不靠扩展名区分文件类型
Linux下的程序不能直接在Linux中安装和运行
一、 Linux的命令
命令基本格式:
[root@aston ~]#
root 表示当前用户
aston表示当前机器的主机名(默认localhost)
~表示当前所在位置(~是家目录,用户登录后的初始位置)
#表示当前用户是超级用户;$表示当前用户是普通用户
命令格式:
命令 [选项] [参数]
注意:个别命令使用不遵守此格式;当有多个选项时可以写在一起;简化选项与完整选项之分,如 -a等于 -all
1. 查询目录命令 ls
ls [选项] [文件或目录]
选项: -a 显示所有文件,包括隐藏的
-l 显示详细信息
-d 查看目录属性
-h 个性化显示(文件大小)
-i 显示inode
目录详细信息
-rw-------. 2 root root 1207 1月 14 18:18 install.log
-rw-------. 默认10位,第一位是文件类型(- 文件 d 目录 | 软链接 等等);第2、3、4位是u所有者权限;第5、6、7位是g所属组权限;第8、9、10位是其他人权限;最后一个点(.)是CAL权限。
权限: r 读 w 写 x 执行
2 表示引用计数(仅所在位置,不一定就是2)
第一个root 表示文件所有者
第二个root 表示所属组
1207 表示文件大小(默认单位ieshi字节)
1月 14 18:18 表示最后一次修改时间
install.log 表示文件名
Linux隐藏文件的目的是告诉用户这是系统文件,不要随便修改
2. 文件处理命令
2.1 目录处理命令
在Linux中一切皆是文件,目录也是文件
创建目录命令: mkdir [-p] [目录名]
-p : 递归创建,及路径中可以有空目录
切换目录: cd
cd ~ :进入家目录
cd :进入家目录
cd - : 进入上次目录
cd .. :进入上一级目录
cd . :进入当前目录;在Linux中 . (点)代表当前目录
显示当前目录路径 : pwd
删除目录 : rmdir [目录名]
该命令只能删除空目录
删除文件或目录 : rm -rf [文件或者目录名]
-r :删除目录
-f :强制删除
复制 :cp [选项] [原文件或目录] [目标目录]
-r :复制目录
-p :连带文件属性复制
-d :若源文件是链接文件,则复制链接属性
-a :相当与 -pdr
剪切或者改名 : mv [原文件或目录] [目标文件]
相关概念:
相对路径 :参照当前算在目录进行查找;
绝对路径 :从根目录开始指定一级一级递归查找。
ctrl + L :清屏快捷键
Linux常用目录:
/ :根目录
/bin 和 /sbin :用来保存系统命令
/boot :用户启动目录
/dev :特殊文件保存目录
/etc : 配置文件
/home :普通用户家目录
/root :root用户家目录
/lib :函数库保存目录
/media 和 /mnt 和 /misc:空目录,挂载外接设备
/proc 和 /sys:保存内存的挂在点,不能直接操作
/tmp:临时目录
/usr:系统软件资源目录
/var:系统可变文档目录
注意:对于一般的用户(这里指的是开发能力不够的,对Linux底层不了解的使用者)尽量不要操作家目录和tmp目录之外的其他目录
2.2链接命令
ln [-s] [原文件] [目录文件]
-s :创建软链接
硬链接特征(不建议创建硬链接):
a.拥有相同的i节点和存储block块,可以看做是同一个文件
b.可以通过i节点识别
c.不能跨分区
d.不能针对目录使用
软链接特征:
a.类似Windows创建快捷方式
b.软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际数据
c.修改其中一个文件,另一个也就修改了
d.删除源文件,软链接不能再使用
3.文件搜素命令
3.1 文件搜索命令 : locate 文件名
速度快
updatedb:强制更新数据库
/etc/updatedb.conf配置文件:
3.2 命令搜索命令(系统命令)
whereis [参数] [选项] : 搜索命令所在路径及帮助文档所在位置
-b:只查找可执行文件
-m:只查找帮助文档
which 文件名
搜索命令所在路径及别名
PATH环境变量: 定义的是系统搜索命令的路径
4. 文件搜索命令 find
这个命令非常强大
find [搜索范围] [参数] [搜索条件]
注意1:避免大范围搜索,会非常耗费系统的资源
注意2:find是在系统当中符合条件的文件名。如果需要匹配,使用通配符是完全匹配。
Linux通配符:
*:匹配任意内容
?:匹配任意一个字符
[]:匹配任意一个中括号内的字符
参照:
-name:文件
-iname:文件名不区分大小写
-user:按照所有者来搜索
-nouser:没有所有者的文件
-mtime:修改文件内容
-10:表示十分钟之内;10:表示十分钟;+10:表示十分钟以前
-ctime:改变文件的属性
-atime:按照文件访问时间
-size:按照查找文件大小
-inum:按照查找i节点
例如:find -size +20K -a -size -50K
超找大小在20K和50K之间的文件
-a:and与
-o:or 或
补充: -exec 命令 {}; 对搜索结果进行处理
例如:find . -size +20K -a -size -50K -exec ls -ln {};
5. 字符串搜索命令 grep
grep [选项] 字符串 文件名
-v:取反,不包含字符串的
-i: 忽略大小写
grep和find的区别:
find是完全匹配
grep是包含匹配,匹配使用正则表达式
6.帮助命令 man
man 命令
获取指定命令的帮助文档(官方文档够权威)
进入帮助文档之后可以使用 “/关键词”模糊查找
n : 下一个
shift+n : 上一个
man的有8个级别,分别为1——8
其他帮助命令
help
shell内部命令,获取shell内部命令的帮助
例如: ls --help
注: whereis 命令 :确认是否为内部命令
info 命令
比man更加详细
查找方式:
-回车: 进入子帮助页面(带有*号标记)
-u: 进入上层页面
-n: 进入下一个帮助小节
-p:进入上一个帮助小节
-q: 退出
7. 压缩与解压缩命令
Linux常用的压缩格式有 .tar.gz .tar.bz2 .zip .gz .bz2 五种
6.1 zip格式压缩
zip 压缩文件名 源文件
压缩文件
zip -r 压缩文件名 源目录
压缩目录
unzip 压缩文件
解压缩 .zip 压缩包
6.2 .gz格式压缩
gzip 源文件
压缩为 .gz 格式的压缩文件,源文件会被删除
gzip -C 源文件 > 压缩文件
压缩为 .gz 格式的压缩文件,源文件保留
gzip -r 目录
压缩目录下的所有子文件,但是不能压缩目录
gzip -d 压缩文件
解压缩文件
gunzip 压缩文件
解压缩文件
6.3 .bz2 格式压缩
bzip2 源文件
不保留源文件
bzip2 -k 源文件
保留源文件
bzip2 -d 压缩文件
bunzip2 压缩文件
以上两个命令均为解压缩,-k 保留压缩文件
注意:bzip2 不支持压缩目录
6.4 打包命令 tar
tar -cvf 打包文件名 源文件
选项:
-c: 打包
-v: 显示过程
-f: 指定打包后的文件名
tar -xvf 打包文件名
解打
选项:
-x: 解打包
tar -zcvf 压缩包名(.tar.gz) 源文件
选项:
-z: 压缩为 .tar.gz 格式
tar -zxvf 压缩包名(.tar.gz)
选项:
-x: 解压缩 .tar.gz 格式
tar -jcvf 压缩包名(.tar.bz2) 源文件
tar -jxvf 压缩包名(.tar.bz2)
tar -jxvf 压缩文件名 -C 路径
指定解压缩位置
可以压缩多个文件
tar -ztvf 压缩文件名
只查看压缩文件内容,不解压
7. 关机和重启命令
shutdown命令
shutdown [选项] [时间]
选项:
-c: 取消前一个关机命令
-h: 关机
-r: 重启
now 表示当前时间
& : 后台符号,命令在后台运行
halt、poweroff、init 0
三个关机命令,这三个命令不安全
reboot、init 6
重启命令,reboot相对安全
系统运行级别:
0 - 关机
1 - 单用户
2 - 不完全多用户,不含NFS服务
3 - 完全多用户
4 - 未分配
5 - 图形界面
6 - 重启
runlevel : 查看系统级别
会有两个值,第一个是进入当前级别前的级别;第二个是当前级别
/etc/inittab
系统开机默认进入系统级别
logout : 退出登录命令
8. 挂载命令
mount
查询系统已经挂载的设备
mount -a
依据配置文件 /etc/fstab 的内容,自动挂载
8.1 挂载命令格式
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
选项:
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以是 ext3、ext4、iso9660(光盘)等文件系统
-o 特殊选项: 可以指定挂载的额外选项
特殊选项:
atime/noatime: 更新访问时间/不更新访问时间;访问分区文件时,是否更新文件的访问时间。默认为更新
async/sync: 异步/同步。默认为异步
auto/noauto: 自动/手动;mount -a 命令执行时,是否会自动安装 /etc/fstab 文件内容挂载。默认为自动
rw/ro: 读写/只读;文件系统挂载时,是否具有读写权限。默认为rw
suid/nosuid: 具有/不具有SUID权限;设定文件系统是否具有SUID和SGID的权限。默认为具有
user/nouser: 允许/不允许普通用户挂载;设定文件系统是否允许普通用户挂载。默认为不允许,只有root可以挂载分区
exec/noexec: 执行/不执行,设定是否允许在文件系统中执行可执行文件。默认为允许执行
remount: 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
defaults: 定义默认值,相当于rw、SUID、dev、exec、auto、nouser、async这七个选项
usrquota: 写入代表文件系统支持用户磁盘配额,默认不支持
grpquota: 写入代表文件系统支持组磁盘配额,默认支持
chomd 775 文件名称: 赋给文件可执行权限
8.2 挂载光盘步骤
首先放入光盘,然后
8.2.1 建立挂载点
mkdir /mnt/cdrom/
8.2.2 挂载光盘
mount -t iso9660 /dev/sro /mnt/cdrom
或者 mount /dev/sro /mnt/cdrom
8.2.3 卸载命令
umount 设备文件名或者挂载点
例如卸载光盘: umount /dev/sro 或者 umount /mnt/cdrom
注意:卸载命令是必须执行的
8.3 挂载U盘
8.3.1 查看U盘设备文件名
fdisk -l
8.3.2 挂载U盘
mount -t vfat /dev/sdb1 /mnt/usb
注意:Linux默认是不支持NTFS文件系统的
9. 用户登录查看
9.1 w [用户名]
命令输出格式解释:
USER: 登录的用户名
TTY: 登录终端
FROM: 从哪个IP地址登录
LOGIN@: 登录时间
IDLE: 用户闲置时间
JCPU:
PCPU: 当前进程所占用的时间
WHAT: 当前正在运行的命令
9.2 who [用户名]
命令输出格式解释:
- 用户名
- 登录终端
- 登录时间(登录来源IP地址)
9.3 last
查询当前登录和过去登录的用户信息
默认是读取 /var/log/wtmp 文件数据
命令输出格式解释:
用户名 | 登录终端 | 登录IP | 登录时间 | 退出时间(在线时间)
9.4 lastlog
查看所有用户的最后一次登录时间
默认是读取 /var/log/lastlog 文件内容
命令输出格式解释:
用户名 | 登录终端 | 登录IP | 最后一次登录时间
第二章 Shell基础
一、 Shell概述
shell命令行解释器
内核(硬件)——> shell、应用程序 ——> 用户
shell 还是一个功能强大的编程语言,易编译、易调试,灵活适用。
shell分类:
Bourne Shell : sh、ksh、Bash(Linux使用的shell)、psh、zsh
C Shell: csh、tcsh
查看Linux所支持的shell方法:
vi /etc/shells
二、脚本执行方式
1. echo 输出命令
echo [选项] [输出内容]
选项:
-e: 支持反斜杠控制的字符转换
控制字符:
a : 输出警告声
: 退格键,也就是向左删除键
: 换行符
: 回车键
: 制表符,也就是tab键
v: 垂直制表符
hh: 八进制
xhh:十六进制
支持颜色输出: e
echo -e "e[1;31m 江山如此多娇 e[0m"
30m: 黑色 31m: 红色 32m: 绿色 33m: 黄色
34m: 蓝色 35m: 洋红 36m: 青色 37m: 白色
2. 第一个脚本
编写一个脚本文件hello.sh,内容如下:
#!/bin/bash
# 第一个脚本
echo -e "e[1;34m 江山如此多娇! e[0m"
执行方式:
2.1 chmod 755 hello.sh
./hello.sh
2.2 bash hello.sh
三、Bash的基本功能
1. 命令别名与快捷键
alias
查看系统生效的别名
alias 命令='别名'
定义别名
例如: alias ls='ls --color=never'
别名永久生效:
vi ~/.bashrc
写入环境变量配置文件
source ~/.bashrc
配置文件直接生效
删除别名:
unalias 别名
命令生效顺序
a. 第一顺位执行用绝对或相对路径执行的命令
b. 第二顺位执行别名
c. 第三顺位是Bash的内部命令
d. 第四顺位是按照$PATH环境变量定义的目录查找顺序的第一个命令
常用快捷键:
ctrl + c: 强制终止
ctrl + l: 清屏
ctrl + a: 光标移动到命令行首
ctrl + e: 光标移动到命令行尾
ctrl + u: 从光标所在位置删除到行首
ctrl + z: 把命令放入后台
ctrl + r: 在历史命令中搜索
2. 历史命令
history [选项] [历史命令保存文件]
选项:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认保存1000行,可以在环境变量配置文件 /etc/profile 中进行修改 HISTSIZE=1000 (修改该值)
使用 "!n" 重复执行第n条命令
使用 "!!" 重复执行上一条命令
使用 "!字符串" 重复执行最后一条以该字符串开头的命令
3. 输出重定向
输入: 数据输入电脑
输出: 电脑数据输出
3.1 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
3.2 输出重定向
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或者设备中 |
标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或者设备中 |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把错误命令的输出输出到指定的文件或者设备中 |
标准错误输出重定向 | 错误命令 2>>文件 | 以追加的方式,把错误命令的输出输出到指定的文件或者设备中 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 >> 文件1 2>> 文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
4. 输入重定向
wc [选项] [文件名]
选项:
-c: 统计字节数
-w: 统计单词数
-l: 统计行数
命令 < 文件
把文件作为命令的输入
命令 << 标识符
标识符把标识符之间内容作为命令的输入
5. 管道符
多命令顺序执行:
多命令执行符 | 格式 | 作用 |
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与;当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或;当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行 |
应用:
ls && echo yes || echo no
判断命令是否正确执行
5.1 管道符
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
应用:
ls -l /etc | more
netstat -an | grep ESTABLISHED | wc -c
6. 通配符
通配符 | 作用 |
? | 匹配一个任意字符 |
* | 匹配0个或者任意多个字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符 |
[-] | 匹配中括号中任意一个字符,- 代表一个范围 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。e.g.: [^0-9]代表匹配一个不是数字的字符 |
Bash中的特殊符号
'' | 单引号,被单引号包含所有特殊符号都不起作用 |
"" | 双引号,在双引号中特殊符号都没有特殊含义,但是 $ ` 三个是例外,表示“调用变量的值”、“引用命令”、“转义符”的特殊含义 |
`` | 反引号,系统命令,在Bash中会先执行它。和 $() 作用是一样的,不过推荐使用 $() ,因为反引号非常容易看错 |
$() | 和反引号作用一样,用来引用系统命令 |
# | 在shell脚本中,#开头的行是注释 |
$ | 用于调用变量的值 |
转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符 |