现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此。对于大一些的互联网公司,系统可能会非常复杂,本地无法启动,一般都会采用专门的开发机给开发人员开发测试使用。我实习期间接触的项目没一个可以在本地启动的,都需要写好代码,把代码更新到开发机上,然后编译部署,并查看部署过程中是否有错误或是查看访问这台机器的日志。而这些操作,都需要对基本的 Linux 命令熟悉。
今天总结下 Linux 的相关概念和基本操作,如果想了解更多,可以去看看《鸟哥的私房菜》。同时希望大家多动手实践,这样理解得更深刻。
概要Linux 知识总结以下部分内容:Linux 常见概念、Linux 常用命令、vi 操作和一个最简单的 shell 脚本。
细节 1. Linux 常见概念 1.1 Linux 与 Windows 的不同Linux 严格区分大小写
Linux 中所有内容以文件形式保存,包括硬件。一切内容皆文件。
Linux 不靠扩展名区分文件类型,靠权限区分文件类型。带后缀的文件名是约定俗成,方便管理
Windows下的程序不能在Linux中安装和运行
1.2 Linux 采用字符界面有什么优势字符界面占用的系统资源更少
字符界面减少了出错、被攻击的可能性
1.3 分区类型主分区:最多只能有 4 个。
扩展分区
最多只能有 1 个
主分区加扩展分区最多有 4 个
不能写入数据,只能包含逻辑分区
逻辑分区
1.4 挂载必须分区
/ (根分区)
swap 分区(交换分区,内存 2 倍,不超过 2GB)
推荐分区
/boot(启动分区,200 MB)
1.5 常见目录的作用/ 根目录
/bin 命令保存目录(普通用户就可以读取的命令)
/boot 启动目录,启动相关文件
/dev 设备文件保存目录
/etc 配置文件保存目录
/home 普通用户的家目录
/lib 系统库保存目录
/mnt 系统挂载目录
/media 挂载目录
/root 超级用户的家目录
/tmp 临时目录
/sbin 命令保存目录(超级用户才能使用的目录)
/proc 直接写入内存的
/sys
/usr 系统软件资源目录
/usr/bin/ 系统命令(普通用户)
/usr/sbin/ 系统命令(超级用户)
/var 系统相关文档内容
根目录下的 bin 和 sbin,usr 目录下的bin 和 sbin,这四个目录都是用来保存系统命令的。
proc 和 sys 目录不能直接操作,这两个目录保存的是内存的过载点。
2. Linux 常用命令 2.1 命令基本格式命令 [选项][参数]
2.2 查询目录中内容ls [选项][文件或目录]
选项:
-a:显示所有文件,包括隐藏文件
-l:显示详细信息
-d:查看目录属性
-h:人性化显示文件大小
-i:显示 inode
2.3 目录处理命令mkdir -p [目录名]
-p 递归创建
命令英文原意:make directories
cd [目录]
命令英文原意:change directory
简化操作
cd ~ 进入当前用户的家目录
cd
cd - 进入上次目录
cd .. 进入上一级目录
cd . 进入当前目录
查询所在目录位置:pwd
命令英文原意:print working directory
2.4 删除文件或目录rm -rf [文件或目录]
选项:
-r:删除目录
-f:强制
2.5 复制命令cp [选项][源文件或目录] [目标目录]
选项:
-r:复制目录
-p:连带文件属性复制
-d:若源文件是链接文件,则复制链接属性
-a:相当于 -pdr
2.6 剪切或改名命令mv [原文件或目录][目标目录]
2.7 链接命令ln -s [原文件][目标文件]
生成链接文件
选项:-s 创建软链接
硬链接特征:
拥有相同的i节点和存储block块,可以看做是同一个文件
可通过i节点识别
不能跨分区
不能针对目录使用
软链接特征:
类似 Windows 快捷方式
软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据
lrwxrwxrwx表示软链接,软链接文件权限都为rwxrwxrwx
修改任意文件,另一个都改变
删除原文件,软链接不能使用
软链接如果目标文件和源文件不在同一目录下,源文件必须写绝对路径
2.8 文件搜索命令locate 文件名
在后台数据库中按文件名搜索,搜索速度更快
/var/lib/mlocate
locate 命令所搜索的后台数据库
updatedb
更新数据库。默认一天一更新。快。缺点:只能按文件名来搜索
find [搜索范围][搜索条件]
搜索文件
find / -name install.log
避免大范围搜索,会非常耗费系统资源
find 是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。
* 匹配任意内容 ? 匹配任意一个字符 [] 匹配任意一个中括号内的字符find /root -iname install.log
不区分大小写
find /root -user root
按照所有者搜索
find /root -nouser
查找没有所有者的文件
find /var/log -mtime +10
查找10天前修改的文件
find . -size 25k
查找文件大小是 25KB 的文件
find . -inum 262422
查找i结点是 262422 的文件
2.9 搜索命令的命令whereis 命令名
搜索命令所在路径及帮助文档所在位置
选项:
-b:只查找可执行文件
-m:只查找帮助文件
which 命令能看到目录和别名
2.10 搜索字符串命令grep [选项] 字符串 文件名
在文件当中匹配符合条件的字符串
选项:
-i:忽略大小写
-v:排除指定字符串
2.11 帮助命令man 命令
命令 --help
help shell内部命令
info 命令
2.12 压缩命令zip 格式压缩
zip 压缩文件名 源文件
压缩文件
zip -r 压缩文件名 源目录
压缩目录
zip格式解压缩
unzip 压缩文件
gz 格式压缩
gzip 源文件
压缩为.gz 格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件
压缩为.gz 格式,源文件保留
gzip -r 目录
压缩目录下所有的子文件,但是不能压缩目录
gz 格式解压缩
gzip -d 压缩文件
解压缩文件
gunzip 压缩文件
解压缩文件
bz2 格式压缩
bzip2 源文件
压缩为.bz2格式,不保留源文件
bzip2 -k 源文件
压缩之后保留源文件
bzip2命令不能压缩目录
打包命令tar
tar -cvf 打包文件名 源文件
解打包命令
tar -xvf 打包文件名
.tar.gz压缩格式
其实.tar.gz 格式是先打包为.tar格式,再压缩为.gz格式
tar -zcvf 压缩包名.tar.gz 源文件
.tar.gz 解压缩
tar -zxvf 压缩包名.tar.gz
.tar.bz2压缩格式
tar -jcvf 压缩包名.tar.bz2 源文件
.tar.bz2 解压缩
tar -jxvf 压缩包名.tar.bz2
2.13 关机命令shutdown [选项] 时间
选项:
-c:取消前一个关机命令
-h:关机
-r:重启
halt
poweroff
init 0
2.14 重启reboot
init 6
2.15 系统运行级别0:关机
1:单用户
2:不完全多用户,不含NFS服务
3:完全多用户
4:未分配
5:图形界面
6:重启
cat /etc/inittab
修改系统默认运行级别
runlevel
查询系统运行级别
logout
退出登录
2.16 挂载命令查询与自动挂载
mount
查询系统中已经挂载的设备
mount -a
依据配置文件/etc/fstab 的内容,自动挂载
挂载命令格式
mount [-t 文件系统][-o 特殊选项] 设备文件名 挂载点
挂载光盘
mkdir /mnt/cdrom
建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom/
挂载光盘
卸载命令
umount 设备文件名或挂载点
umount /mnt/cdrom
2.17 查看登录用户信息w 用户名
命令输出:
USER:登录的用户名
TTY:登录终端
FROM:从哪个IP地址登录
LOGIN@:登录时间
IDLE:用户闲置时间
JCPU:和该终端连接的所有进程占用的时间
PCPU:当前进程所占用的时间
WHAT:当前正在运行的命令
who 用户名
查询当前登录和过去登录的用户信息
last
查看所有用户的最后一次登录时间
lastlog
2.18 历史命令history [选项][历史命令保存文件]
选项
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认会保存 1000 条,可以在环境变量配置文件 /etc/profile 中进行修改
2.19 统计wc [选项][文件名]
选项
-c:统计字节数
-w:统计单词数
-l:统计行数
2.20 管道符分页查看输出内容
ls -l /etc | more
netstat -an | grep ESTABLISHED
2.21 用户和用户组用户:使用操作系统的人
用户组:具有相同系统权限的一组用户
/etc/group:存储当前系统中所有用户组信息
组名称
组密码占位符
组编号
组中用户名列表
/etc/gshadow:存储当前系统中用户组的密码信息
组名称
组密码
组管理者
组中用户名列表
/etc/passwd:存储当前系统中所有用户的信息
用户名
密码占位符
用户编号
用户组编号
用户注释信息
用户主目录
shell 类型
/etc/shadow 存储当前系统中所有用户的密码信息
用户名
密码
3. vi 操作 3.1 操作模式Command Mode:命令模式
Insert Mode:输入模式
Last Line Mode:底行模式
3.2 常用指令vim + abc
打开文件并把光标定位到最后一行
vim +2 abc
第二行
vim +/xxx abc
跳到指定字符串第一次出现的地方
同时打开多个文件 可用n N prev来切换
:w
保存文件,但不退出vi
:q
退出vi
:!
强制执行
/xxx
向下查找, 按n查找下一个, N查找上一个,这个跟less命令的查找使用方式是一样的
?xxx
往前查找, 按n查找下一个, N查找上一个
3.4 命令模式常用指令h:光标左移
j:光标下移
k:光标上移
l:光标右移
ctrl+f:向下翻页
ctrl+b:向上翻页
ctrl+d:向下翻半页
ctrl+f:向上翻半页
dd:删除光标所在行
o:在光标所在处的下方插入一行并切换到输入模式
yy:复制光标所在的行
p:在光标所在行的下方粘贴
P:在光标所在行的上方粘贴
3. Shell 基础 3.1 Shell 是什么命令行解释器,可启动、挂起、停止或编写程序
编程语言,可直接调用Linux 系统命令
3.2 输出命令echo [选项][输出内容]
3.3 脚本编写首行
#!/bin/bash
echo "hello world"
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
通过bash 执行脚本
bash hello.sh