这是一个小小新手根据自己对 Linux 的理解而写下的笔记, 记录的是大体的学习内容. 记录的笔记不全面, 甚至没有整体的概念, 但也希望能够给部分人一些入门的帮助, 实机基于 CentOS 7.
导语: 学习一件新事物先从大体把握, 了解其组成部分然后再分模块去学习, 笔者是依据这样写下笔记的
1. 系统的组成
Linux 的组成可大致分为: 内核, shell, 文件系统, 应用程序
内核 (Kernal):Linux 最主要的部分, 操作整个计算机的资源, 提供内存管理, 进程管理, 驱动管理等基本功能
Shell: 提供用户与内核进行交互的接口, Shell 是一个解析器负责解析命令, 将用户传过来的命令解析过后通知内核执行相应的服务, Shell 也可以解析 Shell 脚本, 即 Shell 脚本可以像用户传命令过来一样有被执行的能力
文件系统: 提供文件存储, 管理等功能. Linux 抽象出虚拟文件系统以便适应不同类型的文件系统
应用程序: 计算器, 编辑器, GIMP 等
2. 文件系统
从一切皆对象的 Java 变成一切皆文件的 Linux 了, 因为 Linux 的系统资源都是以文件形式存在. 首先来了解文件系统, 其实就是认识各种目录结构及其作用, 这里的内容有个印象即可, 真要用到回来再看看
2.1 文件系统结构
/ : 根目录
/bin: 二进制可执行文件, 即常用的命令 (cd,ls,mkdir)
/sbin: 二进制可执行文件, root 专属命令
/boot: 系统引导文件
/dev: 设备文件
/etc: 系统配置文件
/home: 各用户的目录
/root: 管理专属目录, 不放在 home 下
/var: 运行时需要改变数据的文件
/lib : 库
/usr : 系统应用程序
/tmp: 各种临时文件
/opt: 第三方应用程序
/proc: 系统内存映射, 虚拟文件系统
/mnt: 临时文件系统挂载点
/media: 移动设备挂载点
2.2 文件类型, 权限, 组
# 文件类型
-: 普通文件
d: 目录文件
b: 块文件
c: 字符文件
l: 符号链接文件
p: 管道文件 pipe
s: 套字节文件 socket
# 权限
r: 可读, 表示文件可读, 目录可看列表
w: 可改, 表示文件可改, 目录可在内部新建和删除文件
x: 可运行, 表示文件可运行, 目录可进入
可用数字表示: 4=r,2=w,1=x
467 分别表示: 可读, 可读可写, 可读可写可运行
输入命令 cd /,ls -l 显示根目录文件, 首字母就表示文件类型, 剩余表示权限, 之后的数字表示连接数, 跟着两个是所有者和所属组
2.3 关于文件目录的命令
cd: 进入目录
ls: 列出目录
mkdir: 创建目录
touch: 创建文件
mv: 移动文件
rm: 删除
cp: 复制
2.4 文件打包与压缩
归档: 也称打包, 将多个文件或目录一起建立归档, 一般是形成 .tar 文件
压缩: 利用算法对文件进行处理, 达到压缩大小的目的
注意: 是不能直接压缩目录的, 将多个文件或目录打包成一个 .tar 文件然后才能进行压缩, 所以打包和压缩一般是同时进行的. 压缩格式有: bz2,xz,zip,gz(最常见)
tar -zcvf: 选项从左到右表示 gzip 压缩, 打包文件, 显示过程, 指定文件名
tar -zxvf: 其中 z 表示解压缩 (同一选项不同功能),x 表示解包
tar -zcvf file.tar.gz file: 表示将 file 打包与压缩并命名为 file.tar.gz, 其后缀是为了方便辨认
2.5 文本编辑器 VIM
在一切皆文件下, 学会使用文本编辑器很关键, 这里介绍 VIM
在没有学 VIM 之前, 笔者进入文本编辑器看着命令行不知所措, 乱按一通没有效果, 只好关机重启, 居然被小小的文本编辑器打败了, 不好意思说是计算机专业的, 这和 Windows 的记事本完全不一样. 在进入 VIM 之前, 请先看清楚使用方法, 不然进去就和笔者一样要重启解决
一, VIM 的三种模式:
Normal: 默认进入时的模式, 输入会被当成命令
i: 进入 Insert 模式
gg: 跳转文头
G: 跳转文末
/: 查找
n: 下一个
y: 复制
p: 粘贴
x: 删除
u: 撤回
Insert: 输入的内容会插入到文件中 (按 i 进入)
ESC 键: 退出 Insert, 进入 Normal 模式
Command : 在 Normal 下输入: 会进入, 在最后一行会有提示
:q 不保存退出
:q! 不保存强制退出
:w 保存但不退出
:w! 强制保存
:wq! 强制保存退出
:w [文件名] 另存为
二, VIM 的进入:
VIM 文件名: 直接进入
3. 应用系统
3.1 应用程序安装
Linux 应用程序的安装可分为源码安装和二进制安装
源码安装: 是编写出的源代码, 需计算机编译成二进制文件后才可进行安装, 其编译时间较长, 安装步骤繁杂, 若安装过程中报错, 新手是很难解决的, 但也有优势: 可自由选择需要的功能甚至可以改写源代码, 因为是编译安装所以更适合自己的系统, 效率和稳定性也有提升 (笔者还未接触到, 不做说明)
二进制安装 (举例 rpm 包管理器): 是源码经过编译后的安装包, 安装速度较快, 不需要编译所以出错概率很小
rpm 安装是用默认安装路径的, 不建议修改
i: 安装
v: 详情
h: 进度
rpm -ivh 包全名: 表示安装某一程序, 注意要出现两次 100% 才是安装完成, 第一次表示完成安装的准备
rpm 安装也有其缺点, 因为程序间依赖关系复杂, 若 rpm 安装过程中缺失依赖会报错, 而且卸载时要从后安装的依赖开始卸载
a: 查询所有套件
q: 查询是否安装某软件
|: 管道符, 将前面命令的输出交给后面的命令
grep: 搜索
# 查询某程序是否安装
rpm -qa | grep 程序包名
查询 yum 程序 是否安装
这些程序安装都过于繁杂, 有没有适合新手的? 当然有那就是 yum 了, yum 是基于 rpm 的, 所以也是二进制安装, 安装速度较快, 重要的是自动解决依赖问题, 不需要手动下载
yum 安装
y: 安装过程中的选项都选择 yes
install: 安装 rpm 软件包
search: 查看特定安装包
update: 更新 rpm 软件包
check-update: 检查是否有可用的更新 rpm 软件包
remove: 删除指定的 rpm 软件包
这里举例 gcc 程序 的安装, gcc 是 C 语言编译器, 这学期上 Linux 程序设计需要用到
yum -y install gcc
从安装过程可以看到, yum 会自动解决依赖关系, 一键安装的感觉
3.2 程序的打开
常规的程序在命令行输入程序名即可打开, 其安装在 $PATH 下, 即 /bin,/usr/bin,/usr/local/bin 中, 系统会去 $PATH 下查找, 类似于 Windows 下的环境变量
其他程序则要主动去到程序的安装目录下输入启动文件来打开, 假如要打开 lampp
/opt/lampp/./lampp start
其中./ 表示当前目录, 不然系统会去环境变量找
或者将这个程序的安装目录加入到 $PATH 中, 这样就可以在命令行直接输入来启动程序了 (类似 Windows 下添加 jdk 环境变量)
- export PATH = $PATH:/opt/lampp
- 4. Shell
4.1 Shell 编程
Shell 编程是对 Linux 命令的逻辑化处理, 笔者笔记的自动上传也是用了 Shell 编程, 不要觉得很深奥, 其实有了编程语言的基础, 几分钟就可以入门. 笔者挑出部分基础说明, 达到让大家认识 Shell 编程的目的即可
简单入门
- touch helloWorld.sh (新建一个 helloWorld.sh 文件,` 后缀 ` 只是为了方便辨认, 没有实质作用)
- VIM helloworld.sh (文件中加入 echo "helloworld" ,echo 表示输出, 保存并退出 VIM)
- chmod +x helloworld.sh (增加可运行的权限)
- ./helloworld.sh (运行 Shell 脚本)
是不是很简单?
4.2 与 Java 的差异
布尔运算 | 解释 |
---|---|
! | 非 |
-o | 或 |
-a | 与 |
关系运算符 | 解释 |
---|---|
-eq | 数字是否相等 |
-gt | 大于 |
-lt | 小于 |
字符串运算符 | 解释 |
---|---|
-z | 长度是否为 0,为 0 返回 true |
str | 是否为空 |
- if:(简单事例)
- a=1;
- b=1;
- if [ $a -eq $b ]
- then
- echo "equal"
- elif [ $a -gt $b ]
- then
- echo "大于"
- else
- echo "小于"
- fi
- for:(简单事例)
- #!/bin/bash
- for value in 1 3 5 7 9
- do
- echo $value
- done
- exit 0
5. 内核
内核提供进程管理, 网络管理等功能, 所以笔者将这些内容归到内核模块下
5.1 进程 --ps
e: 显示所有程序
f: 显示 UID,PPIP,C 与 STIME 栏位
UID: 用户 ID
PID: 进程 ID
PPID: 父进程 ID
C: 优先级
STIME: 进程启动的时间
TTY: 使用终端
TIME:CPU 时间
CMD: 显示完整的启动进程所用的命令和参数
5.2 进程 --kill
关闭进程, 那么首先需要知道进程 ID. 假如关闭运行的 VIM
ps -ef | grep VIM
kill [进程号]
左边为开着的 VIM 进程
5.3 进程 -- 前后台
jobs: 查看后台运行的进程
fg: 将后台进程转至前台
bg: 将前台进程转至后台
在命令行最后加入 &: 也是将前台进程转至后台
这里将下载 Redis 的任务加入后台 (快捷键 Ctrl + z), 用 jobs 查看后台进程, 再用 fg 将其调至前台
5.4 网络 -- 端口
netstat
n: 不 DNS 轮询, 显示 IP
t: 显示 TCP 端口
u: 显示 UDP 端口
l: 仅显示套接字
p: 显示进程标识符和程序名称
- # 查看 80 端口
- netstat -ntp | grep 80
防火墙端口 firewall-cmd
--query-port=< 端口号 >/<protocol>: 查询指定端口
--add-port=< 端口号 >/<protocol>: 开放端口
--remove-port=< 端口号 >/<protocol>: 关闭端口
--zone=public: 作用域
--permanent: 永久生效
--reload: 重启防火墙
- # 查询是否开启
- firewall-cmd --zone=public --query-port=80/tcp
- # 开启防火墙端口
- firewall-cmd --zone=public --add-port=80/tcp --permanent
- # 重载防火墙
- firewall-cmd --reload
这是笔者目前所浅显理解的 Linux,Linux 很优秀, 需要在不断地使用中去挖掘
参考:
CentOS 7
菜鸟教程
《鸟哥的私房菜》
来源: https://www.cnblogs.com/Howlet/p/12464994.html