最常用linux命令——血泪总结

4 篇文章 0 订阅
2 篇文章 0 订阅

作者大学是非计算机专业的,之前未接触过linux,最近因工作开始接触到一点linux。本文的这些linux命令都是比较初级的,是作者在工作中总结的常用命令,刚好可以覆盖本人当前阶段的使用。

至于一些比较比较高级的命令,例如网络、进程、文件管理的,本人也仍在学习。本文会随着本人学习linux的深入,持续更新。

本文主要参考文献来自于平时的百度或谷歌检索,以及《鸟哥的Linux私房菜》一书。
学习Linux系统,必须有一台安装了Linux的电脑可供使用。可以在自己的电脑上安装虚拟机,例如VMware的。本人使用的学生版腾讯云服务器,贵在便宜省事。
本文仍在持续创作中,内容或排版仍有很大不足,本人会及时更新

一 Linux简介

命令简介

命令行模式下用户可以直接输入命令控制计算机的运行,这些程序也被称为shell,由bash运行。命令格式如下
command [-options] parameter1 parameter2 …
command是命令的名字
[ ] 中表示可选的参数,选项前带 - 号,例如 ls -a。如果用选项全名,带–
parameter这些是参数,例如 cd home
命令、选项、参数之间空格隔开,几个空格Linux都会当成一个
回车键会立即执行命令
命令太长使用 \ 转义回车键

基础命令

基础命令提供一些所有计算机都具备的基础功能

帮助文档

command --help 显示命令的帮助信息

系统与主机名

uname -a 查看Linux的发行版本
hostname    查看主机名
hostname VM-0-4-centosMa    修改主机名为VM-0-4-centosMa 

date 查看系统日期

date +%Y%m%d         格式化输出日期
date -s 14:20:50     设置时间
date -s "2016-12-07 12:00:00"   修改日期
date +%Y%m%d -s "20191120"

日历与计算器

clock  查看硬件时间

cal 显示日历
cal [month] [year]   某年某月的日历,可选参数年月不是必选的

bc     进入计算器
quit   退出计算器,当然也可以 ctrl+c退出

开机关机

shutdown  关机(这俩命令一般不要用)
reboot    重启机器
last reboot   查看rebbot命令的历史执行记录

历史命令

history  列出历史执行的命令
history 10   列出10行历史命令

clear 清理cli界面

统计指令执行时间

time 指令     统计指令执行时间

常用快捷键

  • tab 命令后双击按tab,可补全命令。比如fi 之后双击tab,提示所有以fi开头的命令
  • tab 单击,可补齐文件名
  • ctrl+c 终止当前程序
  • ctrl+d 退出cli(命令行模式),意味无法输命令了
  • q 终端出现end无法退出时按q

二 linux常用命令

目录切换

cd direc    进入direc目录
cd ..       回到上一级目录
cd /        回到根目录
cd ~        回到用户目录,~代表用户目录
pwd         显示当前全目录

文件删除与建立

注意,linux下文件并没有windows下必须的文件后缀名。

mkdir  lichong   新建文件夹
rmdir dandan     只能删除空文件夹
rmdir -p test1/test2/test3 删除层级目录需要加-p (parents)
touch dandan  新建文件
rm -rf direc    直接删除目录及其文件
rm file        删除file文件,会询问,确认输y;不能删文件夹
rm -f  *       删除当前目录下所有文件
rm -rf *.tmp   删除指定后缀名的文件(\*是通配符)
mv  ma.txt dandan   移动文件到dandan下
mv  ma.txt  cece    没有cece目录的话,就是把文件重命名为cece
mv  ma.txt  /home/cece    移动到绝对路径下
mv  ma.txt  /home/dandan/dan.txt   移动过去并改名
mv  dandan ma   重命名目录或文件
cp  dan.txt  ma.txt   拷贝文件

查看文件

cat filename     由第一行开始显示文件所有内容
tac filename     从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl filename      显示的时候,顺道输出行号!
more filename    一页一页的显示文件内容
less filename    与 more 类似,但是比 more 更好的是,他可以往前翻页!
head filename    只看头几行,默认5行
head -n 20 log.file    查看文件前20行
tail filename    只看尾巴几行

查看日志

工作中,我们经常要查看环境机器上的各种日志文件,以下为例

tail -f mysql.log      实时查看日志文件内容
tail -n 100 mysql.log  查看最后100行
cat mysql.log     从头显示
tac mysql.log     从尾显示
nl mysql.log      带行号显示

文件压缩

linux中有各种压缩文件的命令,常见的有gzip/bzip2以及最新的xz,不过这些指令仅能针对一个文件压缩与解压缩。为了支持windows,linux也有zip压缩。打包软件 tar 可以将多个文件打成一个文件,不过它只打包,不压缩。实际工作中,我们把打包和压缩结合起来使用。

tar 打包

tar仅打包后的文件称为tarfile,如果还有进行压缩的支持则称为tarball。

-c  建立打包文件
-t  查看打包文件中有哪些文档,不会解压
-x  解开打包文件
-z  通过gzip解压
-j  通过bzip2解压
-J  通过xz解压
-v  可在压缩/解压过程中,打印正在处理的文件名
-C 目录    指定解压到的目录
-f filename   后面跟要被处理的文件名

例子

tar -jtv -f dandan.tar.gz   查看压缩包中文件信息
tar -zcvf  dandan.tar.gz  dandan   压缩dandan目录为tar.gz格式
tar -zxvf  dandan.tar.gz  解压文件
time -zxvf dandan.tar.gz   把解压时间也打印出来
tar -zcvf dandan.tar.gz --exclude=文件名或目录名   不包含某些文件打包

tar -jtv -f dandan.tar.gz | grep ma    找出ma相关的文件
tar -jxv -f dandan.tar.gz  待解压文件    仅解压一个文件

zip -q -r dandan.zip dandan  压缩成zip格式
unzip dandan.zip  解压zip文件

编辑文件

vim是linux中常用的文本编辑器,后续章节我们会详细介绍它,这里只教你简单的编辑

vim基本操作

vi my.cnf   打开Mysql配置文件
上下键       可移动光标
a           进入编辑模式,光标处编辑
esc         进入命令模式
ctrl+:      进入底线模式
exit        退出vim

磁盘管理

df -h 显示系统的整体磁盘使用量(在任何目录看一样),加-h以M或G
du 显示当前目录下每个子文件或子目录的磁盘使用情况。递归显示每个
du -ah 以M显示所有的子文件或子目录磁盘情况(根目录不建议用,输出太多)
du -h --max-depth=1 只显示当前目录下第1层的文件和目录
du -sh user 只显示user的大小
fdisk -l 磁盘分区信息

三 linux目录结构

在这里插入图片描述

/bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问
文件的方式是相同的。
/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账
号命名的。
/lib: 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。
/lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
shutdown –h 20:25 # 系统会在今天20:25关机 shutdown –h +10 # 十分钟后关机 shutdown –r now # 系统立马重启 shutdown –r +10 # 系统十分钟后重启 reboot # 就是重启,等同于 shutdown –r now halt # 关闭系统,等同于shutdown –h now 和 poweroff 8910111213141516171819 ls / 1
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备
挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,
然后进入该目录就可以查看光驱里的内容了。
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个
目录下。默认是空的。
/proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获
取系统信息。
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/srv:该目录存放一些服务启动之后需要提取的数据。
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统
sysfs 。
/tmp:这个目录是用来存放一些临时文件的。
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows
下的program files目录。
/usr/bin: 系统用户使用的应用程序。
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src: 内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录
下。包括各种日志文件。
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。

四 linux权限命令

用户信息
cat /etc/passwd 查看所有用户名
输出如下
root❌0:0:Superuser:/:
daemon❌1:1:System daemons:/etc:
bin❌2:2:Owner of system commands:/bin:
sys❌3:3:Owner of system files:/usr/sys:
adm❌4:4:System accounting:/usr/adm:
uucp❌5:5:UUCP administrator:/usr/lib/uucp:
auth❌7:21:Authentication administrator:/tcb/files/auth:
cron❌9:16:Cron daemon:/usr/spool/cron:
listen❌37:4:Network daemon:/usr/net/nls:
lp❌71:18:Printer administrator:/usr/spool/lp:
sam❌200:50:Sam san:/home/sam:/bin/sh
上面用户属性对应的信息
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

cat /etc/shadow 查看所有密码
可以用网上的解密工具获取真实密码

用户管理
useradd -m name
创建用户,-m自动创建用户使用的目录,一般在root用户下创建新用户
userdel 选项 name 删除用户
usermod -s /bin/ksh -d /home/z –g developer sam 修改账号
su name 切换到名为name的用户
exit 退回root用户
passwd dandan 修改账号dandan的密码
注意Linux输密码不显示,可以同时登多个账户
passwd -l dandan 锁定丹丹的账户,锁定之后不能用了

五Linux文件属性

ls -l 查看文件属性
在这里插入图片描述

从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
可以用数字表示rwx这三种权限对应的分数,r w x分别是4,2,1。给定一个分数时完全可以确定一组权限。例如有-rwxrwx—,对应权限
owner = rwx=4+2+1=7
grout = rwx=4+2+1=7
others = — = 0+0+0=0
则改文件的权限可以表示为 770。同理给定数字 435,文件的权限只可能为 r—wxr-x。因此可以用三个数字 xyz 指定文件的读写属性
chmod [-R] xyz 目录名
chmod u=rwx,g=rx,o=r filename 也可以这样指定文件的属性, u, g, o 来代表三种身份的权限,此外a代表所有人

chgrp [-R] 属组名 文件名 更改文件属组,-R会更改目录下所有文件
chown [–R] 属主名 文件名 更改文件属主

文件系统

文件系统简介

磁盘的物理组成主要有圆形的磁盘盘(存储数据)、机械手臂(上面有磁盘读取头)、主轴马达(可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据)。磁盘可以进行分区,Linux磁盘分区主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT分区表。

文件的系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。我们知道磁盘分区完毕后需要进行格式化,格式化的过程就是在给磁盘分区指定一个文件系统,之后操作系统才能使用这个文件系统。

Linux最传统的文件系统是ext2。centos7预设的文件系统从ext4变成了xfs。

磁盘分区和文件系统有什么关系?

我对磁盘分区之后还要建文件系统赶到困惑,不能直接使用吗

文件系统的简单操作

df

du

hardlink和softlink

hardlink

linux下的链接文档有两种,一种通过文件系统的inode产生新的文件名,而不产生新文件;一种是类似windows快捷方式功能的文件。前者称为hardlink,后者称为softlink。

新建的hardlink的inode与原文件是一样的,只是文件名不同。如果你删除文件名1,其实inode和block仍是存在的,所以你通过文件名2仍可以访问文件的内容。通过文件名1修改文件,会发现文件名2看到的内容也更新了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AYUcfSo-1642253079279)(D:\学习资源\学习笔记\markdown图片\hardlink.png)]

hardlink的限制

  • 无法跨文件系统建立hardlink
  • 不能link目录

softlink

又称symbolic link。softlink会建立一个独立的文件,即inode原文件不同,而这个文件会让数据的读取指向它link的那个文件。由于只是利用softlink作为指向的动作,因此当原文件删除,softlink无法打开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFVQQTeI-1642253079280)(D:\学习资源\学习笔记\markdown图片\softlink.png)]

我作为一个初学者,从文件容灾备份的角度看,hardlink显然比softlink安全。但是鸟哥说因为harflink无法跨文件系统等限制,实际中softlink用的比较多。

ln [-sf] 来源文件 目标文件
-s 默认是hardlink,加-s指softlink
-f 如果目标文件已存在,自动将目标文件移除后再建立

磁盘分区

lsblk 磁盘分区树

lsblk [-dfimpt] [device]      (list block devices)列出系统上的所有磁盘列表
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
-p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等
[root@192 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   17G  0 part /
sdb      8:16   0   20G  0 disk 
sr0     11:0    1 1024M  0 rom

dumpe2fs 查看一个磁盘分区的分区信息

blkid  列出系统上磁盘的UUID,lsblk都能干
dumpe2fs /dev/vda5   查询ext家族superlock的信息
ls -li  查看文件的inode号码
xfs_info 挂载点|装置文件名   查看xfs的superlock

gdisk磁盘分区命令

b  备份gpt磁盘分区数据
c  更改分区的名字
d  delete一个分区
i  显示分区的详细信息
n  add a new分区
p  列出磁盘的分区表信息
q  不保存退出gdisk
w  保存分区表信息并退出gdisk
?  显示gdisk命令的使用命令

一个磁盘分区并格式化的例子

1.准备工作

lsblk     找到要分区的磁盘
parted device_name print  观察磁盘的分区表格式

2.gdisk/fdisk分区

mbr分区表用fdisk分区,gpt分区表用gdisk分区。注意gdisk针对整个磁盘使用,如果 gdisk /dev/vda1 会报错。下面以gdisk对磁盘进行分区,fdisk与gdisk非常类似。

gdisk /dev/vda
p    查看分区情况
?    查看增加分区的指令
n    增加新的分区
输入新分区编号    回车
输入新分区开始扇区编号,比如4
输入新分区大小,例如  +1G
p    查看新增分区后的分区情况
w    储存分区操作后离开gdisk
q    放弃分区操作后离开gdisk
lsblk [device_name]  查看磁盘现在的分区状态

gdisk /dev/vda
d    删除一个分区表
3    删除partition number为3的分区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kanlmaz3-1642253079281)(D:\学习资源\学习笔记\markdown图片\磁盘分区.png)]

3.更新linux核心分区信息

因为linux在使用这颗磁盘,所以分区表没有实时更新,一种更新的方式是重新启动系统。不过可以采用partprobe指令

partprobe -s   更新Linux核心的分区表信息

4.磁盘格式化

mkfs.xfs /dev/vda4   格式化磁盘分区为xfs文件系统
blkid /dev/vda4   查看分区的uuid

mkfs.ext4 /dev/vda5    格式化磁盘分区为ext4文件系统
dumpe2fs -h /dev/vda5  查看磁盘分区上的文件系统信息

六 linux 进程环境命令

进程信息查看
ps –选项
-a:显示当前终端的进程信息
-u:以用户的形式显示进程信息
-x:显示后台进程运行的参数
-A 所有进程
命令格式:命令A|命令B,即命令A的正确输出作为命令B的操作对象
grep 命令用于查找文件里符合条件的字符串
我 ps -x并不会显示所有进程,mysql没有显示

通常直接这样使用
ps -aux|grep xxx ,查看某个服务的进程 如,ps -aux|grep mysql
Ps -ef 查看父进程
pstree 选项 进程树,可以更加直观的来看进程信息
-p :显示进程的PID
-u :显示进程的所属用户
kill -9 PID 杀进程

export
该命令可以显示或设置环境变量
语法:export [-fnp] [变量名称]=[变量设置值]
-f 代表[变量名称]中为函数名称。
 -n 删除指定变量export。变量实际上未删除,只是不输出到后续指令的执行环境中。
  -p 列出所有的shell赋予程序的环境变量。
export -p 显示所有环境变量
export test=”value” 设置环境变量
export test 导出环境变量,这样后续的子shell就能使用该环境变量了
export -n test 删除变量的export,此时export就看不到test环境变量了
在这里插入图片描述

export -f name 导出name函数供后续的子shell使用。一个shell脚本的函数想在其他shell中使用,是否需要加export?我觉得需要,待验证

七 linux 网络命令

注意下面这些命令是centOs的,我不确定其它linux发行版是否支持。
curl
curl 用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的命令行参数多达几十种,如果熟练的话,可以做到postman请求后台的功能。
curl https://google.com 请求谷歌
curl -b ‘foo=bar’ https://google.com -b参数用来向服务器发送 Cookie

防火墙
systemctl status firewalld 查看firewall的详细状态
systemctl start firewalld 这也可以开启防火墙
firewall-cmd --state 查看firewall的运行状态
service firewalld start 开启防火墙
service firewalld stop 关闭防火墙
service firewalld restart 重启防火墙

防火墙使用
firewall-cmd --list-all 查看防火墙规则
firewall-cmd --query-port=8080/tcp 查询端口是否开放
firewall-cmd --permanent --add-port=8080/tcp 永久开放8080端口
firewall-cmd --permanent --remove-port=8080/tcp 开放8080端口
firewall-cmd --reload 修改配置后要更新防火墙规则,更新后,设置的端口就能开放了
参数解释
1、firwall-cmd:是linux提供的操作firewall的一个工具;
2、–permanent:表示设置为持久;
3、–add-port:标识添加的端口;

检查网络
ping
在linux系统中,当能ping通一个主机时,此时ping命令会一直执行,要想终止,可采用ctrl+c或ctrl+z方式退出。也可以设置选项方式,使得ping命令执行若干次包就终止。ping 192.168.34.44 -c 4,此时ping命令将执行4次。

测试端口的连通性
方式1 telnet
yum install telnet –y 安装telnet
telnet 175.24.68.139 3306 测试服务器端口
方式2 ssh
ssh -v -p port username@ip ssh命令来测试端口的连通性
ssh -v -p 8080 root@175.24.68.139

八 搜索查询命令

find直接在硬盘上查找文件,速度较慢,不过查的全
find / -iname *mysql 搜索根目录下以mysql结尾的目录
find / -iname ysq 模糊查询名字包含ysq的目录或文件

whereis
whereis -l whereis只会在特定目录下查询,该命令列出查询目录
whereis filename
locate [-ir] filename locate根据系统已建立的数据库查找文件,该数据库默认一天执行一次,所以新建的文件不能用locate查找
-i 忽略大小写
-r 文件名可用正则表达式

文件内查找
grep (global search regular expression)
grep 命令用正则表达式查找文件里符合条件的字符串。
grep ma dan.txt 查看dan.txt中包含ma的行,返回行的内容
grep -v “ma” dan.txt 查看不包括ma的行。用引号比较保险
grep --n ma dan.txt 显示行号
如果不是搜索文件,也可以将其它命令的输出结果传递给 grep 作为其搜索的输入
ps -grep dandan 搜索dandan启动的进程
递归搜索
grep -r ma /home -r会搜索指定目录中的所有文件,查找ma
grep -l ma *.txt 查找当前目录包含ma的文件,仅返回文件名

正则表达式

目前,我理解的linux正则表达式主要就是利用 grep/sed/awk 这些命令处理字符串数据,处理过程中可以用到类似各种编程语言都有的(比如java)正则匹配。

grep/sed/awk 这几个命令一般都可以用在 | 管道符之后。

[:alnum:] 字母与数字字符,如grep[[:alnum:]] words.txt
[:alpha:] 字母
[:ascii:] ASCII字符
[:blank:] 空格或制表符
[:cntrl:] ASCII控制字符
[:digit:] 数字
[:graph:] 非控制、非空格字符
[:lower:] 小写字母
[:print:] 可打印字符
[:punct:] 标点符号字符
[:space:] 空白字符,包括垂直制表符
[:upper:] 大写字母
[:xdigit:] 十六进制数字

特殊字符

?  最多一次
*  必须匹配0次或多次
+  必须匹配1次或多次
{n}  必须匹配n次
{n,}  必须匹配n次或以上
{n,m}  匹配次数在n到m之间,包括边界
^   一行的开头
$  一行的结尾
.  任意单个字符
[]  字符范围,如[a-z],匹配a-z中的一个
       [ae],匹配a或e中的一个
[^]  反向选择,'[^g]oo'匹配oo前面不是g的字符串

grep

grep命令主要用于从文件中查找到指令的字符串,它会把目标字符串所在的那行数据全部显示出来。

grep [-acinv] '目标字符串' filename
ps -ef | grep [-acinv] '目标字符串'
-c  计算找到目标字符串的次数
-i  忽略查找的大小写
-n  结果显示出行号
-v  显示出没有'目标字符串'的那一行
-A3  after,'目标字符串后续的3行也显示出来'
-B2  before,'目标字符串'前面的2行也显示出来

例子
~]$ dmesg | grep -n -A3 -B2 --color=auto 'qx1'   分析Linux核心产生的信息

如果只是这样用grep在文件中查找一个字符串,那根本和正则表达式没有半毛钱关系。实际上,上面的 ‘目标字符串’ 可以使用正则表达式。下面让你见识一下正则匹配的威力

grep -n 't[ae]st' ma.txt   查找tast和test
grep -n '[^d]og' ma.tx   查找不含dog的字符串
grep -n '[^a-z]oo' ma.txt  查找oo前面不是小写字母的
grep -n '[[:digit:]]' ma.txt  查找有数字的字符串
grep -n '^the' ma.txt   查找行首是the的
grep -n '^[a-z]' ma.txt   查找行首是小写字母的
grep -n '\.$' ma.txt   查找行尾是 . 的那行(\.是转义字符)

grep -n '^$' ma.txt   查找空行(以行首符结尾,以行尾符开头,可不就是空行吗)
grep -n 'ooo*' ma.txt   查找至少两个o以上的字符串
grep -n 'go\{2,5\}' ma.txt   找出g后跟2-5个o的字符串

sed

sed主要用来修改文件内容,或者修改标准输出的内容。这个命令可以动态改变文件的内容,sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。

sed [-nefr] [动作]

这里的动作包含行匹配方式与增删改查操作,具体请看后文实例。

sed [-nefr] [动作]
选项--------------------------
 -e :直接在命令行模式上进行sed动作编辑,此为默认选项;
 -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
 -i :直接修改文件内容;
 -n :只打印模式匹配的行;不加-n使用p参数会打印所有行
 -r :支持扩展表达式;
 -h或--help:显示帮助;
 -V或--version:显示版本信息。
参数---------------
 a 在当前行下面插入文本;
 i 在当前行上面插入文本;
 c 把选定的行取代为新的文本;
 d 删除,删除选择的行;
 D 删除模板块的第一行;
 s 替换指定字符;
 h 拷贝模板块的内容到内存中的缓冲区;
 H 追加模板块的内容到内存中的缓冲区;
 g 获得内存缓冲区的内容,并替代当前模板块中的文本;
 p  将选择的数据打印出来,通常p 与sed -n一起用

sed查找

nl /home/ma | sed '2,5d'  列出文件内容,但删除2-5行
nl /home/ma | sed '2a drink tea'  在第2行后面加drink tea
nl /home/ma | sed '2,5c No 2-5 number'  把2-5行的内容替换掉
nl /home/ma | sed -n '2,5p'   把2-5行内容打印出来,读者可以尝试不加-n
sed -n '2p' filename   打印文件的第二行

sed替换

sed 's/要被取代的字符串/新的字符串/g'
 inet 10.93.157.220 netmask 255.0.0.0 ipconfig ----------------下面几个命令都用于管道之后
sed 's/^.*inet //g'  把ip(10.93.157.220)前面的内容全删除
sed 's/ *netmask.*$//g'    将ip后面的部分全删除
sed 's/#.*$//g'   把shell脚本中的注释都变成空行
sed 's/^$//d'     把空行删除

sed -i 's/\.$/\!/g' ma.txt    将文件行尾的.换成!

printf

printf是格式化输出的,只是让输出更整齐。不是管道命令,也没有那么常用。

printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt | grep -v 'name')

awk

awk语法

由前面的内容我们看到sed常常作用于一整行的处理,awk则倾向于把一行分成数个字段进行处理。默认的分割字符是空格。

awk ‘条件1{动作1} 条件2{动作2} …’ filename
大括号内是条件满足后执行的动作,只要某行的数据满足某个条件,就会执行条件对应的动作。

last -n 5 | awk '{print $1 "\t" $3}' 取出账号与登入者的ip,且以[tab]隔开,该例子无条件因此每行都处理

$1 $3 可以取出每行第1列和第3列的数据

awk有几个内建变量

NF 每一行拥有的字段总数
NR 目前awk处理的是第几行数据
FS 目前的分割字符,默认是空格键

在这里插入图片描述
BEGIN指定分隔符

cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}' 对于第3列小于10的行数据,显示

awk处理数据

在这里插入图片描述
对上述数据增加求和列
在这里插入图片描述
最近在脉脉上看到几个软通的员工秀awk是一门编程语言,惹来了众多大厂员工的冷嘲热讽。我方觉得目前阶段awk这种技术没必要深究,了解即可,工作中真的要求必须使用它,再详细看也不晚。

在linux命令行或脚本里,可以使用awk处理随手可解的数据问题。稍微复杂的数据处理,还是用python或者excel吧。

九 Linux下载软件

待补充

十 shell脚本

待补充

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值