2020年8月25日,对于树莓派非常感兴趣的我决定买了一本书“Linux命令行与shell脚本编程大全”,经历了树莓派建站、简单脚本编写、数据库操作后,只能看到冰山上的一角,我觉得有必要系统性学习。有个框架,知识无忧。26日起,根据每一章节来更新读后感和知识汇总,往后每日在后面更新现有文章,方便后期查看。
第一章、初识Linux Shell
1、linux四个部分
linux内核、GNU工具、图形化桌面环境、应用软件。
a、内核
内核控制着计算机系统上的所有硬件和软件,负责四个功能:内存管理、软件程序管理、硬件设备管理、文件系统管理。
内核不仅管理物理内存,还可以创建和管理虚拟内存。内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。内存储存单元按组划分成很多块,这些块称为页面(page),内核将每个内存页面放在物理内存或者交换空间上。然后内核会维护一个内存页面表,指明哪些页面在物理内存上,哪些页面被换到了磁盘上.
内核会记录哪些页面正在使用,并自动把一段时间未访问的内存页面复制到交换空间区域(换出,swap out)。
b、软件程序
linux进程,可以在前台也可在后台。内核创建了第一个进程(init进程)来启动系统上多余其他进程,当内核启动时,将init进程加载到虚拟内存中,内核启动其他进程时会在虚拟内存上给新进程分配一块专有区域。
一些linux发行版使用一个表来管理系统开机时要启动的进程,通常位于/etc/inittab中。另外一些发行版,ubuntu、树莓派采用/etc/init.d目录,将开机执行的程序脚本放在这个目录下。这些脚本通过/etc/rcX.d目录下的入口启动,树莓派中X为0-6,运行级别。
c、硬件设备
内代码中需要加入设备驱动代码,内核模块的概念,允许将驱动代码加入到运行中的内核而无需重新编译内核。不使用时可以从内核模块中移走。
linux系统将硬件设备当成特殊的文件,称为设备文件,具体分为字符型设备文件、块设备文件、网络设备文件。字符型设备文件处理数据时每次只能处理一个字符,调制解调器和终端是字符型设备文件。块设备文件是处理数据时每次能处理大块数据的设备,比如硬盘。网络设备文件是采用数据包发送和接收数据的设备,比如网卡和loopback回环设备。
d、文件系统
linux内核支持通过不同类型的文件系统从硬盘读写数据。linux采用虚拟文件系统(VFS),作为和每个文件系统的交互接口,当每个文件系统挂载时,VFS将信息都缓存到内存中。
2、GNU
gnu是linux执行一些标准功能的工具,比如控制文件和程序。shell就是gnu工具,shell核心是命令提示符,也可以将shell命令放入文件中作为程序执行,为.sh脚本。linux默认shell发行版本为bash shell。
3、桌面环境
图形化桌面环境的弊端是占用相当一部分的系统资源,在运行环境中关闭较好。在树莓派环境,运行sudo raspi-config选择命令行启动,命令行可以通过startx启动图形化界面。
第二章 走进shell
shell提供的文本行命令界面CLI(command line interface),在图形化界面的终端仿真器访问CLI,terminal或者xterm,xterm是第一个可用的终端仿真器。
第三章 基本的bash shell命令
1、shell介绍
/etc/passwd文件包含了所有系统用户账户以及每个用户的基本配置信息,pi用户使用/bin/bash中的shell。
man命令可以查看手册,man + 命令 ,阅读手册的习惯,尤其是第一段或是descri部分的前两段,会学到各种行话。man查看时是通过分页程序来实现的,空格翻页,回车逐行,箭头向上向下,q退出。
man -k ??可以查找相关命令。
linux手册还有对应的内容区域,1-9,man命令查看的最低编号的内容,一个命令偶尔会在不同区域有对应的手册页。man 1 hostname,man 7 hostname。
info + command可查看info页面信息,命令 -help可以查看帮助。
2、文件系统
windows每个驱动器都有自己的目录结构,linux不一样,将文件存储在单个目录结构中,这个目录称为虚拟目录(vd)。linux使用正斜线/而不是反斜线\来划分目录,其他硬盘挂载在根驱动器上。
/dev ,设备目录;
/etc,配置文件目录
/lib库文件目录
/proc进进程目录,存放现有硬件和进程相关信息
/opt可选目录,存第三方软件和数据
/run运行目录,运行时数据
/srv服务目录,存放本地服务相关文件
/var可变目录,存放经常变化的文件
cd目录没有指定路径,将切换到主目录。波浪号表明位于主目录中。pwd显示当前目录。相对文件目录不以代表根目录的/ 开头,.表示当前目录,..表示当前目录的父目录。
ls查看当前目录的文件,按字母排序,按行排序,如果终端仿真器是彩色的,文件和文件夹的颜色不一样。ls -F可以区分文件和文件夹,目录名后加了正斜线/ 。
ls -a可以显示隐藏的文件和文件夹,用来保存配置信息,通常是以.开头的文件。
ls -R是递归选项,列出了当前目录下包含子目录中的文件,注意输出可能会很长。ls后面的参数可以合并ls -FR或分开ls -F -R。
ls -l显示长列表。通配符,ls -l dir文件过滤,ls -l d?r,?表示一个字符,*表示零个或者多个字符。ls -l d[abf]r,表示dar、dbr、dfr都会找到;ls -l d[a-i]r,从a-i都会找到。ls -l d[!a]r,排除a。
touch创建空文件,并用你的用户名作为文件属主。touch还可以改变文件修改时间。
stat查看文件具体信息。
复制文件cp,cp doc1 doc2,cp - i doc1 doc2,后者会提示是否覆盖已有文件。cp 、/etc/doc1 .,复制文件到当前目录,.表示当前目录。cp -R表示递归复制整个目录中的文件。cp命令也可以使用通配符,cp *ssss /etc/ 。
命令补全使用制表键TAB。
链接文件是指向真实文件的占位符,分为符号链接和硬链接。ln -s file sl_file,,不一样的文件,inode号不一样,ls -i可以查看。硬链接创建独立的虚拟文件,inode一样,是同个文件,大小一样。复制链接文件要小心。不要创建软链接的软链接。
mv file1 file2,会改名文件名,inide编号和时间戳不变。mv指令只影响文件名。
rm flie,removing文件,删除。rm -i file会提示是否真的删除该文件。rm -f强制删除文件。
mkdir new_dir创建目录,mkdir -p new_dir/sub_dir/under_dir可以根据需要创建缺失的目录。
rmdir只能删除空目录,需要先删除里面的文件rm。rm -rf dir递归删除牡蛎及文件,谨慎操作。
tree dir,展示目录结构。
file dsss,查看dsss文件类型,可以区分字符编码、文件类型、链接。
cat flie,查看文件内容。参数-n加上行号。大型文件不用,会全部打印出来。
more file,分页显示,支持文本的基本移动。
less目录,more的升级版,全面控制权。
tail file查看最后10行的内容,tail -n 2显示最后两行内容,tail -f可以允许在其他进程使用该文件时查看文件内容,tail会保持活动状态,并不断显示添加到文件中的内容,这是事实检测系统日志的绝妙方式。
head是和tail相反,显示文件开头10行,head -n 2.这两个命令都支持在破折号后面直接加数字。但是head命令不支持-f命令,因为文件头不会改变。
第四章 更多bash shell命令
1、进程
process进程,ps命令使用。ps -ef查看所有进程,UID是启动进程的用户,PID进程ID号,PPID父进程的ID号,C进程生命周期cpu利用率,STIME进程启动时系统时间,TTY进程启动时终端设备,TIME运行进程需要的累计cpu时间,CMD程序名称。
ps -l长格式出书、输出。
ps命令在收集运行在系统上的进程信息十分有用,但只能显示某个特定时间点的信息。要观察频繁换进换出的内存的进程趋势,ps命令就不方便了。
top与ps类似,但是实时显示的。
第一行是系统概况,显示当前时间、运行时间、登录用户数、系统平均负载(最近1分钟、5分钟、15分钟的平均负载)。值越大负载率越高,一般超过2说明系统较繁忙。
第二行显示进程概要信息,top命令将进程称为任务,总进程、运行中的、休眠的、停止的、僵化的(进程完成了,父进程没有响应)。
第三行是CPU概要信息,将利用率分为几类输出。
第三四行是内存和swap交换空间状态。
最后是进程详细列表。pid进程号、user进程属主、pr进程优先级、ni进程谦让度、virt进程占有虚拟内存总量、res进程占有物理内存总量、shr进程与其他进程共享内存总量,s进程状态,%cpu进程使用cpu时间比例、%mem进程使用cpu占可用内存比例,+time进程启动到目前cpu时间量。comand程序名。
进程间通过信号来通信,要发送进程信号,你必须是进程属主或root用户。杀进程kill pid,killall cmd支持进程名而不是pid号来结束进程。
2、磁盘
所有的磁盘都并入一个虚拟目录下,使用心得存储媒体前需要挂载mounting。
mount命令会列出当前系统挂载的设备列表。mount挂载媒体设备。
umount移除设备。
df查看设备上还剩多少磁盘空间,df -h可以用G M来显示大小。
du查看当前目录下磁盘使用情况,判断目录下是不是有超大文件,du -h。du -s统计目录使用空间。
3、数据文件
cat输出文件内容,sort排序数据,按照字符排序,参数-n把数字识别为数字而不是字符。-m表示按照月份排序。
grep搜索文件数据,grep 123 file。参数-v反向搜索,参数-n显示所在的行数。
gzip压缩文件,压缩命令行指定的文件,可以使用通配符一次性压缩,gzip my* 。gunzip解压。
标准归档工具是tar,可以给整个目录归档。
tar -cvf file.tar dir1/ dir2/ 。归档
tar -tf file.tar查看列出归档文件的内容
tar -xvf file.tar 提取内容,在目录下重新创建。