linux基础
1.简介
1.一切皆文件
2.每个文件都有确定的用途
2.常用命令
2.1目录类
ls: 查看
-a 显示所有文件及目录 --能看到包括隐藏文件(以.开头的文件)的所有文件
.aeddddf--隐藏文件
-l 详细信息(常用形式ll)
-r 将文件以相反次序显示
-t 将文件依建立时间先后次序列出
-A 同-a,但不列出"."当前目录,".."父目录
-F 在列出文件后增加符号,例如目录后加"/",可执行文件加"*"
-R 若目录下有文件,则以下文件都依次列出(递归式列出全部文件)
man 查看命令详细信息
pwd 查看当前目录 --返回绝对路径下的位置
cd 进入目录
~ 家目录
. 当前目录
.. 上一层目录(父目录)
../.. 上上层目录
绝对路径:从根目录开始 的路径
相对路径:从所在目录开始 的路径 (./)
----清屏命令:ctrl + l 或者clear
mkdir 创建目录
-p 可以递归式创建文件夹 ,确保目录名称存在,不存在就创建一个
du 查看文件或者文件夹大小
-h 以K,M,G为单位,提高信息的可读性
-k 以1024bytes为单位
-m 以1M为单位
du -h task.sh
2.2文件类
vim/vi filename
从查看模式进入插入模式:i/a/o
查看模式:
:w 保存文件
:q 退出
:q! 强制退出
:wq 保存并退出
ZZ 保存并退出
光标移动:
gg 光标移动到文件头部
G 光标移动到文件尾部
H 光标移动到屏幕最顶端一行
M 光标移动到屏幕中间一行
L 光标移动到屏幕最底端一行
yy p 复制yy与粘贴p
5yy 当前行开始向下复制5行,p粘贴至下一行
dd 删除当前行,5dd删除当前行开始向下的5行内容
u 取消上一步操作
/关键字 查找内容
n 查看下一个
:noh 取消查找 -- :set nohlsearch
:set nu 显示行号
:set nonu 取消显示行号
cat filename 查看文件内容
less filename 查看文件内容 --可以分页查看
↑ 上一行
↓ 下一行
G 最后一页
g 第一页
空格 下一页 b 上一页
/关键词 搜索关键词
q 退出
more 文件名 查看文件内容 分页查看
more -5 文件名 限定每页展示5行
回车后 按enter键 按行展示
按空格键 按页展示
cp 源文件 目标目录 复制命令
-r 若给出的源文件是一个目录,此时将复制该目录下所有的子目录和文件 --可以复制文件夹
-i 在覆盖 目标文件 之前,提示确认是否覆盖(-f 不提示)
mv:
1.改名:mv source_filename dest_filename
mv /home/hadoop/123/test.txt /home/hadoop/123/test2.txt
mv /home/hadoop/123 /home/hadoop/456
2.剪切:mv source_filename 目标目录
mv /home/hadoop/123/test.txt /home/hadoop/234/
3.剪切目录:mv source_directory 目标目录
mv /home/hadoop/234/ /home/hadoop/123/
rm -rf ---常用
rm 删除
-i 删除前逐一询问确认
-f 直接删除,无需逐一确认 f:force
-r 将目录及其以下文档逐一删除
rmdir 目录 --专门用来删除空目录
查看文件的前几行:
head 文件名 默认是头部10行
head -n 行数 文件名
head -n 5 a.txt
head -5 a.txt --可以省略n
查看文件的末尾几行:
tail 文件名 默认是尾部10行
tail -n 行数 文件名
tail -n 5 a.txt
tail -5 a.txt --可以省略n
tailf --可以监听文件尾部的变化
tail -f aa.txt
tailf aa.txt
查看文件一共有多少行:
word count
wc -l 文件名字
wc -l a.txt
查看文件有多 少个单词:
wc -w 文件名字
查看文件有多少个字节的内容: 一个字母:1字节 一个数字1字节 换行符1字节 结束符1字节 utf-8字符集: 1个中文字符3字节
wc -c 文件名字
\n 换行符
管道命令
| 把管道前面命令的输出当做管道后面命令的输入
对文件进行排序和统计的方法:sort 排序,以行为单位,从首字符,逐位比较ASCII值;
sort 文件名字 | uniq -c 统计每行出现的次数
sort 文件名字 | uniq -c|sort -n 按出现次数进行升序排序
sort 文件名字 | uniq -c|sort -n -r 按出现次数进行降序排序
结合使用
sort -n 升序排序(按照数字列进行升序排序)
sort -n -r 降序排序
sort -nr 降序排序(按照数字列进行降序排序)
--linux三剑客 sed awk grep
----对文件以行为单位进行 增删改查 的方法: sed
sed 命令操作 文件名字 --将操作的结果显示在命令行里面,但是不会
操作文件本身
sed -i 命令操作 文件名字 --将操作的结果写入到文件里面,但是不会
显示在命令行中
新增行数据
将数据写入到某一行
sed '行号i\写入的内容' 文件名字
sed '3i\helloworld' e.txt
--sed -i '3i\helloworld' e.txt --会修改文件本身
补充:
a --add 将数据写入到规定行的下一行
sed '行号a 写入的内容' 文件名字 --写入内容下一行出现
$:表示最后一行
删除行数据
删除某一行数据
sed '行号d' 文件名
sed '2d' e.txt
删除多行数据
sed '开始行号, 结束行号d' 文件名
sed 'd' e.txt --删除所有行
sed '1,$d' e.txt --删除所有行
--sed -i '1,$d' e.txt --会修改文件本身
补充: --结合正则来进行删除
sed '/正则/d' 文件名
sed '/hello/d' 8.txt
sed '/^[0-9].*[a-z]$/d' 8.txt
--若要删除文件中的空行
sed '/^$/d' 文件名
修改行数据
sed '行号s/要被修改的内容/修改成的内容/g' 文件名
sed '1,$s/apple/苹果/g' d.txt s:表示查找 g:表示全部替换 若只替换个别 用数字1,2,3
sed -i '1,$s/apple/苹果/g' d.txt
查询行数据
sed -n '行号p' 文件名 --print
sed -n '5p' d.txt
sed -n '开始行号, 结束行号p' 文件名
sed -n '3,5p' d.txt
创建文件 /home/test1.txt
只查看每一行第一个点前面的数据:
www.baidu.com
image.baidu.com
tieba.baidu.com
v.baidu.com
map.baidu.com
map.baiduccom.com
正则表达式:
.是匹配任意一个字符
*是匹配0次或任意次 + 匹配一次或多次 ?是匹配0次或1次
\. 转义.这个元字符
.* 表示0个或任意多个字符
sed 's/\.baidu.*//g' /home/test1.txt
sed '1,$s/\.baidu.*//g' /home/test1.txt
--或者用awk
awk -F '.' '{print $1}' test1.txt
筛选和查找行数据: grep --结合正则
grep 正则 文件名
查询文件里面,所有数字开头的行的信息
grep '^[0-9]' e.txt
^ 进行开头数据的判断
[ ] 表示范围
[0-9] 所有的数字
[a-z] 所有的小写
[A-Z] 所有的大写
123或者789开头
grep '^[1-37-9]' e.txt
查询文件里面,以大写字母结尾的数据
$ 进行结尾数据的判断
grep '[A-Z]$' e.txt
查找不是用H结尾的数据
grep '[^H]$' e.txt
查找所有大写结尾的数据但是不要大写H
grep '[A-Z]$' e.txt | grep '[^H]$'
grep '[A-GI-Z]$' e.txt
查找以数字结尾的第二行信息
grep '[0-9]$' e.txt | sed -n '2p'
查找数字开头,并且是小写结尾的行
grep '^[0-9].*[a-z]$' e.txt
awk
文件上传和下载
yum -y install lrzsz
sz 文件名 --下载文件
rz 上传文件到当前目录
以行为单位,进行读入,根据分隔符对每行数据进行切割,进行数据列的查看:awk命令
1.使用分隔符来对某个列进行数据的查看
---如果文件分隔符就是空格
则 awk '{列的操作}' 文件名
awk '{print $1,$2}' 文件名 --$0:表示全部列 $1:第一个列
如果文件分隔符是除空格之外的其他分隔符,需要指明分隔符
awk -F '文件列的分隔符' '{列的操作}' 文件名
awk -F ';' '{print $1,$2}' emp.txt
awk默认的使用的分隔符就是空格。--不会严格 区分文件中是 单个空格 还是多个空格 分隔;
2. 使用变量,对读取的列的数据进行计算
awk -F '分隔符' -v变量名1=值 -v变量名2=值 --赋值 用=
'数据的展示' 文件名字
查询员工的年薪和日薪:
awk -F ';' -vy=12 -vd=22 '{print $2,$6*y,$6/d}' emp.txt
3. 使用逻辑对数据进行判断 --相应操作不要带花括号{}
找出比两千工资大的信息:
awk -F ';' '$6>2000' emp.txt
找出工资小于2000并且有奖金的用户信息
awk -F ';' '$6<2000 && $7>0' emp.txt --&&相当于and
找出工资等于3000或者等于5000的数据 --做比较 用==
awk -F ';' '$6==5000 || $6==3000' emp.txt --||相当于or
----awk不支持 !(非) 判断 相当于not
------sort uniq -c sort -nr
练习:
查询出emp表每一年分别有多少人入职?
方法一
awk -F ';' '{print $5}' emp.txt|sed -n '2,$p'|awk -F '/' '{print $1}'|sort|uniq -c|sort -nr
方法二
awk -F ';' '{print $5}' emp.txt|sed -n '2,$p'|sed '1,$s/\/.*//g'|sort|uniq -c|sort -nr
---date
创建一个今天年月日命名的文件
date 会返回当前系统时间
date "+%Y-%m-%d %H:%M:%S" 也可以用单引号
`` 反引号表示要引用一个命令的结果,将这个结果放到另一个
命令中当成条件去使用。
---$() 与 `` 功能一样
touch --用来创建文件
创建一个今天年月日命名的文件
touch `date | awk '{print $1$2$3}'`.txt
touch $(date | awk '{print $1$2$3}').txt
touch `date +%Y-%m-%d`.txt
touch $(date +%Y-%m-%d).txt
--date -d "2 days ago" "+%Y-%m-%d" --2天前
--date -d "-2 days" "+%Y-%m-%d" --2天前
--date -d "2 moths ago" "+%Y-%m-%d"--2个月前
--date -d "2 years ago" "+%Y-%m-%d"--2年前
4. 硬件操作
CPU
查看cpu的基本信息
cat /proc/cpuinfo
内存
查看内存的基本信息
cat /proc/meminfo
free -h
-b 以bytes为单位显示内存使用情况 free -b
-k 以KB为单位显示内存使用情况 free -k
-m 以MB为单位显示内存使用情况 free -m
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位 free -h
-t 显示内存总和 free -t
硬盘
查看硬盘的基本使用情况
df -h
网卡
查看网卡的基本情况
ip add 查看IP
ip add 查看IP
ifconfig 查看IP
查看自己的网络和其他另一个地址之间的网络是否通畅:
ping 另一个ip地址或者域名
ping www.baidu.com
ping www.souhu.com
---打包与压缩命令
对文件的打包、压缩和解压缩: ***
-- tar 包:仅仅只是打包,但是不会进行压缩的方法
打包:tar -cf 包名 要被打包的文件名 c--create
tar -cf 1.tar *.txt
查看这个包里面有什么内容:tar -tf 包的名字 t--list
tar -tf 1.tar
解开这个包,拿出里面的文件:tar -xf 包的名字 x--extract
tar -xf 1.tar 如果当前有相同的文件名,会对文件进行替换
--补充:解开包到指定目录 tar -xf 包名 -C 指定目录
追加一个或者多个文件到包里面:tar -rf 包的名字 要追加的文件名
tar -rf 1.tar world.txt
tar -rf 1.tar apple.txt pear.txt
-- tar.gz包:在打包的同时,进行数据的压缩
v:显示一个过程
打包并且压缩:tar -zvcf 包名 要被打包的文件名
tar -zvcf 1.tar.gz *.txt
查看压缩包:tar -ztf 包的名字
tar -ztf 1.tar.gz
解压缩这个包:tar -zvxf 包的名字
tar -zxf 1.tar.gz
--zip的压缩包的方法:
yum -y install zip
yum -y install unzip
打包并且压缩:zip 包名 要打包的文件名
zip 1.zip *.txt
查看压缩包的内容:unzip -l 包名
unzip -l 1.zip
解压缩包:unzip 包名
unzip 1.zip
--和进程相关的命令
查看当前资源占用靠前的进程和程序的名字以及概况:
top 实时动态式的
load average 负载
P:按cpu占用排序
M:按内存占用排序
T:按使用cpu时间排序
N:按进程编号排序
查看所有资源占用靠前的进程和程序的名字以及概况:
ps -aux
ps -ef
结束掉正在运行进程:
kill 进程编号
kill -KILL 进程编号 --强制结束进程
kill -9 进程编号 --无论如何都要结束进程
通过进程关键字查看进程详细信息,主要查看进程PID(进程编号)
ps -ef|grep hadoop
命令 参数 进程关键字
kill -9 $(ps -ef|grep '^hadoop'|awk '{print $2}') 过滤出hadoop用户进程杀死
$() --功能类似于反引号``
2.4.5 screen
-S 创建虚拟屏 screen -S test1 ctrl+a+d ---退出虚拟屏
screen -r 虚拟屏名字 进入虚拟屏
screen -R 虚拟屏名字 先试图恢复离线作业,若找不到离线作业,即创建新的screen作业
screen -ls 查看所有的screen作业
screen -wipe 清除dead状态screen作业
kill -9 虚拟屏作业编号 --杀死screen作业
注意:需安装 screen
1.su - root切换至root用户,密码为root
2.yum -y install screen 安装虚拟屏软件screen
------3.提示是否安装需输入y
4.显示完毕后切换回hadoop用户
6. 权限操作 **
类型 所属主 所属组 其他人
- rw- r-- r--
d rwx r-x r-x
- r-- r-- ---
l rwx rwx rwx
- --- --- ---
类型:- 普通的文件(touch) d 文件夹(mkdir) l 链接文件
权限:
读取 写入 执行
r w -
r w x
r - -
r - x
- - -
- 表示在这个位置上没有权限
修改权限的命令:
u 自己的权限 user
g 组员的权限 group
o 其他人的权限 other
a 所有人
r 读取
w 写入
x 执行
chmod o-rw baidu.txt
chmod o=rw baidu.txt
chmod ug+x baidu.txt
chmod a=rwx baidu.txt
---chmod +x baidu.txt --给所有人添加执行权限
使用数字代替权限进行修改:
r-- 4 100
-w- 2 010
--x 1 001
rw- 6 110
r-x 5 101
-wx 3 011
rwx 7 111
--- 0 000
chmod 753 a2.txt
chmod 654 a2.txt
chmod -R 777 /home/year --就是把home下的year文件夹及其所有文件都加上了所有权限
--批量修改权限
统一修改文件夹和里面所有文件的权限:
chmod -R 权限 文件夹名字
chmod -R 774 /home/year
2.3.2 chown
chown 新用户名 文件名 --修改文件的所有者
chown :新组名 文件名 --修改文件的所属组
chown 新用户名:新组名 文件名 --修改文件的所有者,所属组
--批量处理
-R 处理目录及目录下所有文件与子目录
实例:
chown -R root:root /home/year 批量改变所有者,所属组
--用户管理命令
创建用户:
useradd 用户名
useradd xiaoli
创建用户密码:
passwd 用户名
修改用户放入到其他的组:
usermod -g 组名 用户名
usermod -g root xiaoli
--查看所有组的信息
cat /etc/group
查看用户的组信息:
id 用户名
id lilei
删除组
groupdel 组名 --不能删除掉用户的主组
新增组
groupadd 组名
删除用户:
userdel -r 用户名 ---(递归式删除用户,会删除与用户相关的一切东西)
userdel 用户名 ---会保留家目录
切换用户登录:
su 用户名 -- 不会刷新登录窗口 --临时切换用户 switch user 切换用户
su - 用户名 会刷新登录窗口 --完全切换用户
7. 其他
查找系统中文件的位置
find 查找的范围 查找的方法 查找的内容
按名字查找文件: ---支持个别正则符号
--查找系统里面,有没有hello.txt的文件
find / -name hello.txt
--查找所有的 a 开头的, .txt结尾的文件名字和位置
find / -name 'a*.txt' --'a*.txt'或者"a*.txt"
根据类型查找文件:
d 文件夹 f 文件 l 快捷方式
--查找所有的 a开头 txt结尾的文件夹的名字和位置
find / -type d -a -name "a*txt"
--布尔运算符
-a 相当于and
-o 相当于or
! 相当于not
根据文件的大小来查找:
k M G
在home目录中,查询所有大于2k的文件 + 大于 - 小于
find /home -size +2k -a -type f
查找所有小于100K的jpg图片 或者 大于300k的png图片
find / -size -100k -a -name "*.jpg" -o -size +300k -a -name "*.png"
查找空的文件夹或者文件:
find /home -empty
根据文件的权限进行查找:
find /home -perm 权限的数字
find /home -perm 644
-user 按用户名查找
find /home -user hadoop
Linux中命令的定时调度:***
crontab 在系统中有一个服务名 crond
对服务进行启动、停止、重启的操作:临时的服务的操作,如果电脑重启,
服务就还原了。
service 服务名 start | stop | restart | status
设置系统定时调度的方法:
1. 确认时间是否正确: date
2. 安装时间服务器: yum -y install ntp
3. 启动时间服务器:service ntpd start
4. 选择时区的内容:tzselect --timezone
5. 更改系统的时区的文件:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
进行定时任务的设置: crontab -e
查看定时任务 crontab -l
删除定时任务 crontab -r
两个大部分: 时间的设置 + 要操作的命令
时间的部分:分成了 分 小时 天 月 周 五个部分
分0-59 小时0-23 天1-31 月1-12 周0-6
* * * * * 每分钟运行一次当前的命令
30 0 * * * 每天的0点30分运行命令
0,30 0,12 * * * 每天的0点和12点的0分以及30分运行命令
0 8-18 * * * 每天的8点到18点每个小时的0分运行命令
0,30 */2 * * * 每天每隔两个小时,0分和30分运行命令
30 12-18/3 * * * 每天的12点到18的范围内,每隔3个小时,30分的时候运行命令
?有没有用过定时调度,里面每个位置分别代表什么意思?
每天的十点半,将/root里面的 sys.log文件的内容,读取并且保存到 当天的文件里面
29 10 * * * touch /root/`date | awk '{print $1$2$3}'`.txt
----29 10 * * * touch /root/`date "+%Y-%m-%d"`.txt
30 10 * * * cat /root/sys.log > /root/`date |awk '{print $1$2$3}'`.txt
--整1条也可以 30 10 * * * cat /root/sys.log > /root/`date |awk '{print $1$2$3}'`.txt
重定向符
> 将要显示的数据 覆盖 的写入到后面的文件中
>> 将要显示的数据 追加 的写入到后面的文件中
cd
pwd
ls
ls -l--
mkdir -p
cp
mv
rm -rf
touch
cat
more
less
head--
tail--
sed--
grep--
awk--
wc
sort
uniq -c
cut
tar -zcf--
tar -zxf--
zip unzip
free -h--
df -h--
top--
ps -aux
ps -ef
kill
kill -KILL
kill -9
useradd
usermod
userdel -r
chmod--
chmod -R--
chmod 762 -- rwx rw- -w-
chown
chown -R
find--
crontab--
service
3.面试常考命令
准备操作文件:ll > mingling.txt
3.1cut
cut的工作就是"剪",具体的说就是在文件中负责剪切数据的作用。
-d 指定分隔符,按照指定分隔符进行列的切割-----默认分隔符是Tab;
-f 列号,提取第几列
实例:
cut -d " " -f1,3,6 mingling.txt --会严格区分 单个空格与 多个空格
补充:
cut -b 按字节来剪切 cut -b 1-3 a.txt --也可以cut -b 1,2,3 a.txt
cut -c 按字符来剪切 cut -c 1-3 a.txt --也可以cut -c 1,2,3 a.txt
3.2sed
是一种流编辑器,它一次处理一行内容
参数:
-e 多重编辑,且命令顺序会影响结果
sed -e '4d' -e 's/hadoop/hello/g' -e '2a hadoop' mingling.txt --各重编辑同时执行
命令功能:
a 新增,a的后面可以接字符串,在下一行出现
sed '2a hong shan' mingling.txt
d 删除
sed '2d' mingling.txt
sed '/test/d' mingling.txt
s 查找并替换
sed 's/hadoop/root/g' mingling.txt
sed -n "行号p"
打印输出全部行 sed -n '1,$p' 文件名 --$:表示最后一行
sed -n 'p' 文件名
3.3awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认的分隔符将每行切片,切开的部分进行分析处理
-F 指定输入文件的分隔符
-v 变量处理
使用正则:找出以d开头的所有行的第一列和第二列
awk -F " " '/^d/ {print $1","$2}' mingling.txt ---$0 全部列
----- awk -F ';' '{print $1,$6}' emp.txt
awk -F ';' '$6>1000 && $7>0' emp.txt --进行逻辑判断 &&相当于and
awk -F ';' '$6==3000 || $6==5000' emp.txt ----进行逻辑判断 || 相当于 或
BEGIN,END:在文件开头和结尾分别添加内容
awk -F " " 'BEGIN{print "user,hadoop"} {print $1","$2} END{print "byebye,hadoop"}' mingling.txt
-v 变量处理:
awk -v i=10 -F " " '{print $2+i}' mingling.txt
内置变量:FILENAME文件名,NR已读取的记录数,NF切割后列的个数
awk -F " " '{print "minglingfilename:" FILENAME ",linenumber:" NR ",columns:" NF}' mingling.txt
3.4sort 将文件进行排序,并将排序结果标准输出 --- 默认分隔符 tab
-n 依照数值大小排序
-r 以相反顺序排序
-t 设置排序时所用的分割字符
-k 指定需要排序的列
sort -t " " -nrk 2 mingling.txt