常用快捷键:
ctrl + c 停止进程
ctrl + l 清屏
↑ ↓键 查找执行过的命令
tab键 补全、提示
\ 从下行继续输入
whereis、which、whoami:
whereis:该命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径
whereis python
which:查询该命令所在的目录,即执行的是哪一个位置的命令
which python
whoami:查询所登录用户的用户名
whoami
man :
基本语法:man [命令或配置文件] (作用:获取帮助信息)
例:man ls
pwd:显示当前工作目录的绝对路径
hostname:显示主机名
useradd、passwd、userdel:
useradd:添加新用户
useradd hadoop01
passwd:设置用户的密码
passwd
userdel:删除用户
userdel hadoop01
groupadd、groupdel:
groupadd:添加组
groupadd hadoop01
groupdel:删除组
groupdel hadoop01
ls:列出目录的内容
例: ls -a 列出当前目录下的所有文件(包括隐藏文件,以 . 开头的)
ls -l (相当于 ll) 长数据串列出,每行列出的信息依次是 文件类型与权限 链接数 文件所属用户 文件所属组 文件大小用byte来表示 建立或最近修改的时间 名字
文件权限:r w x - 的含义,r是读权限,w是写权限,x是写权限,-是没有对应的权限;也可以用数字表示读、写、执行权限,依次为4、2、1
[hadoop01@hadoop01 shell]$ ll
total 40
drwxrwxr-x 2 hadoop01 hadoop01 4096 Nov 5 19:00 b
lrwxrwxrwx 1 hadoop01 hadoop01 5 Nov 5 19:00 bbb -> b.txt
-rw-rw-r-- 1 hadoop01 hadoop01 2 Nov 4 05:13 b.txt
# - rw- rw- r--
#文件类型 所属用户权限 所属组权限 其他用户权限
#第一个字符 - 表示是一个文件 d 表示是一个目录 l 表示是一个软连接
cd:Change Directory切换路径
例: cd … 返回上级目录( … 表示上级目录,. 表示当前目录)
cd ./tmp 切换到当前目录下的tmp目录
cd /opt/data 切换到根目录下的data目录
cd ~ 或 cd 切换到用户家目录
cd - 切换到上一次所在目录
mkdir:创建目录,加 -p 选项创建多级目录
例: mkdir tmp 在当前目录下创建一个tmp目录
mkdir -p /opt/data/hive 在根目录的opt目录下创建data目录,data目录下再创建hive目录
rmdir:删除空目录,只有目录为空时才可删除
rm:删除文件;-r (recursion)递归删除,-f (force)强制删除,不需要询问
例:rm -rf /opt/data/hive 删除/opt/data/hive目录及目录下的所有文件
touch:创建一个空的文件
例:touch student.txt 在当前目录下创建一个内容为空的student.txt
vim:编辑文件
例:vim teacher.txt 在当前目录下编辑teacher.txt文件;如果当前目录下没有这个文件,使用vim编辑并保存后也会存在
cp:复制文件; -r 递归复制整个文件夹
例:cp teacher.txt /opt/data/school/ 复制当前目录下的teacher.txt文件到/opt/data/school/目录下
cp -r /opt/data/school/ /opt/data/school2 复制school文件夹下的所有文件到school2目录下
mv:移动文件或重命名文件 源目录和目的目录一样的话就是重命名文件
例:mv /opt/data/demo01.txt /opt/data/demo02.txt 对文件demo01.txt重命名为demo02.txt
mv demo01.txt /tmp 把当前目录下的demo01.txt 移动到 /tmp 目录
cat、more、less、head、tail:
cat:查看文件内容,一般小文件用 cat 查看,加 -n 参数可以显示行号
cat student.txt
more:分页显示文本文件的内容;空格键向下翻一页,enter键向下翻一行,q 或 ctrl+c 退出more
more student.txt
less:和more功能相似;↑ ↓ 键翻页,与more有以下几点区别
less student.txt
head:不加参数时默认查看文件前10行;加 -n数字 表示从第一行开始显示多少行
head -n5 student.txt
tail:不加参数时默认查看文件后10行;加 -n数字 表示从最后一行开始显示多少行
tail -n5 student.txt
echo:输出内容到控制台
echo "hello world"
su、sudo:
su:切换用户
su hadoop01 切换到hadoop01用户
su 切换到root用户
sudo:临时切换到root用户来执行当前命令
sudo vim /etc/sudoers 临时切换到root用户来编辑/etc/sudoers文件
普通用户使用sudo 须在 /etc/sudoers 文件中添加:
用户名 ALL=(ALL) NOPASSWD: ALL
>、>>:
>:覆盖目标文件,文件原有内容将被覆盖;如果目标文件不存在的话会被创建
echo "helloworld" > hello.txt
>>:追加到目标文件;如果目标文件不存在的话会被创建
echo "helloworld" >> hello.txt
history:查看执行过的历史命令
history
ln:连接; -s 软连接,相当于windows里的快捷方式,不指定参数时创建硬连接相当于复制一份文件
#在当前目录下创建一个student.txt文件的软连接
ln -s student.txt student.ln
#相当于复制当前目录下的student.txt 到 student文件
ln ./student.txt student
date、cal:
chmod、chown、chgrp:
chmod:更改文件权限
#将/opt/data目录下的所有文件改为777权限
chmod -R 777 /opt/data
#所属用户增加可执行权限
chmod u+x student.txt
#所属用户、所属组、其他人都去掉写权限
chmod -w student.txt
chown:更改文件所属用户 -R 递归
#将student.txt文件的所属用户和所属组改为hadoop01
chown -R hadoop01:hadoop01 student.txt
chgrp:更改文件所属组 -R
exit:退出当前登录的用户
kill:杀死进程
kill -9 10111 强制杀死进程号为10111的进程
vim分为三种模式:一般模式(默认模式,使用vim编辑文件时直接进入一般模式)
编辑模式(可以对文档进行编辑,输入 i、I、o、O、a、A从一般模式进入编辑模式,esc返回一般模式)
指令模式(也叫最后行模式,通过输入:从一般模式进入指令模式,esc返回一般模式)
一般模式:可以进行复制、粘贴、删除行、移动光标等操作( 需以英文输入法输入)
语法 | 功能 |
---|---|
yy | 复制光标当前所在行 |
数字yy | 复制从当前光标所在行开始的几行 |
dd | 删除光标当前所在行 |
数字dd | 删除从当前光标所在行开始的几行 |
p | 从当前光标所在行的下一行开始粘贴 |
u | 撤销上一步的操作 |
gg | 移动光标到文件的第一行 |
G | 移动光标到文件的最后一行 |
数字 +G | 移动到第几行(先按3,再按G,移动到第三行) |
shift + ^ | 移动光标到行首 |
shift + $ | 移动光标到行尾 |
i 、I (进入编辑模式) | i 从光标前开始插入、I 从光标所在行首开始插入 |
a、A(进入编辑模式) | a从光标后开始插入、A从光标所在行尾开始插入 |
o、O(进入编辑模式) | o 从光标所在行的下一行插入、O从光标所在行的上一行插入 |
编辑模式:在一般模式下按i、I、a、A、o、O对文件进行编辑,按esc返回一般模式
最后行模式:进行显示行号、查找、替换、退出并保存(:wq)、强制退出(:q!)等操作
:set nu | 显示行号 (临时显示) |
---|---|
:set nonu | 取消显示行号 |
:/关键词 或 :?关键词 | 搜索关键词并高亮显示(切换搜索结果:n下一个 N上一个 next;?搜索中n为上一个) |
:nohl | 取消高亮显示(no high light) |
:s/搜索的关键词/替换的关键词 | 对光标所在行的第一个搜索结果进行替换 |
:%s/搜索的关键词/替换的关键词/g | 对整篇文档所有行的所有搜索结果进行替换 %表示整篇文档,g表示全局global |
变量
系统变量:系统已经定义好的
例:$SHELL $HOME $PWD
自定义变量:
定义变量:变量名=值
readonly 变量名=值
=两边不能有空格; 只读变量,不能用unset删除;变量名由字母数字下划线组成,不能以数字开头;值中有空 格,需用括号括起来
删除变量:unset 变量名
$n、$#、$*、$@、 $?
$n: 命令行参数 $1表示命令行输入的第一个参数 从第十个参数开始用{}括起来 ${10}
$#: 命令行输入的参数个数
$*: 代表命令行中所有的参数,把所有的参数看成一个整体
$@:代表命令行中所有的参数,每个参数区分对待,可迭代
$?: 最后一次执行的命令的返回状态 0执行成功 非0执行失败
运算符:
$((运算式)) 或 $[运算式] 或 expr
例:echo $(( 3 + 2))
例:expr 3 + 2
条件判断:
[ condition ](注意condition前后要有空格)
1.字符串判断
[ 字符串 ] 字符串不为空则true
= 字符串是否相等 != 字符串是否不相等
[ -z 字符串 ] 如果字符串的长度为零则为真 ,即判断是否为空,空为真;zero
[ -n 字符串 ] 如果字符串的长度非零则为真 ,即判断是否为非空,非空为真;
2.整数数值大小判断
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
3.文件权限判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
4.文件类型判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
流程控制:
if
if [条件判断] then elif then else then fi
case
case [变量] 值1)命令 ;; 值2)命令 ;; *)命令 ;; esac
while
while [条件] do 命令 done
for
for (( 初始值;循环控制条件;变量变化 )) do 命令 done
for i in 集合 do 命令 done
read从控制台读取:
read -p “请输入一个数字:” -t 10
-p 读取时的提示符 -t 读取等待的时间(秒)
find:查找文件
语法:find [搜索范围] [选项] -name 按名称匹配查找 -size 按文件大小查找 -user 按用户名查找
find / -name “*.tmp” 查找根目录下 后缀为 .tmp 的文件
find ./ -size +100 查找当前目录下大于100M的文件 +大于 -小于 否则等于
find ./ -size -6k 查找当前目录下小于6k的文件,k得为小写 M G 为大写
find ./ -user hadoop01 查找当前目录下所属用户为hadoop01的文件
find ./ -mtime 0 查找近24小时内修改过的文件
find ./ -atime 1 查找之前48~24小时内进入过的文件
find ./ -cmin -30 查找30分钟前创建的文件
grep:用正则表达式搜索,并把匹配的行打印出来;常与管道符“|” 一起用
用法:grep [参数] 正则 filename
-E 解释正则表达式为扩展正则表达式
-i 搜索时忽略大小写
-v 选择没有被匹配到的行
-w 匹配整个单词,即单词的两边是非字符符号(不能是字母数字下划线)
-o 只输出匹配的具体字符串,匹配行的其他内容不会被输出
–color 高亮显示
-A 数字 匹配搜索到的行及该行下面的几行
-B 数字 匹配搜索到的行及该行上面的几行
-C 数字 匹配搜索到的行及该行的上下个几行
例:ps -ef | grep java 查找java相关进程
sort:对文本文件内容进行排序
-n 按照数值进行排序
-r 以相反的顺序排序(默认升序)
-k1 按照分区1 进行排序(同理k2、k3…)
uniq:去重(注意去重规则是前后行进行比较看是否相同,当重复的行不相邻时uniq是不起作用的)
-c 在每列旁边显示该行重复出现的次数
cut:剪切文件中的数据
用法:cut [选项参数] filename (默认分隔符为制表符)
-d 指定分隔符 -f 指定提取切割后的第几列 -c 指定具体字符
例:使用冒号为分割符切开 然后取第6列
cat /etc/passwd | grep hadoop01 | cut -d : -f 6
sed:流编辑器,一次处理一行,并将处理后的数据输出,源文件的内容并不会改变( 加 -i 参数就可以直接对文件进行修改)
用法:sed [选项参数] ‘command’ filename
选项参数:-i 编辑文件 -e 直接在指令列模式上进行sed的动作编辑
command参数: a 在下一行添加 d 删除匹配行 s 替换
#例:在第三行后添加一行 libai
sed '3a libai' hello.txt
#替换匹配到apache改为dog g是全局替换
sed 's/apache/dog/g' /etc/passwd
#直接在文件第三行后添加一行libai 文件内容改变
sed -i '3a libai' hello.txt
#模式匹配以apache开头的行并d删除 /模式匹配/
sed '/^apache/d' /etc/passwd
awk:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理,一行处理完输出一次
用法:awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename pattern模式匹配的模板 action是执行的命令
-F 指定输入行的分割符
#例:一行如果可以匹配多个模式匹配的话,会执行相对应的action
awk '/^apache/{print} /^apache/{print "two"}' /etc/passwd
# 读入文件/etc/passwd的每一行匹配以apache开头的行并以:切分,打印第6段
awk -F : '/^apache/{print $6}' /etc/passwd
# 读入文件/etc/passwd,先定义sum = 0,然后对按:切分的第三段求和,每处理一行输出一次$3" "sum,最后都处理完在输出"sum = "sum
awk -F : 'BEGIN{sum = 0}{sum += $3}{print $3" "sum}END{print "sum = "sum}' /etc/passwd
crontab:定时任务
用法:crontab [-u username] [参数] (省略用户时,表示在当前用户下操作定时任务)
-e 编辑任务 -l 列出任务 -r 删除任务
crontab -e 进入当前用户的定时任务编辑时,每行是一条任务,由 时间 + 命令 组成
时间组成为: 分 时 日 月 周 *表示所有 / 表示每 - 表示范围,从几到几 ,表示散列值
例:* * * * * echo “hello” >> /opt/data/hello.txt 每分钟向/opt/data/hello.txt追加"hello"
0,30 7-11 * * * /bin/bash /opt/data/echo.sh 每天的七点到十一点的第0和第30分 执行echo.sh脚本
* 23-5/1 * * * echo “hello” >> /opt/data/hello.txt 每天的晚上11点到凌晨5点期间,每隔一小时追加hello到hello.txt
netstat:查看网络信息和端口占用情况
使用方式:netstat -tunlp
netstat -anlp
sudo netstat -tunlp | grep mysqld 以进程名或PID来过滤
t 表示通信协议为tcp u 为udp n 以数字显示 a 显示所有连线中的socket l 仅列出在监听listen状态 p 显示哪个进程在调用
nc:网络工具,可以作为server等待连接
用法: nc [参数] [hostname] [port]
nc -lk hadoop01 44444
l 作为server监听等待连接 k 强制nc待命连接;当连接断了之后,nc过一段时间也会停止监听,-k使server保持监听
ps:显示进程信息
ps -ef 显示所有进程信息,连同命令行
top:显示进程信息,显示cpu、内存等信息
top -p 123 显示123进程号的进程信息
free:查看内存使用情况
free -m 以M为单位显示内存信息
df:查看磁盘的使用情况
df -h
找出10天前修改过的文件
find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……-o -mtime 10
统计文件中单词的出现次数
#文件内容
hello world
hello
name hello hello
zhangsan zhang
zhangsan zhangsan
cat wordcount.txt | grep -o -E ‘[a-z]*’ | sort | uniq -c | sort -nr -k1
查询文件 b.txt 中空行所在的行号
awk ‘/^$/{print NR}’ b.txt
Shell脚本里如何检查一个文件是否存在
#!/bin/bash
if [ -e b.txt ]
then
echo "文件存在"
else
echo "文件不存在"
fi
使用grep命令匹配有hello的行及其下面1行内容并显示行号
[hadoop01@hadoop01 shell]$ cat wordcount.txt | grep -A 1 -n 'hello'
1:hello world
2:hello
3:name hello hello
4-zhangsan zhang
此为个人学习笔记,更多知识点细节、参数、使用方式请到网上查找
个人推荐:
https://zhuanlan.zhihu.com/p/74935718
https://blog.csdn.net/xie_qi_chao/article/details/92772171