1.Linux概述和目录介绍
安装教程:Linux安装教程(超超超级详细)_Junior Tester L的博客-CSDN博客
推荐使用yum 安装,yum是在线安装
2.Linux文件基本操作
- 第一天学习目标:
-
- 安装虚拟机并且搭建Linux环境
- 安装并学会使用SSH软件,可以远程连接Linux
- 了解Linux操作系统的特点、分类、版本等
- 熟悉Linux目录结构和重要目录的作用
- 学会Linux命令结构和常用的基本命令
- 掌握Linux快捷键
- 1.Linux概述
-
- Linux是一个多任务多用户的网络服务器开源操作系统。
- 1.1操作系统
-
-
- 操作系统是一套管理软件和硬件的平台级软件。
- 桌面:Windows、mac os
- 移动端:Android、ios、鸿蒙
- 服务器:Linux、unix、Windows Server
- 嵌入式和工业领域:Linux
-
-
- 1.2Linux用途
-
-
- 互联网产品服务器领域,大型互联网企业基本都是Linux
- 嵌入式、工业制造业都有应用
-
-
- 1.3Linux特点
-
-
- 开源、免费
- 安全性高
- 稳定高
- 性能好
-
-
- 1.4Linux组成
-
-
- 内核:操作系统最核心的那部分程序,内核也有不同的版本。仅有内核是无法使用的,我们平时用的版本都是基于内核封装的发行版本。
- shell:翻译过来就是壳。可以理解为包裹在内核外的一层壳,也是一种编程语言,用于跟内核进行交互的。
- 应用程序:基于操作系统之上的各类应用软件
- 文件系统:指的是操作系统对文件的组织管理方式。Linux跟Windows有很大不同,最大的特点是:一切皆文件,包括硬件,也是以文件方式来管理存储的。Linux只有一个根目录:/
-
-
- 1.5Linux版本
-
-
- 内核版本:开发版本和稳定版本
- 发行版本:顾名思义,就是在内核版本上加了很多常用的软件的版本,可以拿到市场上发行的,方便消费者直接使用。有免费的有收费的。
-
-
-
-
- red hat红帽:这是收费版本的主流,发行的公司就叫红帽,一般大型公司都在用,它的性能好,有售后。
- centos:这是社区开源版本,也属于红帽公司。这个是基于红帽衍生出来的版本,性能跟红帽接近,一般中小型公司使用。这个是免费的,我们接下来学习的版本就是centos7
- Ubuntu:这是一个带图形化界面的版本,主要给个人用户使用。跟Windows操作习惯很像,是Linux进军个人桌面市场的产品。
-
-
-
- 1.6为什么要学Linux
-
-
- 你将来工作中很可能用得到
- 你将来有可能直接在Linux上做开发
-
-
- 1.7如何使用Linux
-
-
- 桌面可视化操作,仅限于带图形界面的版本,企业中不会这么用。
- 使用shell命令行
-
-
-
-
- 企业中,会通过SSH工具远程访问操作Linux服务器
- 个人学习,一般会在电脑上安装一个虚拟机,然后使用SSH工具连接虚拟机上的Linux服务器
- shell分为好多个版本,各有各的用途,cenos默认的shell版本bash shell
-
-
-
-
- 常用的SSH工具,SSH是远程安全连接协议,默认使用22端口
-
-
-
-
- 命令行SSH工具:xshell(商业版收费)、putty(开源免费)等等
- 文件传输工具:xftp(商业版收费)、winscp(开源免费)等等
-
-
-
-
-
-
- 在Windows和Linux之间传输文件,使用xftp或winscp可视化操作即可。
- 在Linux操作系统之间进行文件传输,要使用scp命令
-
-
-
-
-
-
-
-
- 从本地将文件复制到远程:scp 本地文件 远端服务器用户名@远端服务器IP地址:远端服务器的具体目录位置,输入完这个命令后,需要再输入远端服务器的密码
- 从远端服务器复制文件到本地,只需要调换scp后面的操作对象位置即可。
- 举例:scp /root/hello.sh root@117.23.45.112:/opt
-
-
-
-
- 2.Linux系统目录结构
-
- Linux所有目录都源于一个根目录:/
- /home:家目录,对于家目录,系统会用~来代替,所谓家目录,就是系统给用户分配的目录,当普通用户登录系统的时候,会默认切换到用户对应的家目录。root用户的家目录在/root
- /mnt:挂载目录,/media也是挂载目录。什么是挂载,因为Linux操作系统会把一切当作文件管理,包括硬件,所以当有新的硬件接入的时候,需要进行挂载操作,挂载到挂载目录下,否则硬件无法使用。
- /opt:option的缩写,选项的意思。这个目录叫做可选目录,这个目录可以用来自由操作,给里面安装一些应用程序。
- /root:管理员的家目录
- /tmp:临时目录,存放临时使用的文件,重启后会删除。
- /var:var是variable的缩写,变量的意思。这里面存放快速变化增长的一些数据,一般我们会把日志文件放在这个目录。
- /usr:存放系统应用程序的目录,应用程序也可以安装到opt下。类似于Windows的program files这个目录。一般来说管理员root会把程序安装到/usr/local
- 以下目录都不要随便乱动
- /bin:bin是binary的缩写,二进制的意思。存放可以直接执行的命令文件。
- /boot:里面是开机启动的系统基础引导文件。
- /dev:设备device的缩写,存放的是各个硬件设备的目录。Linux会把硬件也当作文件来管理。
- /proc:process的缩写,记录系统进程相关的信息。
- /sbin:存放管理员可以执行的命令
- 3.Linux常用基本命令
-
- 3.1Linux命令格式
-
-
- 命令关键字 参数1 参数2... 操作对象
- 注意:Linux区分大小写,参数有多个的时候,可以分开写,也可以合并写,参数如果用简写使用-开头,如果写单词全拼,用--开头。
- 命令帮助:对于不熟悉的命令和参数,可以使用帮助来查看。
-
-
-
-
- 如:命令 --help
- 除了--help之外,还有一个帮助命令,这个命令显示的信息更完整,这个命令是:
-
-
-
-
-
-
- man 命令
-
-
-
-
- 3.2Linux常用基本命令
-
-
- 新建用户:useradd 用户名,给新建的用户添加密码:passwd 用户名
- 删除用户:userdel -r 用户名
- 切换用户:su 用户名,切换到用户名所代表的用户,su是switch user的缩写
-
-
-
-
- 切换用户的另外一种情况,加一个参数:-
- 加-参数之后,代表的是另外一种切换,这种切换不仅切换了用户身份,还切换到了用户的家目录。这是一种更完全的切换。
-
-
-
-
- 系统时间命令
-
-
-
-
- 查看当前系统时间:date
- 设置修改系统时间:date -s "20230503 16:17:30"
- 推荐的方式是连接时间服务器来同步时间:ntpdate 时间服务器的地址
-
-
-
-
-
-
- 比如:ntpdate ntp1.aliyun.com
-
-
-
-
-
- yum方式安装软件命令
-
-
-
-
- yum是一种在线安装软件的方式,使用起来很方便
-
-
-
-
-
-
- 安装:yum install 软件名
-
-
-
-
-
-
-
-
- 使用-y参数,可以在安装的时候,一路点yes,而不需要给我提示。比如:yum -y install ntpdate
-
-
-
-
-
-
-
-
- 搜索有哪些软件版本可以安装:yum search 软件名
- 卸载:yum remove 软件名
- 查看目前已经安装的软件有哪些:yum list installed
-
-
-
-
-
- 查看系统版本:cat /etc/*release
- 关机和重启命令
-
-
-
-
- 立刻关机:poweroff
- 高级命令:shutdown,配合不同参数可以实现关机、重启、定时关机重启
-
-
-
-
-
-
- 关机:shutdown -h 指定时间,此处-h参数是halt的缩写。
-
-
-
-
-
-
-
-
- 如:shutdown -h now 代表立刻关机
- 如:shutdown -h 10 代表10分钟以后关机
- 如:shutdown -h 20:00:00 代表晚上八点整关机
-
-
-
-
-
-
-
-
- 重启:换成-r参数即可,-r是reboot的缩写,代表重启,reboot本身也是一个重启命令
-
-
-
-
-
-
-
-
- 如:shutdown -r now 代表立刻重启
-
-
-
-
-
-
-
-
- 如果使用了定时关机重启任务,需要手动取消
-
-
-
-
-
-
-
-
- shutdown -c 可以取消
-
-
-
-
-
-
- 注销命令
-
-
-
-
- exit或者ctrl+d
-
-
- 4.Linux常用快捷键
-
- 上下方向键可以翻阅历史命令
-
-
- 使用history命令可以查看使用过的所有命令历史记录,每个命令前面有个编号,使用!编号可以再次执行这个命令
-
-
- tab键可以自动不全名称
- CTRL+c 终止当前进程(不是复制)
- clear或者CTRL+l可以清屏
- 复制粘贴命令:复制CTRL+insert 粘贴shift+insert
- 快速定位命令位置:CTRL+a光标移动到命名行首,CTRL+e光标移动到命令行尾巴。CTRL+鼠标左键移动到鼠标指向位置。
- 删除部分命令字段:CTRL+u删掉光标处到行首的所有字符,CTRL+k删除光标处到行尾的字符。
- 第二天学习目标:
-
- 掌握系统信息和性能查看命令,理解各参数和查询结果含义
- 掌握Linux网络相关命令,学会查看和配置网络
- 掌握Linux目录和文件的相关操作命令及参数
- 1.系统信息和性能查看
-
- 查看磁盘的占用情况:df -Th 这是参数连着写。相当于df -T -h
-
-
- -T:代表type类型,可以查看到磁盘的类型
- -h:代表human人类,就是以人们熟悉的单位来表示磁盘大小,如K、M、G。如果不加这个参数,默认以KB字节单位显示,可读性差。
- 查询结果含义:size代表磁盘总大小,used代表已使用的空间,avail代表剩余可用空间。我们重点关注根目录的磁盘使用情况即可。
-
-
- 查看当前目录占用的空间大小:du -h
-
-
- -a:显示当前目录和子目录占用的大小,包括了隐藏文件。如果不加-a,显示的是默认目录里面的情况。
- -a:显示当前目录和子目录占用的大小,包括了隐藏文件。如果不加-a,显示的是默认目录里面的情况。
-
-
- 查看内存使用情况:free -m
-
-
- -m:代表以M为单位查看内存大小
- 查询结果的含义:
-
-
-
-
- total列:代表总内存大小,used代表已使用的内存,free代表空闲的内存。
- mem行:代表内存的情况,
- swap行:代表内存的交换分区情况(不用关注)
-
-
-
- 动态监控系统状态:top
-
-
- top命令是一个持续运行的进程,需要按q退出,数据没3秒更新一次。
- 查询结果含义:
- 第一行:top -后面:当前系统时间 up 系统连续运行的时间,当前登录的用户数,load average(系统的平均负载值):第一个值代表1分钟内的平均负载值,第二个值代表5分钟的平均负载值,第三个值代表15分钟的平均负载值。
- top命令是一个持续运行的进程,需要按q退出,数据没3秒更新一次。
-
-
-
-
- 关于平均负载值的含义:
-
-
-
-
-
-
- 理解这个值,首先确定一个标准值,条件如下:
-
-
-
-
-
-
-
-
- 1个cup并且1个核心的情况下,负载值为1的时候达到满负载。
-
-
-
-
-
-
-
-
- 根据以上标准,当cup的数量和核心数量改变的时候,满负载也对应改变。比如:现在变成2个cpu,每个cpu也是1核心,这时候满负载值就称为2,如果还是1个cpu,但是有两个核心,满负载值也是2
-
-
-
-
-
-
- 查看cpu的数量:
-
-
-
-
-
-
- cat /proc/cpuinfo
-
-
-
-
-
-
-
-
- 这个文件含义如下:
- 每一行model name代表一个cpu
- 每个cpu的核心数,通过cpu cores来看
-
-
-
-
-
-
- 第二行:进程的具体运行情况:tasks:代表进程任务:tatal代表进程的总数量,running代表正在前台运行的进程数,sleeping代表休眠进程数,stoppped代表停止的进程数,zombie代表僵尸进程数。
- 第三行:cpu的占用情况,百分比表示。us代表用户空间占用情况,sy代表内核空间占用情况,ni代表改变过优先级的进程的占用情况,id代表空闲cpu情况。后面的wa,hi,si,st不必关注。
- 第四行、第五行代表内存使用情况:参考内存查看命令free即可。额外关注一点,交换分区的used数据,如果为0,说明内存够用,不需要使用交换分区。如果有值,就说明内存不够用了,一直在用交换分区。
- 进程列表部分:
-
-
-
-
- PID列:进程id,每个进程有唯一的id号
- USER列:代表进程的所有者
- PR列:进程优先级
- NI列:跟优先级相关的值,nice的缩写,这个值越低优先级越高。
- VIRT\RES\SHR:都是关于内存的虚拟内存、共享内存等详细的参数,我们不用关注。
- S列:代表进程状态,status的缩写。有如下几种状态:
-
-
-
-
-
-
- S:休眠
- R:运行中
- T:停止
- Z:僵尸进程
-
-
-
-
-
-
- %CPU:代表进程占用cpu百分比
- %MEM:代表进程占用内存百分比
- TIME+:代表进程使用cpu的时间总计
-
-
-
-
-
-
- 单位如下:从右到左看,单位分别是百分之一秒,十分之一秒,秒,十秒,分钟。
-
-
-
-
-
-
- COMMAND:即命令,也就是这个进程的名称或者命令。
-
-
- 2.Linux网络相关命令
-
- 网络查看命令
-
-
- 查看网络配置的基本信息:ifconfig,Windows上是ipconfig。ens33代表当前的网卡。
- 测试网络的连通性:ping IP地址或者域名,这个命令使用Ctrl+c退出
- 查看网络端口:
- 查看网络配置的基本信息:ifconfig,Windows上是ipconfig。ens33代表当前的网卡。
-
-
-
-
- lsof -i:端口号 查看当前端口号的文件信息,此命令用于查看某个端口号是否被占用。如果有内容就说明被占用了。
- 查看结果的含义:
-
-
-
-
-
-
- command列:进程名称(重点关注)
- pid列:进程的id(重点关注)
- user列:进程拥有者
- fd列:文件标识符
- type列:文件类型
- device列:磁盘名称位置编号
- size列:大小
- node列:节点
- name列:文件名称
-
-
-
-
-
- 查看当前系统有哪些端口正在被使用:
-
-
-
-
- netstat -lntp
- 重点关注这几列:
- netstat -lntp
-
-
-
-
-
-
- Local Address代表本地地址,是个IP地址,IP地址后冒号后的就是端口号,说明这个端口号被占用。
- PID/Program name代表占用本端口的进程id和命名名。
-
-
-
- 3.Linux目录和文件操作命令
-
- 3.1目录操作命令
-
-
- 进入目录:cd 目录名称或者一个目录的路径 cd是change directory的缩写
-
-
-
-
- 比如:cd /home/test01
-
-
-
-
- 打印当前工作目录的完整路径:pwd,全称是print word directory
- 查看目录的内容:ls,全称是list。直接ls代表查看当前目录的内容,ls后面也可以跟上路径,代表查看这个路径下的内容。比如:ls /home/test01
-
-
-
-
- 参数-a:all的缩写,查看目录下所有内容,包括了隐藏文件
- 参数-l:list的缩写,以详情的形式查看目录
- 参数-h:human的缩写,以人们容易理解的单位查看大小
-
-
-
-
- 绝对路径和相对路径
-
-
-
-
- 绝对路径:就是从根目录/开始的一个路径,可以准确定位到一个位置,比如:/home/tommy
- 相对路径:相对于你当前位置的一种表现方式
-
-
-
-
-
-
- . 代表当前位置
- .. 代表上级目录
- ~ 代表当前用户的家目录
- - 代表上一次所在的目录
-
-
-
-
-
- 创建目录:mkdir 目录名或者路径 mkdir全称是make directory。
-
-
-
-
- mkdir支持同时创建多个目录,如:mkdir a b,默认在当前目录下创建,也可以使用路径指定一个创建位置,如:mkdir /root/test01
- mkdir支持创建多级目录,使用 -p 参数即可,-p参数是parent的缩写。如:mkdir -p dir1/dir2
-
-
-
-
- Linux文件和目录的特点
-
-
-
-
- 名称是区分大小写的
- Linux的文件是没有专用后缀名的。当你看到类似后缀名的表示,其实那也属于文件名的一部分。之所以这么写是为了区分文件属于什么类型,是一种约定的写法。比如:anaconda-ks.cfg这个整体就是一个文件名,.cfg不是后缀名。
-
-
-
-
- 以树状形式来展示目录结构:tree
-
-
- 3.2文件操作命令
-
-
- 创建文件
-
-
-
-
- touch命令可以在当前位置创建一个空白文件,可以同时创建多个,空格分开。比如:touch file1 file2
- 使用vi编辑器命令也可以创建文件,并且同时打开文件进行编辑,如:vi file_vi
-
-
-
-
- 查看文件
-
-
-
-
- cat:一次性显示文件的所有内容,当文件内容较多时,会快速滚动屏幕,直到最后一屏。所以cat命令适合查看短文件。如:cat file1
-
-
-
-
-
-
- 参数-n:n是number的缩写,用于显示行号
-
-
-
-
-
-
- tac:倒过来查看文件,就是对文件进行倒叙排序后再查看
- more:一次性显示一屏内容,并且在底部有一行提示信息,给出当前的位置百分比。
-
-
-
-
-
-
- 快捷键:空格显示下一屏内容
- 快捷键:回车显示下一行内容
- 快捷键:q 可以手动退出,否则显示完毕后自动退出
-
-
-
-
-
-
- less:这个命令跟more相似,但功能更全面,more只能往下看,不能回看。less支持回看。
-
-
-
-
-
-
- 快捷键:空格显示下一屏内容
- 快捷键:回车显示下一行内容
- 快捷键:j、k可以上下翻行
- 快捷键:翻页键(pageup、pagedown)可以实现上下翻页
- 快捷键:q 退出,注意less不会自动退出
- 快捷键:/ 支持在文件中查找内容,查找的内容关键字写到/后面即可
-
-
-
-
-
-
- head:从头开始查看
-
-
-
-
-
-
- 参数:可以指定查看的行数,默认只显示10行。如:head 文件名 显示这个文件前10行。head -30 文件名 代表显示文件的前30行。
-
-
-
-
-
-
- tail:从尾部开始查看
-
-
-
-
-
-
- 参数:可以指定查看的行数,默认只显示10行。如:tail 文件名 显示这个文件后10行。tail -30 文件名 代表显示文件的后30行。
- 参数-f:代表实时查看文件,监控文件的最新变化,也是查看尾部,默认显示10行,是一个连续运行的程序,需要ctrl+c退出。这个命令很常用,主要用来查看日志,因为日志的内容会经常更新,而更新的内容都写在了尾部。
-
-
-
-
- 3.3目录和文件通用操作
-
-
- 复制文件或目录:cp,copy的缩写
-
-
-
-
- 格式:cp 源 目标。源可以是多个文件 ,可以是绝对路径或相对路径。目标如果是一个目录,那么会在这个目录下产生同名文件,完成复制。目标如果是一个文件,那么复制以后会再进行重命名。相当于改名另存为。
- 参数-r:这个参数代表递归的意思,可以实现操作目录的每一级,直到最下面一级。这样就可以实现对一个目录的完整复制。所以当你复制的是一个目录的适合,需要-r参数,否则只能复制文件。
-
-
-
-
- 剪切移动文件或目录:mv,move的缩写
-
-
-
-
- 格式:mv 源 目标。源和目标如果相同,都是一个位置,相当于重命名。如果源和目标位置不同,就是移动。
-
-
-
-
- 删除文件或目录:rm,remove的缩写
-
-
-
-
- 格式:rm 要删除的文件或目录
-
-
-
-
-
-
- 参数-r:代表递归,用于删除目录,如果不加-r参数,只能删除文件。
- 参数-f:代表强制删除,不需要跟我确认。
-
-
-
-
-
-
- 注意:这个命令 rm -rf 是很危险的,代表着直接强制删除后面的一个目录,如果删错了就无法恢复,一定要慎用,一定要确认好你删除的对象。
-
-
-
- 3.4查找和搜索以及Linux文档处理三剑客
-
-
- 通配符:* 可以匹配0到多个任意字符 ?匹配一个任意字符
- 查找文件:find
-
-
-
-
- 按照名称查找:find 目录名 -name 文件名
-
-
-
-
-
-
- 如:find . -name file2 代表在当前目录下查找file2文件。
- 通配符查找:find /etc -name "*ens33" 代表在/etc目录下查找以ens33结尾的文件
-
-
-
-
-
-
- 按类型查找:find 目录名 -name 文件名 -type d(目录) f(文件) l(链接,相当于快捷方式)
-
-
-
-
- 文档处理三剑客
-
-
-
-
- grep命令
-
-
-
-
-
-
- 用于在文件中查找字符,它是通过正则表达式的语法查找的。
- 格式:grep 关键词 文件名 代表在文件中查找对应的关键字,关键字部分可以替换成正则表达式。
- 参数-i:忽略大小写
- 参数-n:显示匹配的行,同时加上行号
- 参数-v:显示不匹配的行
- 使用正则表达式匹配
-
-
-
-
-
-
-
-
- grep "^a" 文件名,代表在文件中查找以a开头的字符
- grep "n$" 文件名,代表在文件中查找以n结尾的字符
-
-
-
-
3.Linux文件操作
Linux 命令大全(看这一篇就足够)_linux命令-CSDN博客
4.文本分析
5.压缩打包
- Linux第三天第四天目标
-
- 掌握Linux文档处理三剑客
- 掌握vi/vim编辑器的使用
- 掌握权限管理命令
- 掌握打包相关命令
- 掌握重定向、管道符和进程管理命令
- 了解shell脚本的简单使用
- sed命令
-
- sed可以按照脚本指令来处理编辑文本文件。主要用来对文件进行增删改操作。
- 格式:sed [参数][动作指令] 文件名
-
-
- 参数:
-
-
-
-
- -e:可以同时指定多个指令,每个-e后面可以跟一个指令
- -n:取消默认的输出,这个参数一般配合p(print)一起使用,可以打印指定的内容
- -i:会修改源文件。如果不加,sed做的所有操作都不会修改源文件。
-
-
-
-
- 动作指令
-
-
-
-
- a:新增
- d:删除
- c:替换行
- i:插入
- p:打印,一般和-n参数一起使用
- s:替换指定的字符串
-
-
-
-
- 实例
-
-
-
-
- 新增a
-
-
-
-
-
-
- sed '2a test' test.txt 在第二行后面新增一行内容test
- sed '1,3a test' test.txt 在第1行到第3行每一行后面都增加一行内容test
- sed '$a test' test.txt 在最后一行增加一行内容test,$代表最后一行
-
-
-
-
-
-
- 替换行c
-
-
-
-
-
-
- sed '2c test' test.txt 将第二行内容整体替换成test
- sed '1,3c test' test.txt 将1-3行整体替换成test
-
-
-
-
-
-
- 删除d
-
-
-
-
-
-
- sed '2d' test.txt 删除第2行
- sed '1,3d' test.txt 删除第1-3行
-
-
-
-
-
-
- 插入i
-
-
-
-
-
-
- sed '2i test' test.txt 在第二行前面插入一行内容test
- sed '1,3i test' test.txt 在第1-3行每行前面插入一行test
-
-
-
-
-
-
- 打印p
-
-
-
-
-
-
- sed '2p' test.txt 在默认输出的情况下,打印第二行,相当于第二行打印了两遍
- sed '1,3p' test.txt 在默认输出的情况下,打印第1-3行,相当于第1-3行各打印了两遍
- sed -n '2p' test.txt 通过-n参数取消默认输出,只打印第二行
- sed -n '1,3p' test.txt 通过-n参数取消默认输出,只打印第1-3行
- 我们还可以使用正则表达式去匹配我们要找的内容,然后打印出来
-
-
-
-
-
-
-
-
- sed -n '/user/p' test.txt 使用正则表达式匹配user字符所在行,并打印出来,正则表达式放在两个/中间
- sed -n '/user/!p' test.txt 在上面命令p指令前加!,代表取反操作,就是打印不匹配的行
-
-
-
-
-
-
-
- 替换指定的字符串s
-
-
-
-
-
-
- sed 's/old/new/' test.txt 替换old为new,默认只替换每一行第一个匹配结果
- 如果希望全部替换,需要加g参数,g代表global(全局)如:sed 's/old/new/g' test.txt
- sed 's/OLD/new/gi' test.txt 又增加了一个参数i,代表忽略大小写。
- sed '1,3s/old/new/g' test.txt 指定范围内进行替换,只替换第1-3行的内容
-
-
-
-
-
- 使用-e参数同时指定多个指令
-
-
-
-
- sed -e 's/old/new/g' -e '2d' test.txt 先用s指令完成替换,然后再用d指令删除第二行
-
-
- awk命令
-
- awk是一个强大的文本分析工具,简单来说就是把文件逐行读入,默认以空格作为分隔符,然后进行分隔切片,切片后的部分是一列,然后再进行处理输出。
- 语法:awk [option]'pattern{action}'{filename} 注意:只能用单引号
- 默认情况下,awk是逐行处理文本的,也就是先处理当前行,再处理下一行,这种模式是默认模式,也叫空模式。如果指定了条件,awk在处理文本时,只有满足条件的行才会被处理。这里说的其实就是模式pattern。
-
-
- options选项:常用的是-F,用来指定分隔符
-
-
-
-
- 案例:指定分隔符为逗号,然后进行分隔,分隔之后就有了多列,然后打印前两列。
- awk -F, '{print $1,$2}' test.txt
- 案例:指定多个分隔符,比如先使用空格分隔,然后再对分隔出来的列继续使用逗号分隔
- awk -F'[ ,]' '{print $1,$2}' test.txt
-
-
-
-
- pattern模式:其实就是执行指令动作需要满足的条件,有点像if(pattern){动作指令脚本};
-
-
-
-
- awk命令主要有以下几种模式:
-
-
-
-
-
-
- 空模式:也是默认模式,即不指定匹配条件,一行一行去处理文本内容。
- BEGIN模式:即在文本处理之前,需要执行的操作,比如定义一些变量,给后面使用,或者打印一个表格的表头。
- END模式:在处理完文本所有行之后,需要执行的操作。
-
-
-
-
-
-
-
-
- awk 'BEGIN{print "lets begin"}{print $1,$2}END{print "end"}' test.txt 开始处理每一行内容之前,先打印了lets begin,然后处理每一行,并且打印前两列,处理完全部行之后,打印了end
- awk 'BEGIN{print "定义一个变量line",line=0}{line+=1}END{print line}' test.txt 开始处理文档之前,先打印了一句话,并且定义了一个变量line,给它初始化为0,然后每次处理一行的时候,给line+1,最后处理完毕后,打印出line的值。
-
-
-
-
-
-
-
-
- 关系运算模式:就是在指定条件时,使用关系运算符。
-
-
-
-
-
-
-
-
- 如:我们取指定的行进行操作
- NR时表示行号的默认变量,我们使用这个变量来对行进行逻辑运算。
- 如:取第一行只分隔,不做任何动作:awk 'NR==1' test.txt 注意:'NR==1'是指定的执行条件,不是脚本指令本身,所以不能放到{}中。
- 如:awk 'NR==1 {print $1}' test.txt 取第一行,然后分隔,然后打印分隔后的第一列。
- 如:取多行,取第2到第4行 awk 'NR>=2&&NR<=4' test.txt
-
-
-
-
-
-
-
-
- 正则模式:把正则表达式当作条件,满足正则表达式匹配的行才处理。正则表达式放在//中
-
-
-
-
-
-
-
-
- 如下:
-
-
-
-
-
-
-
-
-
-
- 找出有指定关键字的行来处理:awk '/old|hello/' test.txt 代表找出含有old或hello字符的行
-
-
-
-
-
-
-
- action动作指令:就是你要执行的操作
-
-
-
-
- 输出完整的内容:awk '{print $0}' test.txt
- 打印指定的列:awk '{print $1,$3}' test.txt 打印第一列和第三列
- 打印最后一列:需要用到一个变量NF,代表最后一列。awk '{print $NF}' test.txt
- 输出总共有多少列:awk '{print NF}' test.txt
- 输出总共有多少行:使用行数变量NR,如:awk 'END{print NR}' test.txt
-
-
- vi/vim文本编辑器
-
- vim是vi的增强版,vi是系统自带的。以下命令在vi/vim中通用:
-
-
- 刚打开的默认模式
-
-
-
-
- 快捷键:gg跳到文件开头,G跳到文件最后一行。
- 快捷键:0跳到行首,$跳到行尾。
- 快捷键:dd删除光标所在行
- 删除多行:首先进入底线模式,输入显示行号命令:set nu,然后输入你要删除的行,再输入d,即可删除。如:5,10d 代表删除5-10行。
- 撤销恢复操作:按u
-
-
-
-
- 底线模式,在默认模式下,按:进入。按esc回到默认模式。
-
-
-
-
- 命令:w保存,另存为一个新文件:w 文件名
- 命令:q退出,如果你修改了文件直接退出会有提示,因为你没保存,这个时候想保存退出使用wq,如果不想保存,直接退出,需要加!来强制退出,如q!
- 命令:wq保存并退出
- 命令:set nu设置行号,有了行号之后可以输入行号直接回车,定位所在行。set nonu可以取消行号。
- 命令:set ic 忽略大小写,set noic不忽略大小写
- 搜索关键字命令:/关键字 即可完成对关键字的搜索,光标会定位到搜索结果的第一个位置,这个时候可以使用n和N在多个结果之间切换,n下一个,N上一个。
-
-
-
-
- 插入模式,insert模式。按i、a、o都可以进入插入模式,i是在光标前插入,a是在光标之后插入,o是在光标位置的下一行另起一行插入内容。按esc回到默认模式。
-
- Linux权限管理命令
-
- 角色:u、g、o三种角色,u拥有者,g所属的组,o其他人。这三个分别是user、group、other的简写。还有一种简写:a,代表all,所有人,指代所有角色
-
-
- 1.补充:组管理的相关命令
- 1.1 添加组
-
-
-
-
- groupadd 组名
- groupadd devgroup:创建一个组devgroup
-
-
-
-
- 1.2 删除组
-
-
-
-
- groupdel 组名
- groupdel devgroup:删除组devgroup
-
-
-
-
- 1.3 将用户添加到指定的组、从指定的组中移除
-
-
-
-
- gpasswd –a/-d 用户名 组名
- gpasswd –a zhangsan test
- gpasswd –d zhangsan test
-
-
-
-
- 1.4 增加用户时,直接增加组
-
-
-
-
- useradd -g 用户组 用户名
-
-
-
-
- 1.5 修改用户的组
-
-
-
-
- usermod -g 用户组 用户名
-
-
-
- 权限类型:r读,w写,x执行
- 通过查看文件目录的详情信息,来了解权限相关的部分。使用命令:ls -l 这个也可以简写成:ll
-
-
- 第一列:一共10个字符位置,第一个字符代表类型,类型有以下几种:-代表普通文件,d代表目录,l代表链接。第二个到第十个字符,是三个一组出现的,每一组代表了一种角色的读写执行权限,第一组代表了u拥有者的权限,第二组代表了g所属组的权限,第三组代表了o其他人的权限。
- 第二列:显示一个数字,如果是目录,这个数字代表这个目录下一级子目录的个数(包括了隐藏的当前目录.和上级目录..),如果是文件,这个数字代表这个文件的链接数。
- 第三列:此文件或目录的所属用户
- 第四列:此文件或目录所属的组
- 第五列:显示文件或目录的大小,默认以字节单位显示
- 第6-8列:显示的是最后修改时间
- 第9列:文件或目录名称
-
-
- 修改权限:chmod
-
-
- 使用角色代号ugoa来修改权限
-
-
-
-
- chmod o+w 文件或目录名,代表给其他人o这种角色增加w写权限
- chmod ug+x 文件或目录名,代表给拥有者和所属组增加执行权限
- chmod a-x 文件或目录名,代表给所有角色去掉执行权限
- chmod u=rwx 文件或目录名,代表给拥有者直接赋予rwx权限
-
-
-
-
- 使用数字模式来修改权限
-
-
-
-
- 使用3位数字分别代表三种角色的三种权限,每个数字都可以表示三种权限,每个数字是由三位二进制数字转换而来。
- 参照下表:
- 举例:chmod 754 文件名,代表给这个文件754权限,7代表所有者具有读写执行权限,实际代表111二进制,5代表所属组具有读和执行权限,实际是101,4代表给其他人只读权限,实际是100
-
-
- 打包、解包、压缩、解压缩命令
-
- 统一使用tar命令,根据不同的参数完成不同的操作
-
-
- 参数:
-
-
-
-
- -c:新建打包文件,打包操作
- -v:在操作过程中,显示被操作的文件名
- -f:指定要操作的文件或目录,此参数要写在最后
- -x:解包操作
- -z:通过gzip(一种压缩格式)进行压缩或者解压缩操作
- -j:通过bzip2(一种压缩格式)进行压缩或者解压缩操作
- -C:将操作目录从当前目录(默认目录)改为指定目录
- -P:将操作的结果文件,放到指定目录,否则会放在当前目录。
-
-
-
-
- 常用参数组合:-cvf 打包,-zcvf打包同时压缩,-xvf解包,-zxvf解包同时解压。
-
-
-
-
- 举例:打包tar -cvf file.tar a ana,代表对a目录和ana文件进行了打包,打包的结果文件命名为file.tar,默认都是在当前目录操作。
- 举例:解包tar -xvf file.tar,代表对file.tar包文件进行解包,默认放在当前目录。
- 举例:打包同时压缩tar -zcf file.tar.gz a ana,代表对a目录和ana文件进行打包同时压缩,结果文件命名为file.tar.gz
- 举例:解包同时解压tar -zxf file.tar.gz,代表对file.tar.gz文件进行解包同时解压缩,默认在当前目录操作。
- 举例:使用-P和-C参数 tar -Pzcf /home/tommy/new.tar.gz -C /root a ana,代表将操作结果放到/home/tommy目录下,这个需要使用-P参数完成。将操作对象从当前默认位置,改为指定位置/root,这个用到了-C参数。
-
-
-
-
- 常见的打包压缩格式
-
-
-
-
- 打包后缀名:.tar
- 打包并且压缩的后缀名:.tar.gz,gzip格式压缩的
- 打包并且压缩的后缀名:.tar.bz2,bzip2格式压缩的
- 注意:什么样的格式压缩的,就要用什么样的格式解压。
-
-
- 重定向和管道符命
-
- 重定向:把命令的输出重新定向到指定的文件里面,默认是输出到屏幕的。
-
-
- >覆盖重定向:举例date>file 代表把date命令的输出,从默认的屏幕,重定向到file文件中,每次都会覆盖file文件原来的内容。
- >>:举例date>>file 代表不会覆盖file文件原来内容,而是在后面追加新内容。
- >/dev/null:代表重定向到空设备,也就是不输出任何结果,只执行命令
-
-
- 管道符:| 代表把一个命令的执行结果当作下一个命令的输入
-
-
- 举例:yum list installed | grep python,这个命令代表查找当前已安装的软件,然后使用管道符把查询结果给到grep命令继续处理,grep命令来搜索里面跟python相关的关键词,再进行输出。这样我们就找到了跟python有关的软件。
-
- 进程管理相关命令
-
- 进程就是进行中的程序,此时程序就开始使用系统资源。
- 查看进程的命令:ps 全称是process status
-
-
- 参数-e:显示所有的进程。如果不加参数,默认显示当前用户当前终端的进程。
- 参数-f:显示更完整的内容。
- 常用的参数组合:ps -ef
- uid:进程所属用户id,pid进程id,ppid进程的父进程id,parent的缩写,c代表cpu使用率,stime代表进程开始实际,tty是终端代号,time进程运行的总时间,cmd进程的命令名称
- 一般配合管道符联合使用:ps -ef | grep python
-
-
- 终止进程(只有root用户和进程的所有者才有权限终止进程)
-
-
- 手动杀死进程:
-
-
-
-
- kill 进程号pid,有时候这样会失败,因为有的进程不能这样直接杀死,因为这个进程可能还在被其他进程使用,有肯能还在被父进程调用。
- kill -9 进程号pid,这样可以强制杀死进程。
-
-
- 了解shell脚本的简单使用
-
- shell脚本是shell script语法结合Linux命令的一个批处理文件。shell默认的版本bash shell。
- 写一个简单的shell脚本:
-
-
- 首先vi hello.sh新建一个shell文件
-
-
-
-
- shell脚本第一行固定写法:#!/bin/bash
- 第二行使用echo打印一句话:echo "hello shell"
- 第三行写一个Linux命令:date
-
-
-
-
- 然后保存退出
- 执行这个shell脚本
-
-
-
-
- 执行shell脚本有多种方式;
-
-
-
-
-
-
- . hello.sh
- source hello.sh
- sh hello.sh
-
-
-
-
- shell脚本语言基本语法:
-
-
- 定义变量:
-
-
-
-
- 注意:定义变量时等号左右两边不能有空格
- 注意:定义变量时,可以使用单引号和双引号,但是有很大区别:单引号会原样输出,双引号会解析里面的命令和变量。一般推荐使用双引号。
-
-
-
-
- 使用变量:
-
-
-
-
- 需要在变量前面加$,还有一种写法就是在$后面加{},比如${author},修改变量的时候不需要加$
-
-
-
-
- 举例:
-
-
-
-
- #!/bin/bash
- author="余华"
- echo "《活着》的作者是:"$author
-
-
-
-
- 删除变量:
-
-
-
-
- 使用unset删除变量,如:unset author
-
-
-
-
- 条件语句if:
-
-
-
-
- 注意:条件和需要执行的代码需要使用((条件))括起来,其他的关键字有else,elif,fi
- 举例:
-
-
-
-
-
-
- read age
- if (($age<18));then
-
-
-
-
-
-
-
-
- echo "未成年"
-
-
-
-
-
-
-
-
- elif (($age>=18 && $age<65));then
-
-
-
-
-
-
-
-
- echo "已成年,努力工作"
-
-
-
-
-
-
-
-
- elif (($age>=65));then
-
-
-
-
-
-
-
-
- echo "退休了"
-
-
-
-
-
-
-
-
- fi
-
-
-
-
-
- while循环:
-
-
-
-
- 举例:计算1-100累加和
-
-
-
-
-
-
- #!/bin/bash
- i=1
- sum=0
- while((i<=100))
- do
-
-
-
-
-
-
-
-
- ((sum+=i))
- ((i++))
-
-
-
-
-
-
-
-
- done
- echo "1-100的累加和是:"$sum
-
-
-
-
-
- for循环:
-
-
-
-
- 举例:计算1-100累加和
-
-
-
-
-
-
- #!/bin/bash
- i=1
- sum=0
- for ((i;i<=100;i++))
- do
-
-
-
-
-
-
-
-
- ((sum+=i))
-
-
-
-
-
-
-
-
- done
- echo "sum is:"$sum
-
-
-
-
-
-
- 举例:for循环的另外一种写法,for in语句
-
-
-
-
-
-
- sum2=0
- for n in {1..100}
- do
-
-
-
-
-
-
-
-
- ((sum2+=n))
-
-
-
-
-
-
-
-
- done
- echo "sum2 is:"$sum2
-
-
-
-
-
- 函数:
-
-
-
-
- 举例:
-
-
-
-
-
-
- #!/bin/bash
- function add() #function是关键字,代表定义一个函数
- {
- echo $(($1+$2)) #$1代表第一个参数,$2代表第二参数。当n>=10时,需要使用${n}来获取参数。如获取第十个参数需要${10}。
- }
- add 1 2 #调用函数并且传参
-
-
-
-
-
-
- 主函数main
-
-
-
-
-
-
- #!/bin/bash
- function add()
- {
- echo $(($1+$2)) #$1代表第一个参数,$2代表第二参数
- }
- main()
- {
- echo "下面要调用add函数,执行结果是:"
- add 1 2
- }
- main
-
-
-
查找文件(不知道目录情况下,获取他的路径): find -name 文件名.后缀