Linux笔记
介绍
Linux被称为虚拟文件操作系统,与Windows系统不同,所有的东西在Linux系统里都以文件的形式存在的,Linux没有后缀名的概念的。
Windows系统是设备管理器系统,所有的东西根据后缀名来区分与运行的。
Linux基本命令
基础知识
命令行的提示
[root@master ~]#
root代表当前登录的用户名
master代表当前服务器的主机名
~代表现在所处的系统路径和文件夹的位置,即当前用户文件夹
切换路径
命令:cd change directory 切换文件
常用路径:
/:系统根目录,Linux文件系统的起点,类似于Windows中的此电脑。
根目录中的文件夹及其含义:
bin:存储Linux系统所有命令的文件夹
boot:管理系统开机启动文件的文件夹
etc:存储系统配置文件的文件夹
home:存储所有非管理员账号的用户文件夹
root:管理员账号所在的用户文件夹
mnt:相当于Windows系统的光驱盘,读取光盘内容的文件夹
…
cd / | 切换到根目录 |
---|---|
cd home | 切换到home文件夹 |
cd. . | 回到到上一级文件夹 |
绝对路径与相对路径
绝对路径:从根目录 / 描述路径
相对路径:从当前位置开始描述路径
绝对路径任何时候都有效,相对路径不能描述与当前位置无关的路径
展开文件夹
ls | 查看某个路径里面的文件夹和文件的名字信息 |
---|---|
ls | 查看当前路径下的文件信息 |
ls /home | 查看home文件夹的内容 |
ls -l | 查看文件夹和文件夹的详细属性,包括文件权限,文件大小等,可以缩写成ll |
小命令
pwd | 查看某个路径里面的文件夹和文件的名字信息 |
---|---|
hostname | 显示主机名 |
clear | 清屏(可以用快捷键CTRL+L) |
文件和文件夹的操作
创建文件
关键字 touch
touch 文件名 创建一个文件并为其命名
touch .hello.txt 名字前缀为.的文件默认隐藏,需要使用ls -A来查看隐藏的文件
创建文件夹
关键字: mkdir 文件夹名
可选操作
-p: 递归创建文件夹,路径中某个文件夹不存在会自动创建
删除文件
关键字:rm 文件名
可选操作:
-r:删除文件夹,文件夹的删除需要加上-r的选项
-f:删除并且不提示信息
-rf:强制删除,不提示信息
复制文件或文件夹内容
关键字:cp copy
语法:cp 文件名 目标路径:将某个文件赋值并粘贴到某个目标位置
可选操作:
-r:文件夹的复制也需要加上-r的选项
重定向
符号 :>
任何文件都可以通过重定向复制到别的文件中。
/>:覆盖写入
/>>:追加写入
剪切文件或文件夹
关键字:mv
语法:mv a b 剪切A位置的内容,粘贴到B位置,剪切的时候,文件和文件夹的操作是一样的。
可选操作:
mv在剪切的时候可以对文件或文件夹重命名
语法:mv 旧路径 新路径(如果没有新路径会自动创建)
例:mv /opt/test1.txt /opt/测试.txt
编辑文件
使用vi或者vim文件编辑器进行操作
vim是vi的升级版,编辑脚本文件时,vim会显示颜色,vi只有黑白。
语法:
vi/vim 文件名:打开文件,进入编辑模式
在编辑时,如果文件名不存在,会自动创建一个新的进行编辑。
从查看模式进入编辑模式
快捷键 | 作用 |
---|---|
i | 从当前光标前进行插入 |
a | 将当前光标后移一位,再从光标前插入,等同于从当前光标后插入的效果 |
o | 换一行进行插入 |
s | 将当前光标的数据删掉再插入 |
I | 将光标移至行首再插入 |
A | 将光标移至行尾再进行插入 |
O | 再这一行的上方添加一行再插入 |
S | 把这一行删掉再插入 |
命令行工具
快捷键 | 作用 |
---|---|
/内容 | 在文件中对内容进行搜索,将找到的数据上颜色,/apple就是对apple进行查询 |
yy | 复制光标所在这一行 |
p | 粘贴复制的内容 |
nyy | 复制光标一下n行 |
dd | 删除光标所在这一行 |
ndd | 删除光标一下n行 |
n↑ | 快速移动n行,n+方向键 |
gg | 光标快速回到文件第一行 |
G | 光标跳到文件最后一行 |
命令 | 作用 |
---|---|
:w | 只保存文件不退出 |
:q | 在执行了w之后,保存了文件后,退出操作,没有保存文件时无法退出的 |
:q! | 强制退出不保存文件 |
:wq | 保存的同时执行退出操作 |
:wq 文件名 | 当忘记输入文件名时,输入文件名 |
:set nu | 打开文件的行号显示 |
:set nonu | 关闭文件的行号显示 |
:start,ends/old/new/g | 从开始行,到结束行,搜索旧内容并替换为新内容 注:$表示最后一行 |
在终端操作文件内容
关键字 | 说明 |
---|---|
cat | 将文件当成一个整体进行输出和查看 cat a.txt |
more | 分页查看文件,回车一次翻一行,空格一次翻一页 |
head | 查看文件的前几行 例:head -n 5 a.txt 查看前5行 |
tail | 查看文件的后几行,用法与head相同 |
cut | 对文件内容进行截取:cut -b start-end 文件名 |
sort | 对文件内容进行排序(默认按照字符串排序)-n:按照数字排序 -r:反向输出 |
wc | 对文件内容进行统计 -w:统计文件的单词数量,只能识别用空格隔开的单词 -l:统计文件行数 |
uniq | 对文件内容进行去重,对文件内容进行统计(uniq只能对连续的在一起的相同的数据进行去重的操作,所以去重前需要先排序 。例:sort .txt 管道符 uniq(管道符(java中的或者符号) 将第一个命令执行的结果,传递给第二个命令来执行)sort e.txt 管道符 uniq -c -c:就是count,统计行数。 |
文件操作的三剑客
grep 对数据的内容进行过滤
grep中搜索数据的公式,是正则表达式,用法与之前学的大差不差
特殊点
1.没有\w等特殊关键字
2.使用{}匹配次数要加上 -E的可选参数
3.或者的规则用(a|b)实现
也可以对其他命令执行的结果进行数据的过滤:
例如查看当前文件夹里面所有的图片名字:
ls | grep -E “.(png|jpg)$”
查看文件中是否包含了某个关键字
查询文件中有apple这个单词的是哪些文件:
grep -r “关键字” 搜索的路径
grep -r “apple” /usr/games/allen/ | uniq.
sed 对数据按照行进行增删改查
1.在文件中新增行数据
sed “行号i\new” 文件名
2.删除指定行的数据
sed “行号d” 文件名
sed “2d” g.txt 删除文件的第二行
sed “2,5d” g.txt 删除文件的第二行到第五行
3.修改行数据的内容
sed “stare,ends/old/new/s” 文件名
注:开始和结束不写,默认修改整个文件
4.指定查看文件的具体行数
sed “start,endp” 文件名
sed -n “2p” g.txt 只查看第二行的数据
sed -n “3,6p” g.txt 查看第三行到第六行的数据
sed的操作,默认没有对文件本身进行修改,新增、修改、删除不影响文件原本的数据的。
如果你的操作想要直接作用在文件本身的话,需要在sed后面添加一个 -i 的选项。
sed -i “3i\apple” g.txt
不加-i就是打印查看,加上-i就是修改文件内容。
awk 将文件当成一个表格,对行和列分别进行读取操作
-
读取文件的时候,通过awk指定文件的分隔符:
awk -F “分隔符” ‘{print $列号}’ 文件名字
awk -F “,” ‘{print $1,$2}’ emp.txt
如果文件的分隔符是空格的话,那么分隔符可以不用写-F和分隔符信息了。 -
在读取文件的时候,可以添加变量的信息
awk -v变量名=值 -F “分隔符” ‘{print $列号}’ 文件名字
awk -vday=22 -vmonth=12 -F “,” ‘{print $2,$6/day,$6,$6*month}’ emp.txt -
在读取文件之前,先添加列名等数据显示
awk -F “分隔符” ‘BEGIN{print 文件读取之前打印的信息}{print $列号}’ 文件名字
awk -vday=22 -vmonth=12 -F “,” ‘BEGIN{print “名字”,“日薪”,“月薪”,“年薪”}{print $2,$6/day,$6,$6*month}’ emp.txt -
在文件读取之后,去添加一个尾部的打印信息
awk -F “分隔符” ‘{print $列号} END{print 读完之后打印的尾部信息}’ 文件名字
awk -vday=22 -vmonth=12 -F “,” ‘BEGIN{print “名字”,“日薪”,“月薪”,“年薪”}{print $2,$6/day,$6,$6*month}END{print “文件读取完毕”}’ emp.txt -
在读取文件的过程中对行数据进行筛选
awk -F “分隔符” ‘$列号和数据的筛选’ 文件名字
awk -F “,” ‘$8 == 10’ emp.txt
awk -F “,” ‘$6>=3000’ emp.txt
awk -F “,” ‘$8 == 10 && $6<2000’ emp.txt
awk -F “,” ‘$8 == 10 || $8==20’ emp.txt
并且是 && 或者是 ||
练习:
结合之前学过的所有命令,查询 /usr/games/allen/emp.txt文件中,入职人数最多的年份是哪一年
awk -F “,” ‘{print $5}’ emp.txt|awk -F “/” ‘{print $1}’|sort -n|uniq -c|sort -n -r|awk ‘{print $2}’|sed -n “1p”
打包文件
tar.gz
在Linux系统中效率最好的打包方式
语法
tar.gz -zcvf 压缩包名 被打包的文件或文件夹(1,2,3…)
命令 | 说明 |
---|---|
-zcvf | 打包文件 |
-ztvf | 查看压缩包内容 |
-zxvf | 解压 |
./*.txt | .代表当前路径,*.txt代表所有txt后缀的文件 |
-z | 压缩格式:gz |
-c | 打包 |
-v | 查看操作过程 |
-x | 解包 |
-t | 查看包的内容 |
-f | 后面紧跟压缩包名字 |
zip
命令 | 说明 |
---|---|
zip 压缩包名 文件名 | 打包 |
unzip -l | 查看压缩包内容 |
unzip | 解压缩 |
rar
rar不是Linux自带的操作和命令,不是所有系统都可以用rar操作,在centos中,rar通过其他的软件包独立安装
命令 | 说明 |
---|---|
rar a 包名 文件名 | 打包 |
rar i | 查看包的内容 |
rar x | 解压缩 |
文件权限相关操作
权限的分类
类型 | 所属主权限 | 所属组权限 | 其他人权限 |
---|
类型 | 说明 |
---|---|
- | 普通文件,通过touch创建的 |
d | 文件夹,通过mkdir创建的 |
l | 连接文件(快捷方式),通过ln关键字创建 ln -fs 源文件位置/文件名 |
权限 | 说明 |
---|---|
r | 读取数据 |
w | 写入编辑数据 |
x | 执行脚本和代码的权限 |
- | 这个位置没有权限 |
修改权限
关键字:chmod
针对某个权限修改:
chmod 修改对象+/-权限 文件名
修改对象 | 说明 |
---|---|
u | 所属主 |
g | 所属组 |
o | 其他人 |
对权限进行整体修改:
使用对应的十进制数字来表示权限,没有代表0,有权限代表1
语法:chmod 数字 文件名
权限的传递
将某个文件夹以及文件夹内的所有文件,同意赋予权限:
chmod -R 权限 文件夹名字:递归地修改权限
用户相关操作
–创建用户
语法:useradd 用户名
–赋予用户密码
语法:passwd 用户名
–给用户分配不同的组
注意
用户在创建时,系统会默认创建一个同名的组,用户就是组长,再给用户分配组,就是将用户移动到其他组中
usermod 用户名 -g 组名
–切换用户
su 用户名
Q:su 切换用户和su - 切换用户有什么区别?
A:su切换用户,切换后位置不发生变化,还在当前路径,su - 切换用户,会充值用户的登陆时间和登陆状态,此时会回到用户文件夹。
–删除用户
注意:删除用户时,要联同他的组一块删掉
语法:userdel -r 用户名
删除时要确保用户没有再登录状态
–查看用户分组:
groups 用户名
id 用户名
–删除分组
groupdel 用户名
软硬件相关命令
命令 | 说明 |
---|---|
free | 查看内存使用情况 -h:显示单位 |
df | 查看硬盘使用情况 -h:显示单位 |
top | 查看任务管理器列表 |
ps | 查看所有进程列表 -aux:a 所有的 u 用户 x 执行中的 |
kill | 强制终止某个进程的运行 kill 进程编号 ### -9:强制结束进程 |
netstat | 查看端口号的使用情况 netstat -atunp |
ip a | 查看网卡的基本信息 lo:服务器环回地址,ens33:服务器物理网卡名 |
ping | 检查网络通信是否正常 |
service | 管理服务 service 服务器名字 status or start or stop or restart |
rpm | 检查当前服务器是否安装了某个工具 rpm -qa (管道符) grep mysql 查询当前服务器有没有安装mysql |
yun | 指定服务器安装或卸载某个服务 yum -y install 服务名 安装服务;yum -y remove 服务名 卸载服务 |
date | 查看当前系统时间;date +“%Y-%m-%d %H:%M:%S" 自己定义时间格式 |
find | 再Linux系统中查询文件的位置 语法:find 位置 方法 内容 例: find /usr -name a.txt;可选操作 -o 或者 |
使用Linux进行命令的嵌套:
例:使用当前的年月日去命名一个文件夹:
mkdir `date +"%Y%m%d"` 创建文件夹
嵌套时,命令与命令之间用反引号隔开,运行时先运行反引号里面的内容,再运行外面的命令。