Loading

Linux操作备忘录

Linux基本目录结构

graph TD; / --> bin / --> boot / --> dev / --> etc / --> home / --> lib / --> proc / --> usr / --> var / --> ...

Linux 文件系统是一个目录树的结构,文件系统结构从一个根目录开始,根目录下可以有任意多个文件和子目录,子目录中又可以有任意多个文件和子目录

  • bin 存放二进制可执行文件(ls,cat,mkdir等)
  • boot 存放用于系统引导时使用的各种文件
  • dev 用于存放设备文件
  • etc 存放系统配置文件
  • home 存放所有用户文件的根目录
  • lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
  • mnt 系统管理员安装临时文件系统的安装点
  • opt 额外安装的可选应用程序包所放置的位置
  • proc 虚拟文件系统,存放当前内存的映射
  • root 超级用户目录
  • sbin 存放二进制可执行文件,只有root才能访问
  • tmp 用于存放各种临时文件
  • usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
  • var 用于存放运行时需要改变数据的文件

命令基本格式

cmd [options] [argument] options称为选项,arguments称为参数

选项和参数都作为Shell命令执行时的输入,它们之间用空格分隔开。要注意的是 Linux是区分大小写的

对于命令来说,你可以理解为 系统的各个函数

cmd命令就是一个函数接口,options就是一个函数的模式判断, argument就是这个函数接口携带的参数

举个例子ls 是显示文件或者目录信息,ls -a 是会显示文件下所有文件包括隐藏文件,ls -l则是会显示文件夹内文件的所有信息,这就是options的效果。ls /lib 就不会显示当前路径下的文件,而是会显示/lib文件夹下的文件,这就是参数的效果

当然这个 可执行的文件大致有一下几种

  • 内置命令:出于效率的考虑,将一些常用命令的解释程序构造在Shell内部
  • 外置命令:存放在/bin、/sbin目录下的命令
  • 实用程序:存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin等目录下的实用程序
  • 用户程序:用户程序经过编译生成可执行文件后,可作为Shell命令运行
  • Shell脚本:由Shell语言编写的批处理文件,可作为Shell命令运行

忘了说了在Linux内其实也有通配符这一说,后面grep也有涉及到这一概念,但是两者还是有些不同的

  • *:匹配任何字符和任何数目的字符
  • ?:匹配单一数目的任何字符
  • [ ]:匹配[ ]之内的任意一个字符

常见的文件、目录操作命令

  • pwd****: 查看当前用户的当前目录

  • cd: 用来切换目录

    1. . : 表示当前目录

    2. .. : 表示当前目录的上一级目录

    3. - : 表示用cd命令切换目录所在目录

    4. ~ :表示用户主目录的绝对目录

  • ls : 显示文件或者目录信息

  • mkdir: 当前目录下创新一个空的目录

  • rmdir: 要求目录为空

  • touch: 生成一个空文件或者更改文件的时间

  • cp: 复制文件或目录

  • mv: 移动文件或目录、文件或目录改名

  • rm: 删除文件或目录

  • ln: 建立链接文件

  • find: 查找文件

  • file/stat: 查看文件类型或文件属性信息

  • cat: 查看文本文件内容

  • more: 分页查看文本文件内容

  • less: 分页,搜索,回翻等操作查看文本文件内容

  • tail -10: 查看文件的尾部的10行

  • tail -f: 监控一个文件内容

  • head -10: 查看文件的头部10行

  • tar -zxvf:解压压缩包tar.gz

  • gzip -d: 解压压缩包gz

  • bzip2 -d: 解压压缩包bz2

  • tar -cxvf:生成压缩包tar.gz

  • gzip : 生成压缩包gz

  • bzip2 : 生成压缩包bz2

  • echo: 把内容重定向到指定的文件中 ,有则打开,无则创建

  • 管道命令 | :将前面的结果给后面的命令,例如:ps aux | grep mysql,将ps显示的进程按照mysql的分组显示

  • 重定向 >覆盖模式 >>追加模式:

    echo "l love you" > amazing.txt
    

    如上就是把l love you这句话写入amazing.txt并覆盖之前的内容


Vim程序编辑器

所有的 Unix Like 系统都会内建 vi 文书编辑器。

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。详情的可以参考vim的官方网站

基本上vim分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)

命令模式(Command mode)

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。
  • G用于直接跳转到文件尾
  • ZZ用于存盘退出Vi
  • ZQ用于不存盘退出Vi
  • /和?用于查找字符串
  • n继续查找下一个
  • yy复制一行
  • p粘帖在下一行,P粘贴在前一行
  • dd删除一行文本
  • u取消上一次编辑操作(undo)

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式(Insert mode)

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式
  • Ctrl+n,自动补全

底线命令模式(Last line mode)

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有):

  • :w 保存当前编辑文件,但并不退出
  • :w newfile 存为另外一个名为 “newfile” 的文件
  • :wq 用于存盘退出Vi
  • :q! 用于不存盘退出Vi
  • :q用于直接退出Vi (未做修改)

设置Vi环境:

  • :set autoindent 缩进,常用于程序的编写
  • :set noautoindent 取消缩进
  • :set number 在编辑文件时显示行号
  • :set nonumber 不显示行号
  • :set tabstop=value 设置显示制表符的空格字符个数
  • :set 显示设置的所有选项
  • :set all 显示所有可以设置的选项

按ESC键可随时退出底线命令模式。


grep及正则表达式

grep——强大的文本搜索工具

grep 可以使用正则表达式搜索文本,并把匹配的行打印出来。

 格式:grep [options] PATTERN [FILE...]

  • PATTERN 是查找条件:可以是普通字符串、可以是正则表达式,通常用单引号将RE括起来。
  • FILE 是要查找的文件,可以是用空格间隔的多个文件,也可是使用Shell的通配符在多个文件中查找PATTERN,省略时表示在标准输入中查找。
  • grep命令不会对输入文件进行任何修改或影响,可以使用输出重定向将结果存为文件

正则表达式

1、基础内容

字符匹配

  • 在正则表达式中,如果直接给出字符,就是精确匹配。
  • \d 匹配一个数字
  • \D 匹配一个非数字
  • \w 匹配一个字母、数字或下划线_
  • \W 匹配任何非单词字符,等价于“[^A-Za-z0-9_]"
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等,等价于[ \f\n\r\t\v]
  • \S 匹配任何非空白字符
  • \n 匹配一个换行符
  • \r 匹配一个回车符
  • \t 匹配一个制表符

数量匹配

  • .匹配除“\n"之外的任何单个字符
  • *匹配前面的子表达式零次或多次
  • +匹配前面的子表达式一次或多次
  • ?匹配前面的子表达式零次或一次
  • {n},n是一个非负整数,匹配确定的n次
  • {n,m},m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次
  • {n,},n是一个非负整数,至少匹配n次
  • {,m} 匹配前面的正则表达式最多m次

范围匹配

  • x|y 匹配x或y
  • [xyz] 字符集合,匹配所包含的任意一个字符
  • [^xyz] 负值字符集合,匹配未包含的任意字符
  • [a-z] 字符范围,匹配指定范围内的任意字符
  • [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符

来看一个稍微复杂的例子:\d{3,4}\s+\d{3,8}
我们来从左到右解读一下:

  1. \d{3,4}表示匹配3到4个数字,例如'010'、'0755';
  2. \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;
  3. \d{3,8}表示3-8个数字例如'1234567'。

综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。
如果要匹配'010-12345'、'0755-26776666'这样的号码呢?
由于'-'是特殊字符,在正则表达式中,要用''转义,所以,上面的正则是\d{3,4}-\d{3,8}。
但是,仍然无法匹配'010 - 12345',因为带有空格。所以我们需要更复杂的匹配方式。

2、进阶内容

要做更精确地匹配,可以用[]表示范围,比如:

  • [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;
  • [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;
  • [a-zA-Z_][0-9a-zA-Z_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
  • [a-zA-Z_][0-9a-zA-Z_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
  • A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。
  • 表示行的开头,\d表示必须以数字开头。
  • \(表示行的结束,\)\d表示必须以数字结束。

系统管理命令

stat 显示指定文件的详细信息,比ls更详细
who 显示在线登陆用户
whoami 显示当前操作用户
hostname 显示主机名
uname 显示系统信息
top 动态显示当前耗费资源最多进程信息
ps 显示瞬间进程状态
du 查看目录大小 du -h /home带有单位显示目录信息
df 查看磁盘大小 df -h 带有单位显示磁盘信息
ifconfig 查看网络情况
ping 测试网络连通
netstat 显示网络状态信息
clear 清屏
alias 对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit
kill 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。

系统服务管理

任务 旧指令CentOS6 新指令CentOS7
使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service
使某服务不自动启动 chkconfig --level 3 httpd off systemctl disable httpd.service
检查服务状态 service httpd status systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务 chkconfig --list systemctl list-units --type=service
启动某服务 service httpd start systemctl start httpd.service
停止某服务 service httpd stop systemctl stop httpd.service
重启某服务 service httpd restart systemctl restart httpd.service

例如在搭建hadoop集成环境的时候需要关闭防火墙和防火墙自启动:(在root权限下)

Centos6.5:service iptables stop

​ chkconfig iptables off

Centos 7 : systemctl stop firewalld.service

​ systemctl disable firewalld.service


其他一些杂七杂八的东西

  1. 时间设置:date -s "2021-09-23 11:26:35"
    终端显示:在/etc/profile这个环境变量里配置

     PS1="\[\033[1;36;40m\][\[\033[0;32;40m\]\u@\h: \H \#  \d \t \[\033[1;35;40m\]\w\[\033[1;36;40m\]]\[\033[1;33;40m\]\\$\[\033[1;37;40m\]"
    

    再source一下就可以显示更详细的终端信息

  2. 查看内核版本 cat /proc/version

  3. 查看linux版本信息 lsb_release -a

  4. 直接查看系统的架构 dpkg --print-architecture

posted @ 2021-12-09 09:17  Christopher·阳  阅读(94)  评论(0)    收藏  举报