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

数据流重导向

  • 概念
    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 ↩︎

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

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. 转: Source Code Lookup in Eclipse(主要讲的是java的)
  2. python流程控制语句-python学习 流程控制语句详解
  3. Sublime Text 快捷键
  4. Java:Java和c的区别
  5. UV认证应用安全标准的目的
  6. 欧几里德投影(Euclidean projection)
  7. visual studio code 如何取消提示
  8. 计算机毕业设计Java房产客户信息管理系统(源码+系统+mysql数据库+lw文档)
  9. scrapy项目:爬取豆瓣畅销书排行榜内容(仅爬取2020年1-3页:无保存)
  10. 三角函数诱导公式一:奇变偶不变,符号看象限
  11. 转自周金涛:一辈子有三次暴富机会,最近的一次在2019年?2018年你要怎么做? (2018-02-21 17:49:17)...
  12. jacob java excel_Java使用jacob将微软office中word、excel、ppt转成pdf
  13. fastreport 横向打印多列
  14. java实现记录日志
  15. ARM:嵌入式系统之ARM指令
  16. 京东校招java笔试题_2017京东校招笔试编程题:进制转换、辗转相除
  17. 赛扬处理器_【硬件资讯】Intel 10代酷睿 桌面处理器正式发布
  18. アプリケーションコンポーネント(大分類)
  19. 人工智能神经网络有哪些研究的领域,详细说明
  20. 机器学习系列:误差分析(Bias and Variance)和模型调优

热门文章

  1. Tomcat And Servlet (1)
  2. 64 win7 PLSQL Developer 连接
  3. Vue tsx 使用自定义v-model修饰符
  4. 安卓系统怎么连接服务器数据库,安卓端如何与服务器端数据库连接
  5. Python面试题(三)
  6. QGIS插件python开发环境配置和PyCharm配置调试环境
  7. 【Jquery-03】jq中的样式操作
  8. 罗旭对话王海滨:制造业正在向数字化要效益
  9. 少儿编程课程和乐高机器人有什么不同
  10. Mars3D(含Cesium)数据及服务篇:发布三维数据服务