Linux基础命令
Chapter 1
1.root 用户 管理员 最大权限
~ 当前用户的 家目录
root用户的家目录 /root
其他用户 /home/用户名
1 | [root@hadoop001 ~]# cd / |
2.pwd 查看当前光标所在的目录
3. ls 查看
ls -l ===> ll 查看文件夹 权限 用户用户组 时间
ll -a 显示隐藏文件和文件夹
ll -sh 仅仅查看文件的大小
ll -rt 按时间排序
4. mkdir 创建文件夹
mkdir 1 2 3 并联创建文件夹
mkdir -p 4/5/6 串联创建文件夹 级联
5. cd 切换目录
/根目录
cd dir 切换到指定目录
cd …/退回上一层目录
cd …/…/退回上2层目录
cd …/…/…/退回上3层目录
家目录
cd /root 家目录路径补全
cd 直接回车
cd ~
cd ~/1
cd - 回退到上一次命令
6. 目录
绝对目录 /根目录开头 路径是齐全的
相对目录 不是以/开头 路径是短的
7. 命令帮助
ls --help
Usage: ls [OPTION]…[FILE]…
[] 可选项
… 多个参数
Chapter 2
1. clear 清理屏幕
2. mv 移动 cp复制
mv 始终是一份 快
cp 两份 慢
文件夹
cp -r dir1 1 非标
cp -r dir1 1/dir1 标准操作
cp -r dir2 1/dir33 修改名称的
mv dir1 1 非标
mv dir1 1/dir1 标准操作
mv dir3 1/dir44 修改名称的
3. 创建空文件
- touch 1.log 【常用】
- vi 2.log
- 默认进入命令行模式
- i键 进入命令行模式–》编辑模式
- esc键 从编辑模式–》命令行模式
- shift+: 从命令行模式–》尾行模式。输入wq保存退出
- cat /dev/null >3.log 【清空文件内容】
echo “” >4.log 【慎用,文件大小不为0】
4. 覆盖和追加文件内容
>将文本内容 覆盖掉 【高危命令1】
cp mysql.cnf mysql.cnf20201107 备份文件
>>将文本内容 追加
5. 查看文件内容
-
cat 文件内容一下子全部显示 ctrl+z中断
-
more 文件内容一页页 往下翻,按空格往下翻,ctrl+b回退 q退出
-
less 文件内容 按键盘的上下键 按行为单位 q退出
-
tail 实时查看文件内容
-
-f 假如文件被移除 然后重命名 就无法再监控到文件
-
-F 假如文件被移除 然后重命名 会不断的retry尝试 去监控文件,直到监控到位
-f, --follow[={name|descriptor}]
output appended data as the file grows;
an absent option argument means ‘descriptor’
-F same as --follow=name --retry
-
-
想要查看文件内容倒数100行,且实时监控
- tail -100f 1.log
-
文件内容特别多 如何快速定位到ERROR、关键词信息
cat CloudAgent.log | grep ERRORcat CloudAgent.log | grep -A 10 ERROR 后10行
cat CloudAgent.log | grep -B 10 ERROR 前10行
cat CloudAgent.log | grep -C 10 ERROR 前后各10行 20行 【常用】| 管道符
grep过滤 -
需要查看的内容过多,
- cat CloudAgent.log | grep -C 20 ERROR > 20201107error.log
- more 20201107error.log
- 通过编辑去搜索
vi xxx.log
shift+:
/ERROR 回车
n键寻找
- 将日志文件 下载到window电脑,进行搜索 定位 分析 【推荐】
- 坑: 假如CloudAgent.log 原文件很大,那么从生产下载到公司网络 是不是要走外网带宽10M的,
- 想问 会不会影响 公司服务?
- 建议: 假如下载大文件,业务高峰或者工作日白天 尽量不要做,非要做,那就【限速】(FTP)
6. 上传下载
yum install -y lrzsz
sz xxx.log 下载 Linux -->> windows
rz 直接回车 上传windows -->> linux
7. 别名 alias
常用的命令 或 复杂的命令 一串,可以使用别名 来简化
ls -l ==> ll
8. 环境变量
-
全局: /etc/profile
source /etc/profile
当前会话生效
已经开启的会话不会跟着自动生效,需要重新执行生效命令
新开的会话是自动的生效
-
个人:~/.bash_profile
~/.bashrc 【推荐】
-
场景:
ssh 远程执行B机器 启动服务命令会抛错, java command not found
直接登录B机器 命令是找到的 which java找到 配置环境变量文件在 .bash_profile 是不正确的,
应该配置在 .bashrc文件里。 https://blog.csdn.net/whitehack/article/details/51705889
9. 创建用户和设置密码
1 | [root@hadoop001 ~]# useradd tom |
10.历史命令 history
# !99 执行 历史命令的第99个
history -c 清空
Chapter 3
1. rm 删除【高危命令2】
rm -rf /
rm -r yyydir
-f 不提示,直接删除
脚本场景:
业务逻辑判断 赋值的 LOG_PATH=/xxx/yyy
漏了一种没有赋值
rm -rf ${LOG_PATH}/* ==> rm -rf /*
如何避免:
每次删除之前,都判断${LOG_PATH}目录是否存在
set -u参数 在脚本的 第一行#!/bin/bash ,在第二行写
2.用户用户组
1 | [root@hadoop001 ~]# ll /usr/sbin/user* |
1 | [root@hadoop001 ~]# ll /usr/sbin/group* |
- 创建用户同时创建用户组
1 | [root@hadoop001 ~]# useradd test1 |
1 | [root@hadoop001 ~]# cat /etc/passwd |
1 | [root@hadoop001 ~]# cat /etc/group |
-
切换用户 su -tom
-
删除用户 userdel tom
如果用户所属的用户组没有其他用户, 则一起删除,否则用户组删除不了
-
样式丢失
[root@hadoop001 ~]# rm -f /home/tom/.bash* 先删除样式 当前用户的所属家目录的 个人环境变量文件不存在
1 | [root@hadoop001 ~]# su - tom |
拷贝skel下面的文件, 恢复样式, .bash文件存在
1 | -bash-4.1$ cp /etc/skel/.* /home/tom/ |
-
添加用户到新的用户组
-
添加附加组
1
2
3[root@hadoop001 ~]# usermod -a -G hadoop tom
[root@hadoop001 ~]# id tom
uid=504(tom) gid=504(tom) 组=504(tom),502(hadoop) -
修改主组
1
2
3
4
5
6
7
8
9[root@hadoop001 ~]# usermod -a -G hadoop tom
[root@hadoop001 ~]# id tom
uid=504(tom) gid=504(tom) 组=504(tom),502(hadoop)
[root@hadoop001 ~]# usermod -g hadoop tom
[root@hadoop001 ~]# id tom
uid=504(tom) gid=502(hadoop) 组=502(hadoop)
[root@hadoop001 ~]# usermod -a -G tom tom
[root@hadoop001 ~]# id tom
uid=504(tom) gid=502(hadoop) 组=502(hadoop),504(tom) -
查看组下面的用户
1
2[root@hadoop001 ~]# groupmems -g tom -l
tom3. passwd文件
- 登录不了
1
2
3tom:x:504:502::/home/tom:/sbin/nologin
[root@hadoop001 ~]# su - tom
This account is currently not available.-
切换不了
1
tom:x:504:502::/home/tom:/bin/false
场景: hdfs hbase等用户切换不了, 原因/bin/false
jps命令不可用
su - hdfs之前, 将bin/false改为/bin/bash
-
3. su sudo
-
su xx 切换用户
-
su - xx 切换用户 进入家目录 且执行该用户环境变量文件 .bashrc
-
sudo 普通用户临时使用root的最大权限
1
2
3[root@hadoop001 ~]# su - tom
[tom@hadoop001 ~]$ cat /root/1.py
cat: /root/1.py: 权限不够 【错误2】【Permission denied】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[root@hadoop001 ~]# vi /etc/sudoers
tom ALL=(root) NOPASSWD:ALL
[root@hadoop001 ~]# su - tom
[tom@hadoop001 ~]$ cat /root/1.py
cat: /root/1.py: 权限不够
[tom@hadoop001 ~]$ sudo cat /root/1.py
for i in range(1,10):
for k in range(1,10-i):
print(end=" ")
for j in range(1,i+1):
product=i*j
print("%d*%d=%2d" % (i,j,product),end=" ")
print (" ")
[tom@hadoop001 ~]$生产场景:用户的权限不满足需求,需要更高的,假如IT 和公司管理制度都还好,就要求加sudo权限。
否则碰见这种权限错误的操作,只能让对应的IT人员操作。
4. 权限
1 | [root@hadoop001 ~]# ll |
-
第一个字符 d 代表文件夹 -文件
-
三个字母 分别是代表 读r 4 、写w 2 、执x 1、-没有任何权限 0
第一组: 文件或者文件夹的所属用户
第二组: 文件或者文件夹的所属用户组的成员
第三组:其他用户组的成员对这个文件或文件夹的权限 -
数字与权限对应
777 rwxrwxrwx
755 rwxr-xr-x
640 rw-r-----
600 rw-------
5.权限命令
chmod -R 777 文件或者文件夹
chown -R 用户:用户组 文件或者文件夹
1 | [root@hadoop001 ~]# ll |
6. 大小
文件大小: ll -h
文件或文件夹大小 : du -sh
1 | [root@hadoop001 ~]# du -sh /usr/local |
7. 搜索find
1 | [root@hadoop001 ~]# find / -name '*hadoop*' |
history 查看历史命令
find 搜索
ps -ef 查看进程
8.vi编辑
-
【良好习惯】:
vi 编辑生产配置文件
先 cp conf conf20201116
vi 敲完 wq -
进入提示是 swap文件,只需ll -a查看,进行删除即可
E325: ATTENTION
Found a swap file by the name ".rz.txt.swp"
owned by: root dated: Sun Nov 8 22:17:56 2020
file name: ~root/rz.txt -
粘贴的坑:
必须进入编辑模式 ,否则第一行内容丢失 不完整 【生产特别注意】
-
在命令行模式,常用的快捷方式:
dd 删除当前行 【常用】
dG 删除当前行及以下所有行 【常用】
ndd 删除当前行及以下n-1行
gg 跳转到第一行的第一个字母
G 跳转到最后一行的第一个字母
shift+$ 行尾 -
如何通过vi命令进行清空文件内容:
gg dG -
生产场景:window电脑的服务的配置文件内容修改过 最新的,想要覆盖生产的文件
gg dG
i
从window电脑拷贝全局内容
到Linux的会话编辑模式中,按鼠标的右键 粘贴
esc
shfit+: wq -
行号
尾行模式 set nu
set nonu
9.awk切割文件
源文件
1 | a b c dd |
-
取某一列
1
2
3
4[bigdata@hadoop001 data]$ cat 1.log |awk '{print $1}'
a
12
ex -
取某几列[中间有空格]
1
2
3
4[bigdata@hadoop001 data]$ cat 1.log |awk '{print $1,$2}'
a b
12 3
ex ii -
取某几列,合在一起的
1
2
3
4[bigdata@hadoop001 data]$ cat 1.log |awk '{print $1$2}'
ab
123
exii -
取某一行
1
2[bigdata@hadoop001 data]$ cat 1.log |awk 'NR==1{print}'
a b c dd -
取前两行
1
2
3[bigdata@hadoop001 data]$ cat 1.log |awk 'NR>=2{print}'
12 3 4
ex ii oo -
取第二行第三列
1
2[bigdata@hadoop001 data]$ cat 1.log |awk 'NR==2{print $3}'
4
10.sed替换指定内容
原数据
1 | tom b c dd |
-
将a全局替换成aa
1
2
3
4
5
6[bigdata@hadoop001 data]$ sed -i 's/a/aa/g' 2.log
[bigdata@hadoop001 data]$ cat 2.log
tom b c dd
12 3 4 cindy
jerry ii daay
mom daad shell -
将"/“替换成"d”,使用"\"转义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[bigdata@hadoop001 data]$ cat 2.log
tom b c dd
/a
12 3 4 cindy
/a
jerry ii day
/a
mom dad shell
/a
[bigdata@hadoop001 data]$ sed -i 's/\//d/g' 2.log
[bigdata@hadoop001 data]$ cat 2.log
tom b c dd
da
12 3 4 cindy
da
jerry ii day
da
mom dad shell
da
Chapter 4
1. 磁盘
1 | [root@hadoop001 ~]# df -h |
/ 系统盘 100G
/data01 数据盘 2T
/data02 数据盘 2T
/data03 数据盘 2T
2. 内存
1 | [root@hadoop001 ~]# free -m |
预留内存最好在15%
swap 因为内存不够,使用部分磁盘空间来充当内存使用,虽然可以解决内存紧缺的问题,但是效率不高。
尤其大数据,swap哪怕设置了大小 ,也尽量设置惰性使用。
参数=0
3.机器负载top
load average: 0.07, 0.05, 0.05
1m 5m 15m
经验值: 10 生产上尽量控制在10,否则服务器就认为卡
a.计算程序 hive sql、spark 、flink 密集计算 是不是要调优
b.是不是被挖矿了
yarn 软件、redis软件 等默认端口号 会被扫描 进行注入 挖矿
cpu%
27448 root 20 0 446720 14848 3560 S 100% 0.2 853:09.28 ifrit-agent
c.硬件问题 ,内存条损坏,最后一招 万能重启 检测是不是硬件问题
4.安装
yum search 包名称
httpd.x86_64 : Apache HTTP Server
yum install -y httpd
yum remove telnet
1 | [root@hadoop001 ~]# rpm -qa | grep httpd 查看httpd相关的包 |
6.端口号
1 | [root@hadoop001 ~]# netstat -nlp| grep 27198 |
- 有进程PID不一定有端口号
- 服务的通信交流, 要IP+PORT
- 打开一个服务的web界面
- ps -ef|grep xxx 找到pid
- netstat -nlp| grep pid 找到对应端口号
- 检测服务是否OK
- linux 安装telnet
- yum install -y telnet
- ping ip
- telnet ip port
- linux 安装telnet
7.结束进程
-
ps -ef|grep 名称
可能匹配多个, 确认自己想要结束的进程 kill -9 pid 【高危命令】 kill -9 101 102 103 三个进程一起结束
-
全局结束
kill -9 $(pgrep -f 匹配字符)
kill -9 101 102 103
-
访问权限查看
-
1
2
3
4
5
6
7
8
9
10
11
12[root@hadoop001 ~]# netstat -nlp|grep http
tcp6 0 0 :::80 :::* LISTEN 3478/httpd
tcp6 0 0 0.0.0.0:80 :::* LISTEN 3478/httpd
tcp6 0 0 192.168.1.101:80 :::* LISTEN 3478/httpd
80端口号服务可以对外
window或者其他服务器 可以ip+80 进行访问的
tcp6 0 0 localhost:80 :::* LISTEN 3478/httpd
tcp6 0 0 127.0.0.1:80 :::* LISTEN 3478/httpd
localhost 、127.0.0.1 代表本机
80端口仅限本机的其他服务可以访问,window或者其他服务器无法访问
8.下载wget命令
9.解压
zip -r xxx.zip xxx/*
unzip xxx.zip
tar -czvf xxx.tar.gz xxx/*
tar -xzvf xxx.tar.gz
10.command not found
没有安装
没有配置环境变量
1 | [root@hadoop001 ~]# which java1 |
export JAVA_HOME=/usr/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH 前 【推荐】
[root@hadoop001 ~]# echo $PATH
/usr/local/jdk/bin:/usr/local/python/bin:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
11.定时
-
crontab -l 查看
-
crontab -e 编辑 就是编辑一个定时器文件内容
*****sleep 10s; date >> /root/1.log
分
小时
日
月
周*标识 每
面试题:
每隔10s 打印一次
*/6 * * * * 每隔6min打印
1 | [root@hadoop001 ~]# vi test.sh |
12.后台执行脚本
nohup … &
nohup /root/test.sh >> /root/1.log 2>&1 &