Linux操作备忘录
Linux基本目录结构
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: 用来切换目录
-
. : 表示当前目录
-
.. : 表示当前目录的上一级目录
-
- : 表示用cd命令切换目录所在目录
-
~ :表示用户主目录的绝对目录
-
-
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
用于存盘退出ViZQ
用于不存盘退出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}
我们来从左到右解读一下:
- \d{3,4}表示匹配3到4个数字,例如'010'、'0755';
- \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;
- \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
其他一些杂七杂八的东西
-
时间设置: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一下就可以显示更详细的终端信息
-
查看内核版本
cat /proc/version
-
查看linux版本信息
lsb_release -a
-
直接查看系统的架构
dpkg --print-architecture
有时会发现学习是一件很快乐的事情 比一直跑步容易多了 不是嘛