温故而知新,可以为师矣。好久没有再次系统学习 Linux 相关的知识了,总结回顾一下,为了更好的前进。
一、环境搭建
环境的配置,是我们学习的基础。环境配置会用到的工具及环境:
(1) Inteelij IDEA 2019 + BashSupport插件
(2) Ubuntu 18.04(用的腾讯云服务器)
(3) Git Bash
1.全局配置bash解释器
2.配置bash shell 脚本运行解释器
二、Linux 文件
【GitHub示例】
1. Linux 内核的四种功能
(1)内存管理
默认情况下,运行在Linux系统上的每个进程都有各自的内存页面;进程不能访问其他进程正在使用的内存页面。
内核维护着自己的内存区域
用户进程不能访问内核进程的内存
可以创建一些共享内存页面,多个进程可在同一块共用内存区域进行读取和写入操作;内核负责维护和管理这块共用内存区域并控制每个进程访问这块共享区域。
内核的系统内存管理主要是对1.物理内存和虚拟内存(交换空间)2.共享内存的管理
(2)软件程序管理
内核创建第一个进程(init进程)来启动系统上所有其他进程
内核启动时,将init加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码
系统开机自动启动的进程通常位于专门的文件 /etc/inittab 或 /etc/init.d目录中
运行级决定init进程运行/etc/inittab文件 或者 /etc/rcX.d目录中定义好的某些特定类型的进程。
(3)硬件管理
Linux系统将硬件设备(需要在内核代码中加入其驱动程序代码)当成特殊的文件,称为设备文件,分三种:
字符型
块
网络
(4)文件系统管理
Linux内核支持多种不同类型的文件系统来从硬盘中读取或写入数据。
内核必须在编译时就加入对所有可能用到的文件系统的支持。
Linux内核采用虚拟文件系统(VFS)作为和每个文件系统交互的标准接口。
Linux的文件管理系统为:
ext4文件管理系统
文件管理系统:Fat文件管理系统
Windows的文件管理系统:NTFS文件管理系统
【GitHub示例】
#!/usr/bin/env bash
# @File : ${NAME}
# @Time : 2019/9/9 7:55
# @Author : Crisimple
# @Github : https://crisimple.github.io/
# @Contact : Crisimple@foxmail.com
# @License : (C)Copyright 2017-2019, Micro-Circle
# @Desc : None
# Linux 内核的四种功能
# (1)内存管理
# 查看虚拟内存的当前状态
cat /proc/meminfo
# 查看当前系统版本
cat /etc/issue
# (2)软件程序管理
# Linux内核创建第一个进程,称之为初始进程,该进程可在系统上启动所有其他进程(在Linux系统上正在运行的程序)
cat /etc/inittabs #进程表
# 查看Linux系统中当前运行的进程
# PS,是Linux系统命令之一,是在Linux中是查看进程的命令。ps查看正处于Running的进程,ps aux查看所有的进程。
# 参数如下:
# -e 显示所有进程。
# -f 全格式。
# -h 不显示标题。
# -l 长格式。
# -w 宽输出。
# a 显示终端上的所有进程,包括其他用户的进程。
# r 只显示正在运行的进程。
# x 显示没有控制终端的进程。
# --help 显示帮助信息。
# --version 显示该命令的版本信息。
ps -ax # 查看全部进程
ps -ef # 查看全格式的全部进程
ps -ef | grep "进程名" # 查看并筛选 跟进程名有关的进程,该进程名可以是进程的全部或者部分
# (3)硬件管理
# (4)文件系统管理
2. 文件处理相关 bash
2.1 启动 shell
# (1) 查看系统用户账号组成列表,不同位分别代表:
# 用户名、用户密码、用户的系统用户ID编号、用户的系统组ID编号、用户全名、用户的默认主目录、用户的默认shell程序
cat /etc/passwd
# (2) 修改用户启动项 --- shell 启动时加载项的配置文件
# sudo vi /etc/bash.bashrc
# 可自定义启动项:如环境的提示语类【echo -e "\t\t ************* WELCOME CRISIMPLE TO BACK HOME ***************"】
cat /etc/bash.bashrc
# (3) 自定义 bash 命令提示符 --- shell 启动后 bash 显示配置文件
# sudo vi ~/.bashrc
# export PS1="Crisimple@129.28.170.125:~$"
cat ~/.bashrc
2.2 Linux 文件系统
# / --- 虚拟目录的根目录
# /bin --- 二进制目录,存储许多 GUN 用户级别的实用程序
# /boot --- 引导目录,存储引导文件
# /dev --- 设备目录,Linux 在该目录中创建设备节点
# /home --- 主目录,Linux 在该目录中创建用户目录
# /lib --- 库目录,存储系统和应用程序库文件
# /media --- 媒体目录,可移动设备媒体常用的挂在点
# /mnt --- 挂载目录,另一个可移动设备媒体常用的挂在点
# /opt --- 可选目录,常用于存储可选软件包
# /root --- 根目录
# /sbin --- 系统二进制目录,存储许多 GUN 管理级别的实用程序
# /temp --- 临时文件,可以在目录中创建或销毁临时工作文件
# /usr --- 用户安装软件的目录
# /var --- 可变目录,用于经常更改的文件,如日志文件
2.3 文件过滤输出显示
ls -l --time=atime file_name # 查看文件的访问时间
ls -l file_* # 【*代表零个或多个字符】查看文件名开头为 file_ 的所有文件
ls -l file_? # 【?代表一个字符】查看文件名开头为 file_ 的所有文件
ls -l file_[ai]pt # 文件扩展[]中的a和i字符都匹配
ls -l file_[a-i]pt # 文件扩展[]中的a-i字符都匹配
ls -F # 查看区分文件和目录
ls -a # 显示所有文件和目录,包括隐藏文件和目录
ls -FR # 显示文件和文件的递归项
ls -l
# 显示长列表
# 文件类型【目录:d;文件:-;字符型文件:c;或块设备:b】
# 文件权限
# 文件的硬链接总数
# 文件属主的用户名
# 文件属主的组名
# 文件的大小(以直接为单位)
# 文件的上次修改时间
# 文件名或目录名
2.4 处理文件
# (1) 创建文件
touch create_file
# (2) 复制文件
cp create_file copy_create_file
cp -i source_file copy_create_file
# (3) 链接文件
# ·符号链接---两个通过符号链接在一起的文件,彼此的内容并不相同,也就是两个文件
ln -s create_file copy_create_file
# ·硬链接---会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。
ln create_file copy_create_file
# (4) 重命名文件 --- inode编号和时间戳保持不变
mv create_file mv_create_file
ls -il mv_create_file
# (5) 删除文件
rm -i mv_create_file
ls -l mv_create_file
mkdir create_floder
rm -i rf create_floder
2.5 处理目录
# (1)创建目录
# 创建但目录
mkdir create_floder_two
ls -ld create_floder_two
# 创建多个目录和子目录
mkdir -p test1/test2/test3
ls -R test1
# (2) 删除目录
touch new_dir/my_file
ls -li new_dir/
rm -i new_dir/my_file
ls -ld new_dir
rm -rf new_dir/my_file
ls -ld new_dir
2.6 查看文件内容
# (1) 查看文件类型
touch new_file
file new_file
mkdir new_dir
file new_dir
# (2) 查看整个文件
cat new_file
# -n 参数给所有行加上行号
cat -n new_file
# -b 参数只给有文本的行加上行号
cat -b new_file
# 不然制表符出现使用参数 —T
# -T参数会用^I字符组合去替换文中的所有制表符。
cat -T new_file
# 分页文件查看
more /etc/bashrc.bash
# 分屏显示文件查看
less /etc/bashrc.bash
# (3) 查看部分文件
# tail 显示文件最后几行的内容,默认情况下显示文件末尾的10行
tail new_file
# tail -n 参数控制显示文件的第多少行的显示
tail -2 new_file
# tail -f 实时监测系统日志
tail -f new_file.log
# ---------------------------
# tail 显示文件前几行的内容,默认情况下显示文件开始的10行
head new_file
# head -n 参数控制显示文件的第多少行的显示
head -2 new_file
三、Bash shell
shell命令有常用的三种风格形式:
(1)Unix 类型参数,前面有一短划线(-A 显示所有进程)
(2)BSD 类型参数,前面没有有短划线(T 显示与该终端的相关的所有进程)
(3)GNU长参数,前面有双短划线(--forest 在层次结构清单中显示进程,以显示父进程)
【GitHub示例】
1.监测程序
1.1 探测进程
# 显示进程之间的层次信息
ps --forest
# 显示系统上的进程,并扩展输出
ps -ef
# 显示帮助信息
ps --help
# 显示调试信息
ps --info
# 显示 ps 程序的版本
ps --version
# 显示所有进程并进行过滤显示
ps -aux | grep PID
# 长格式输出,长格式输出的各参数的含义
ps -l
# F:内核分配给进程的系统标记
# S:进程状态【O-正在进行;S-休眠;R-可运行,正在等待;Z-进程僵化;T-停止】
# PRI:进程的优先级(越大的数字代表越低的优先级)
# NI:谦让度值用来参与决定优先级
# ADDR:进程的内存地址
# SZ:假如进程被换出,所需交换空间的大致大小
# WCHAN:进程休眠的内核函数的地址
1.2 实时监测进程
# 显示实时进程的概要信息
top<