专栏首页眯眯眼猫头鹰的小树杈linux常用指令学习记录

linux常用指令学习记录

前言

本文主要为学习贴,用来记录一些linux上的常用指令以供参考。

文件内容查看

cat

从上往下阅读文件内容

cat [-AbEnTv] ${FILE_NAME)
cat -n /etc/issue 将该文件的内容输出到标准输出中,并显示行号
cat file1 file2 > file3  将file1 file2的内容依次添加到file3当中

tac

从下往上阅读文件内容,用法同cat

nl

添加行号打印,默认情况下空白行不显示行号

nl [-bnw] ${FILE_NAME}
nl -b a file1 即使空白行也显示行号
nl -b a -n rz file 空白行也显示行号,并且行号在字段的最右方显示,且行号不用加0对齐

more/less

一页一页翻动文件。

more ${FILE_NAME} 向下翻动文件
less ${FILE_NAME} 向上/下翻动文件

head/tail

取文件的前几行或者最后几行内容

head/tail [-n number] ${FILE_NAME}
head -n 10 file 读取文件前十行的内容
tail -n 10 file 读取文件后十行的内容
head -n -10 file 不打印文件后十行内容
tail -n +100 file 只打印100行以后的内容
tail -f file 打开文件并持续更新,直到ctrl+c才退出。这个常用于查看最新的日志

type

查看命令是属于内置指令还是外部指令

type [-tpa] name
-t: 加入-t参数时,会显示命令的类型,file表示为外部命令,alias表示为命令别名设置的名称,builtin表示为bash内置的命令功能 
-p: 如果name为外部命令,会显示完整的文件名
-a: 会将所有在PATH路径下包含name的命令显示出来

命令与文件查询

which

寻找执行文件,查找命令的完整文件名

which [-a] command #-a会将所有由PATH目录中可以找到的命令均列出,而不只第一个被找到的指令
which ifconfig #在非root用户下会查找不到,因为ifconfig位于/sbin/ifconfig下,而非root用户的PATH中不包含该路径,所以找不到
which cd #找不到,因为cd为bash的内置命令

whereis

根据文件名寻找文件,查找文件的完整文件名

whereis [-bmsu] 文件或目录名
-b 只找二进制文件
-m 只找在manual路径下的文件
-s 只找source源文件
-u 查找不在上述选项中的其他特殊文件

locate+updatedb

locate会根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名,即所有包含该关键字的文件都将被输出。但是因为数据库的更新一般为一天一次,所以如果需要查找新的内容,需要用updatedb指令更新数据库,updatedb会根据/etc/updatedb.conf去查找硬盘内的文件名,并更新数据库文件

locate [-ir] keyword
-i 忽略大小写差异
-r keyword可以为正则表达式

find

查找文件,磁盘查找,支持通配符

find [PATH] [option] [action]
find / -mtime 0 #查找24小时内被修改过的文件
find /etc -mtime 3 #查找3天前的24小时内被修改的文件
find / -mtime +3 #查找3天前(不含3天本身)被更改的文件
find / -mtime -3 #查找3天内被更改的文件
find / -user name #查找用户名为name的文件
find / -group name #查找群组名为group的文件
find / -nouser #查找不属于任何用户的文件,可能出现于网络文件,或是已经被删除的用户创建的文件
find / -name filename #查找文件名为filename的文件
find / -type TYPE #查找某一类文件,f:正规文件,b:设备文件,d:目录,l:连接文件,s:socket,p:FIFO

压缩与打包

常见压缩扩展名

*.Z: compress程序压缩文件
*.gz: gzip程序压缩文件
*.bz2: bzip2程序压缩的文件
*.tar: tar程序打包的文件,但没有被压缩
*.tar.gz: tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2: tar程序打包的文件,其中经过bzip2压缩

gzip

gzip可以解开compress,zip与gzip等软件所压缩的文件。gzip压缩后,源文件会被删除,被替代为.gz的压缩文件。

gzip [-cdtv#] 文件名
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d: 解压缩的参数
-t: 可以用来校验一个压缩文件的一致性
-v: 显示压缩比等信息
-#: 压缩等级,-1最快,-9最慢但压缩程度最高,默认-6

gzip -d filename: 会将压缩文件解压缩,并删除压缩文件

tar

tar [-j|-z] [cv] [-f 新建的文件名] filename #压缩
tar [-j|-z] [xv] [-f 打包文件名] [-C 目录] #解压缩
-c: 新建打包文件,可配合v查看过程中被打包的文件名
-x: 解打包或解压缩功能,可以搭配-C在特定目录中解开
-j: 通过bzip2的支持进行压缩和解压缩
-z: 通过gzip支持压缩和解压缩
-v: 将正在处理的文件名显示出来
-C: 在特定目录中解压缩
-p: 保留备份数据的原本权限和属性
-P: 保留绝对路径,一般情况下都是相对路径,防止数据覆盖
--exclude=FILE: 在压缩过程中不要讲FILE打包进去
--newer: 打包ctime和mtime在日期后面的文件
--newer-mtime:打包mtime在日期后面的文件
tar -zcv -f filename.tar.gz filename #压缩打包为filename.tar.gz
tar -zxv -f filename.tart.gz -C 欲解压缩的目录 filename

变量读取与声明

read

从控制台读取输入

read [-pt] variable
-p: 可以加上提示符
-t: 等待输入的秒数

declare

declare [-aixr] variable
-a: 声明为数组
-i: 声明为整数
-x: 声明为环境变量,用法同export
-r: 声明为只读变量

declare -i sum=100+200+300 #如果不声明为整数,则会默认为字符串
declare +r sum #等同于取消操作

变量的修改

${变量#关键字} :从变量内容开头开始,将符合关键字的最短数据删除
${变量##关键字}:从变量内容开头开始,将符合关键字的最长数据删除
${变量%关键字}:从变量内容最后开始,将符合关键字的最短数据删除
${变量%%关键字}:从比那两内容最后开始,将符合关键字的最长数据删除
${变量/旧字符串/新字符串}:将遇到的第一个旧字符串更新为新字符串
${变量//旧字符串/新字符串}:将所有旧字符串更新为新字符串

变量的替换

变量的替换一般是指根据变量非空与否将变量的值进行替换,记忆方法是当公式中含有:时,则变量不存在与变量为空字符串为空,否则只有变量不存在视为空

var=${str-expr}: 相当于var= str==null ? expr : str
var=${str:-expr}: 相当于var= (str==null || str=='') ? expr : str
var=${str+expr}: 相当于var=(str==null ? '' : expr)
var=${str:+expr}: 相当于var=(str==null || str=='') ? '' : expr
var=${str=expr}:  相当于str= str = null ? expr : str, expr = str
var=${str:=expr}: 相当于str= str == nul || str == '' ? expr : str, expr = str

数据流重定向

>/1>: 以覆盖的方式将正确的数据输出到指定的文件或设备上
>>/1>>: 以累加的方式将正确的数据输出到指定的文件或设备上
2>: 以覆盖的方式将错误信息输出到指定的文件或设备上
2>>: 以累加的方式将错误信息输出到指定的文件或设备上
<: 将原本需要键盘输入的数据改为文件代替
<<: 结束输入

find /home -name .bashrc > list 2>&1 #将标准输出和错误输出都导出到list文件中
cat > catfile < ~/.bashrc #将.bashrc的内容拷贝并覆盖到catfile中
cat > catfile << "eof" #输入eof后立刻结束

选取命令

cut

cut -d '分隔符' -f fields #根据分隔符将每一行分割并取出下标为fields的值
cur -c 字符范围 #将每一行字符范围内的内容切割出来

export | cut -c 12- #将export文件的每一行从第12个字符开始以后所有内容切割出来
echo ${PATH} | cut -d ':' -f 3,5 #将path内容按照:分割开来并取第三个和第五个值

cut在处理多空格分隔的行时会比较吃力

grep

分析一行,当该行中有我们想要的信息,就将该行输出

grep [-acinv] [--color=auto] '关键词' 文件名
-a: 将binary文件以text文件的方式进行查找
-c: 打印出现的次数
-i: 忽略大小写
-n: 同时输出行号
-v: 反向选择,即选择不存在关键字的行
--color=auto: 将关键字加上颜色显示

last | grep 'root' | cut -d ' ' -f 1

egrep可以合并管道命令 egrep -v '^$|^#' filename 这里|代表或

sed

sed [-nefr] [n1[,n2]function]
-n: 只有经过sed特殊处理的那一行才会被列出来
-e:直接在命令行模式上进行sed的动作编辑
-f filename:将sed动作写在一个文件内
-r:支持扩展型正则表达式语法
-i:直接修改读取的文件内容

n1,n2: 一般代表选择进行动作的行数,$代表最后一行
function:
a:新增
c: 替换,会替换n1到n2之间的行
d:删除
p:将某个选择的数据打印出来
s:替换,可以接正则表达式

sed 's/要被替换的字符串/新的字符串/g'
cat /etc/passwd | sed -e '4d' -e '6c no six line' #如果要添加多个指令,则必须添加-e

排序

sort

sort [-fbMnrtuk] file/stdin
-f: 忽略大小写
-b:忽略最前面的空格
-M:以月份来排序
-n:使用纯数字来排序,默认为文字类型
-r:倒序
-u:相同数据中,只显示一行
-t:分隔符,默认为tab
-k:第几段数据作为排序标准

wc

统计文件的行数和子树

wc [-lwm] filename
-l: 仅列出行
-w:仅列出多少字
-m: 多少字

uniq

去重

uniq [-ic]
-i: 大小写无关
-c: 计数统计

tee

双重重定向,将一份输出同时输出到文件和标准输出流

tee [-a] filename
-a: 添加到文件后面

xargs

读入stdin数据,并且以某种分割字符将其分割成参数。该命令适合于不支持管道的命令来支持管道操作

xargs [-0epn] command
-0: 将特殊字符还原成一般字符
-e: EOF,当xargs分析到这个参数时会停止解析
-p:在执行每个命令的参数时,都会询问用户
-n: 后面接次数,要使用几个参数的意思

文件格式化处理

awk

主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或tab键

awk '条件类型{动作1}条件类型2{动作2}...' filename

NF:$0每一行拥有的字段总数
NR:目前awk所处理的是第几行数据
FS: 目前的分隔符

last -n 5 | awk '{print $1 "\t" $3}' #打印一行的第一段文字和第三段文字
last -n 5 | awk '{print $1 "\t lines: " NR "\t columnes: " NF}'
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

diff

以行尾单位比较两个文件之间的区别,也可比较不同目录之间相同文件的内容

diff [-bBi] from-file to-file
from-file和to-file可以用 - 即标准输入替代
-b: 忽略一行当中仅有多个空白的区别,如about me和about    me视为相同
-B:忽略空白行的区别
-i:忽略大小写的区别

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • leetcode535. Encode and Decode TinyURL

    TinyURL is a URL shortening service where you enter a URL such as https://leetco...

    眯眯眼的猫头鹰
  • leetcode472. Concatenated Words

    Given a list of words (without duplicates), please write a program that returns ...

    眯眯眼的猫头鹰
  • leetcode341. Flatten Nested List Iterator

    首先可以想到通过深度优先递归的方式将嵌套形式的数组展开为一个无嵌套的列表。那么有没有方法实现不将元素取出而是直接迭代的方式获取下一个元素呢?这里采用了嵌套迭代器...

    眯眯眼的猫头鹰
  • 事件总线方案实践

    private final Runnable mPostValueRunnable = new Runnable() {

    杨充
  • 新版微信主界面新增小程序入口,小程序真正的红利已来临

    微信小程序最近的更新又有点勤快了啊,就在刚才,在我百无聊赖的刷朋友圈的时候,微信公众平台官方给我推荐了这么一条消息,如图: ? 说实话,对于微信小程序这样的消息...

    企鹅号小编
  • 小程序 · 一周报

    微信新增了服务类小程序分类搜索。用户进入「发现-小程序」,点击搜索按钮,即可体验该搜索服务。

    极乐君
  • DC基本的时序路径约束

    时序约束可以很复杂,这里我们先介绍基本的时序路径约束,复杂的时序约束我们将在后面进行介绍。

    数字芯片社区
  • FPGA Fanout-Fanin(扇入扇出)

    扇入系数是指门电路允许的输入端数目。一般门电路的扇入系数为1—5,最多不超过8。扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力。一般门电路的扇出系...

    碎碎思
  • 简单一点,小程序是什么鬼?有风吗?

    触动一下商业嗅觉 想不起我流泪的表情 听不清风吹过的声音 只知道 我不会把你忘记 你相信最后会有奇迹 相信 追风的人永远追不上风 因为风快你慢 风来时你就在风口...

    企鹅号小编
  • 我们从58 万个微信小程序中,精心挑选了这 14 个!!!

    新媒体人经常加班,导致很多人睡眠质量很差。所以小睡眠这款助眠神器就非常适合你!已经有千万以上的用户使用。因为我们睡觉的时候,并不是越安静越容易入睡,科学研究表明...

    IT派

扫码关注云+社区

领取腾讯云代金券