文章目录
0. 特别说明
Tab键能将命令自动补全
命令过长,若要换行,可以输入
\
查看命令帮助:
命令 --help
命令的多个可选项可以分开,也可以放在一起。
\
可选项可以合在一起,也可以分开。比如
rm -r -f /a.sh
可简写为rm -rf /a.sh
当路径中存在通配符时:不要用引号(单引号、双引号),否则会报错,因为在引号里面通配符会被当做是字符。
mypath=./local_tds_operator # 1. 正确 ls -l $mypath/*/*/bin # 2. 错误 (1) 双引号 ls -l "$mypath/*/*/bin" echo "$mypath/*/*/bin" # 输出:./local_tds_operator/*/*/bin (2) 单引号 ls -l '$mypath/\*/\*/bin' echo '$mypath/\*/\*/bin' # 输出:$mypath/\*/\*/bin
如果在shell脚本执行另一个shell脚本必须进行正确性判断,判断该脚本是否执行成功。
# 第一种:适合执行失败就直接退出的场景 sh run.sh || exit 1 # 第二种:适合执行失败后还需要进行一系列逻辑处理的场景 sh run.sh if [ $? == 0 ]; then echo "ok" else echo "fail" fi
1. 权限相关
-
管理员登陆:
su root
-
sudo 具体命令
:给用户配置管理员权限后,再配合sudo
指令,用户就可以使用管理员权限运行此指令。比如:sudo reboot
-
chown
:修改组权限 https://blog.csdn.net/qq_27870421/article/details/92823275 -
chmod
:更改用户对文件的权限- 修改权限位:
chmod 权限位 文件路径
第一个字符表示的是文件的类型,后面的 9 个字符,3个 3个 为一组,从左向右 分别表示的是 拥有者 所属组 其他人
- 一次只添加一种权限:
chmod a+w 文件名
其中a是所有人,+表示添加,w是可写入权限#! /bin/bash chmod a+x spark-shell.sh # 为所有用户添加spark-shell.sh文件的可执行权限,权限位变成 --x --x --x chmod +x spark-shell.sh # 为当前用户添加spark-shell.sh文件的可执行权限,权限位变成 --x --- ---
- 修改权限位:
-
查看当前用户:
who
或w
-
查看所有用户:
ls /home
-
增/删用户:Linux创建新用户
-
切换用户:https://blog.csdn.net/liu_chen_yang/article/details/123630099
2. 打印相关
- 打印该变量的值或打印某段话:
echo $变量名
如果要取消换行可以加入可选项
n
,如:echo -n "abc"
- 打印文件内容:
cat 文件路径
:查看文件所有内容tail -200 文件路径
:查看文件末尾200行内容
3. 路径相关
-
打印当前绝对路径:
pwd
-
打印某个文件的目录路径,相当于移除了文件名:
dirname 文件名
-
切换路径:
-
切换到任意路径:
cd 绝对路径
。比如切换到root:cd /root -
进入子文件夹:
cd 子文件夹名
。比如当前在/root,要进入/root/file,则:cd file -
返回到上个文件夹:
cd ..
,对于文件中运行该命令也是返回父文件夹。
-
cd /
:切换到根目录 -
cd .
:切换到当前目录 (.
表示当前目录,但这个命令好像没有太大作用,基本不用) -
cd
或cd ~
:回到当前用户目录
-
4. 文件相关
4.1 文件增加
- 创建文件夹:
- 不嵌套创建:
mkdir 文件夹名
- 嵌套创建:
mkdir -p 文件夹名
, 比如mkdir aaa/bbb/ccc
- 不嵌套创建:
- 创建文件:详细情况
> 文件名
touch 文件名
vim 文件名
4.2 文件删除
- 删除当前目录
- 单个删除:
rm -f 文件名
- 多个文件:
rm -f 文件名1 文件名2 文件名3
- 配合正则表达式批量删除文件:
rm -f part*
- 单个删除:
- 删除当前目录以及子文/目录:在上面的基础上加上可选项
r
,如:rm -r -f 文件夹名或文件名
rm
命令是remove
的简写,用于删除文件;-r
:是rm命令的可选项,表示递归处理,将指定目录下的所有文件与子目录一并处理;-f
:是rm命令的可选项,表示强制删除文件或目录。
4.3 文件修改
- 修改文件内容
- 方式一:
vim 文件路径
(常借用Tab键补全文件名) - 方式二:使用
echo
命令,echo 字符串/文件名
echo '要追加的文字'或文件路径 >> 文件路径
:追加到文件末尾echo 'export SPARK_HOME=/usr/local/spark' >> /etc/profile
echo '要追加的文字'或文件路径 > 文件路径
:覆盖写入
- 方式一:
- 修改文件名:
mv 原文件名 新文件名
4.4 文件查看
-
打印当前目录下的所有文件和目录:
- 命令:
ls [-选项] [相对或绝对路径]
:看文件简要信息- 查看文件类型
ls -l
- 查看文件类型
ll [-选项] [相对或绝对路径]
:看文件详细信息 点击见详情
- 选项:
-a
:可以显示所有文件包括隐藏文件-h
:已适当单位显示文件大小,默认是单位是B
- 命令:
-
在某个路径下递归查找某个文件/目录:
- 命令:
find 路径 选项
- 可选项:
-name 文件名
:根据文件名查找注意:这里的文件名可以用正则表达式
-type f|d
:根据文件类型查找,f
表示普通文件,d
表示文件夹
- 命令:
-
查看文件个数:
ll | grep '^-' | wc -l
-
打印文件内容:
- 小文件:
cat 文件路径
:不显示行号
cat -n 文件路径
:显示行号head -n 数字 文件路径
、tail -n 数字 文件路径
:查看前n行,后n行
tail -f 文件路径
:动态打印文件内容,在查看动态生成的日志时非常有用
- 大文件:
less
,需要yum intsall less
,且不常用,不介绍。 more
:命令允许用户逐页查看内容,这对于阅读大型文件特别有用。常结合上面的指令使用。
# 例子 cat filename | more
- 小文件:
-
查看文件的行数:
-l
选项表示"lines",即行数,而filename
则是你要检查的文件的名字。wc -l filename #
4.5 文件复制
- 复制文件:
cp 文件路径 目的路径
- 复制整个目录以及子文件/目录:
cp -r 目录路径 目的路径
4.6 文件合并
文件合并:
>
是覆盖写入
>>
是追加写入
5. 内容筛选(三剑客)
5.1 筛选行:grep
-
语法:
grep [选项] '搜寻字符串' 文件名
注意:是以行为单位进行查找,并能跨行查找
-
说明:
- 可选项说明
-i
:不区分大小写-v
:反向选择,当前的结构取反-n
:顺便输出行号
-E
:要搜寻的字符串可以使用可扩展的正则表达式-r
:递归查询,如果当前为文件夹,则会在该文件夹下的所有文件中查找
- 搜寻字符串说明:默认就可以使用正则表达式
^a
:依次查找所有行,返回以 a开头 的行a$
:依次查找所有行,返回以 a结尾 的行[abc]
或者[a-c]
:原子匹配字符.
:除\n
、\r
的单个字符*
:0个1个或多个字符+
:1个或多个字符
- 可选项说明
-
例子:
# 创建grepf1文件, 内容如下 [root@localhost ~]# vim grepf1 aabbccaa ddaamm bbddee hello world one world one dream # 筛选带有aa的行 [root@localhost ~]$ grep aa grepf1 aabbccaa ddaamm # 筛选不带有aa的行 [root@localhost ~]$ grep -v aa grepf1 bbddee hello world one world one dream # 筛选以a开头的行 [root@localhost ~]$ grep ^a grepf1 aabbccaa # 筛选以a结尾的行 [root@localhost ~]$ grep a$ grepf1 aabbccaa # 筛选a-c范围的行 [root@localhost ~]$ grep [a-c] grepf1 aabbccaa ddaamm bbddee one dream [root@localhost ~]$ grep a.b grepf1 aabbccaa [root@localhost ~]$ grep ab. grepf1 aabbccaa [root@localhost ~]$ grep a*b grepf1 aabbccaa bbddee [root@localhost ~]$ grep ab* grepf1 aabbccaa ddaamm one dream
5.2 切分并筛选列:awk
5.3 筛选|删除|替换:sed
对比于grep
的筛选行,sed的筛选不支持正在表达式,主要用来进行字符串替换。
-
语法:
- 从文件中查找内容:
/../p
是查找# 1. 第N行匹配,此行匹配到字符串,则输出此行 sed -n 'Np' 文件名 # 2. 第N1到N2逐行匹配,此行匹配到字符串,则输出此行 sed -n 'N1,N2p' 文件名 # 3. 逐行匹配,此行匹配到字符串,则进行字符串替换,再输出替换后的行 sed -n '/sss/p' 文件名
- 从文件中删除行:
/../d
# 逐行匹配,此行匹配到字符串,则删除此行 sed '/sss/d' 文件名
- 从文件中查找并替换,并修改原文件:
s/../../
或s/../../g
(没有g表示只对符合要求的第一个进行替换,有g表对所以符合的都替换)# 1. 逐行匹配,将此行中匹配到的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容) sed 's/搜寻的字符串/替换的字符串/g' 文件名 # 2. 从N1到N2行中,逐行匹配,将此行中匹配到的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容) sed 'N1,N2 s/搜寻的字符串/替换的字符串/g' 文件名 # 3. 加上-i参数,代表对原文件生效 sed -i 's/搜寻的字符串/替换的字符串/g' 文件名 sed -i 'N1,N2 s/搜寻的字符串/替换的字符串/g' 文件名
注意:
tr
也可以用于替换,但是只能用于字符替换。echo 'aaa bbb' | tr ' ' '\n' # 输出: aaa bbb
- 如果要替换的内容有
/
,那么可使用|
替换原本的/
# 比如这里要将 /bin 替换为 空 opertor_paths=$(ls -d ./local_tds_operator/*/*/bin | tr ' ' '\n' | grep "/bin" | sed 's|/bin||')
- 从文件中查找内容:
-
例子:
# 【模拟替换】全局搜寻inet替换为hhhh,并将替换后的内容输出到屏幕, ip_file文件内容不变 [root@localhost ~]$ sed 's/inet/hhhh/g' ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 hhhh 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever hhhh6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]$ # ip_file文件内容不变 [root@localhost ~]$ cat ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff inet 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever # 【真正替换】 ip_file文件内容改变 [root@localhost ~]$ sed -i 's/inet/hhhh/g' ip_file [root@localhost ~]$ cat ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 hhhh 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever hhhh6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever # 【模拟替换】 搜寻1到2行中link替换为mmmm,并将替换后的内容输出到屏幕 [root@localhost ~]$ sed '1,2 s/link/mmmm/g' ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 mmmm/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 hhhh 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever hhhh6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever # 文件并没有改变 [root@localhost ~]$ cat ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 hhhh 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever hhhh6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever # 【真正替换】 文件内容改变,但也只改变强两行符合条件的数据 [root@localhost ~]$ sed -i '1,2 s/link/mmmm/g' ip_file [root@localhost ~]$ cat ip_file 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 mmmm/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 hhhh 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever hhhh6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever
6. 计算相关
- 统计命令:
wc 选项 文件名
- 选项:
-l
:计算行数。例如,wc -l file.txt
会输出file.txt中的行数。-w
:计算单词数。例如,wc -w file.txt
会输出file.txt中的单词数。-c
:计算字节(byte)数。例如,wc -c file.txt
会输出file.txt中的字节数。-m
:计算字符数。例如,wc -m file.txt
会输出file.txt中的字符数。
- 不带选项:会输出行数、单词数、字节数
echo -e "hello world\nhow are you" | wc # 输出: 2 5 24
- 一些案例
- 计算当前目录的子目录数量:
ls -l | grep "^d" | wc -l
- 计算当前目录和所有子目录的目录数量:
find . -type d | wc -l
- 计算当前目录的子目录数量:
- 选项:
6. 管道符号
使用|
可将多个命令串行执行,示意图如下:
比如:
# 打印spark-shell.sh文件,筛选出前20行显示在屏幕上
cat spark-shell.sh | head -n 20
7. 输入输出重定向
在Linux和其他Unix-like系统中,有三种基本的文件描述符:stdin(标准输入),stdout(标准输出)和stderr(标准错误)。
- stdin(文件描述符为0):这是程序读取输入的地方。默认情况下,这是你的键盘。
- stdout(文件描述符为1):这是程序写入输出的地方。默认情况下,这是你的终端或屏幕。大多数程序的输出都写入stdout。比如,当你运行ls命令时,所有的目录和文件列表都输出到stdout。
- stderr(文件描述符为2):这是程序写入错误消息的地方。默认情况下,这也是你的终端或屏幕。当程序不能正常工作时,它会把错误消息写入stderr。这样,即使stdout被重定向到其他地
7.1 输出重定向
linux执行任何一个命令,会存在两种种情况:
- 执行成功了,会把成功结果输出到屏幕。
- 命令执行有错误,会把错误也输出到屏幕上面。
默认都是将结果输出到屏幕,也就是默认 采用stdout(文件描述符为1)。如果需要将结果写入到文件,而不打印到屏幕上,就需要用到重定向。
-
重定向语法:
>
表示覆盖写入文件。cat spark-shell.sh > temp
>>
表示最加写入文件。cat spark-shell.sh >> temp
-
筛选输出:
-
>
或1>
(>表示输出,默认是1):正确信息重定向。 -
2>
:修改错误信息重定向。 -
在命令最后加上
2>&1
:错误信息和成功信息一起重定向
# 将错误信息存放到日志中 ls zhangsan wangwu 0> log # 将正确信息存放到日志中 ls zhangsan wangwu > log # 将错误和正确信息全部存放到日志中 ls zhangsan wangwu > log 2>&1
-
-
无底洞:如果执行结果不需要写入到日志,也不需要打印到屏幕时,可以写入到
/dev/null
echo "aaaa" > /dev/null cat /dev/null # 会发现null文件中没有内容
7.2 输入重定向
- 使用
<
或0<
符号可以完成输入重定向,它俩是等价的。例子:- 从键盘文件读取什么,就向显示器文件写入什么
- 将创建文件,并输入文件内容,同时将文件内容作为输入
- 从键盘文件读取什么,就向显示器文件写入什么
- 语法:
命令 << 自定义结束符
。例子:- 例子1:输入数据,以aaa结束输入,然后将输入数据打印
- 例子2:输入数据,以aaa结束输入,然后将输入数据输出到log文件中
- 例子1:输入数据,以aaa结束输入,然后将输入数据打印
8. 系统操作
- 退出当前执行:
exit 数字
①exit 0
表示执行成功
②exit 非数字0
表示执行失败 - 重启:
- 重启网络:
service network restart
- 主机重启:
reboot
- 重启网络:
- 清屏:
clear
或 按快捷键ctrl + l
- 结束进程:
kill -p 进程号
【kill命令详细描述】 - 将windows下复制的内容粘贴到CentOS系统的终端中:
ctrl + shift + v
- 复制CentOS系统的终端中的内容:
ctrl + shift + c
source 脚本名
:命令可以使得脚本中定义的变量和函数等在当前shell中保留。- 程序休眠:
sleep
sleep 5 # 暂停5秒 sleep 1m # 暂停1分钟 sleep 2h # 暂停2小时 sleep 3d # 暂停3天
wait
命令:等待命令执行完毕,返回命令执行状态。如果有多个命令,则返回最后一个命令的状态。- 提供进程ID,则只会等待所给的进程ID
#!/bin/bash command1 & pid1=$! command2 & pid2=$! wait $pid1 echo "Command1 has finished" wait $pid2 echo "Command2 has finished"
- 不提供进程ID,则等待
wait
命令之前的所有命令执行完毕。#!/bin/bash command1 & command2 & wait echo "All commands have finished"
- 提供进程ID,则只会等待所给的进程ID
9. 日期命令
- 语法:
date 选项 时间格式
- 选项
-d 字符串
:将字符串按照指定时间输出。字符串前后必须加上双引号。[wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date -d "2012-11-20 14:21:31" +"%Y/%m/%d %H:%M.%S" 2012/11/20 14:21.31
-s 字符串
:根据字符串来设置当前时间。字符串前后必须加上双引号。只有root权限才能设置,其他只能查看date -s "2012-05-23 01:01:01"
- 时间格式:
+"格式化字符"
,将时间以指定格式显示。常见date +"%Y%m%d"
-
格式化字符
%% 输出字符 % %a 星期几的缩写 (Sun..Sat) %A 星期的完整名称(Sunday..Saturday)。 %b 缩写的月份名称(例如,Jan) %B 完整的月份名称(例如,January) %c 本地日期和时间(例如,Thu Mar 3 23:05:25 2005) %C 世纪,和%Y类似,但是省略后两位(例如,20) %d 日 (01..31) %D 日期,等价于%m/%d/%y %e 一月中的一天,格式使用空格填充,等价于%_d %F 完整的日期;等价于 %Y-%m-%d %g ISO 标准计数周的年份的最后两位数字 %G ISO 标准计数周的年份,通常只对%V有用 %h 等价于 %b %H 小时 (00..23) %I 小时 (01..12) %j 一年中的第几天 (001..366) %k 小时,使用空格填充 ( 0..23); 等价于 %_H %l 小时, 使用空格填充 ( 1..12); 等价于 %_I %m 月份 (01..12) %M 分钟 (00..59) %n 新的一行,换行符 %N 纳秒 (000000000..999999999) %p 用于表示当地的AM或PM,如果未知则为空白 %P 类似 %p, 但是是小写的 %r 本地的 12 小时制时间(例如 11:11:04 PM) %R 24 小时制 的小时与分钟; 等价于 %H:%M %s 自 1970-01-01 00:00:00 UTC 到现在的秒数 %S 秒 (00..60) %t 插入水平制表符 tab %T 时间; 等价于 %H:%M:%S %u 一周中的一天 (1..7); 1 表示星期一 %U 一年中的第几周,周日作为一周的起始 (00..53) %V ISO 标准计数周,该方法将周一作为一周的起始 (01..53) %w 一周中的一天(0..6),0代表星期天 %W 一年中的第几周,周一作为一周的起始(00..53) %x 本地的日期格式(例如,12/31/99) %X 本地的日期格式(例如,23:13:48) %y 年份后两位数字 (00..99) %Y 年 %z +hhmm 格式的数值化时区格式(例如,-0400) %:z +hh:mm 格式的数值化时区格式(例如,-04:00) %::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00) %:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30) %Z 时区缩写 (如 EDT)
-
案例:
# 默认格式 [wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date Wed Aug 7 15:01:30 CST 2024 # 指定格式 (当前日期) [wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date +"%Y%m%d" 20240807
-
- 日期加减
# 当前日期加减 date -d "+1 day" +%Y%m%d # 显示后一天的日期 date -d "-1 day" +%Y%m%d # 显示前一天的日期 date -d "-1 month" +%Y%m%d # 显示上一月的日期 date -d "+1 month" +%Y%m%d # 显示下一月的日期 date -d "-1 year" +%Y%m%d # 显示前一年的日期 date -d "+1 year" +%Y%m%d # 显示下一年的日期 # 2. 指定日期加减 date -d "2024-05-16 +1 day" +"%Y%m%d" # 显示后一天的日期 date -d "2024-05-16 -1 day" +%Y%m%d # 显示前一天的日期 date -d "2024-05-16 -1 month" +%Y%m%d # 显示上一月的日期 date -d "2024-05-16 +1 month" +%Y%m%d # 显示下一月的日期 date -d "2024-05-16 -1 year" +%Y%m%d # 显示前一年的日期 date -d "2024-05-16 +1 year" +%Y%m%d # 显示下一年的日期
5. 压缩/解压/安装
-
.tar
文件解压/打包:tar -zxvf 文件路径 [- C 目标路径]
①tar
:用于处理tar文件
②-z
:表示tar文件是用gzip压缩的,所以需要用gzip进行解压。
-c
:压缩文件
③-x
:解压
④-v
:这是“verbose”的缩写,表示命令在运行的时候会显示详细信息。
⑤-f
:这表示后面跟的是要处理的文件名。
⑥--exclude
:打包时,将指定文件排除在外。# 1. 解压文件 # 将output.tar文件加压到当前目录 tar -zxvf output.tar.gz # -C 表示使用临时目录,可将包解压到/path/to/directory目录下 tar -zxvf output.tar.gz -C /path/to/directory # 2. 压缩文件 # 将/path/to/your/directory目录,以及/path/to/your/directory下的所有文件一起打包,打包后名称为output.tar.gz tar -zcf output.tar.gz /path/to/your/directory # -C 表示使用临时目录,可临时切换到目录,只打包/path/to/your/directory下的文件,避免将/path/to/your/directory目录打包进去 tar -zcf output.tar.gz -C /path/to/your/directory . # 3. --exclude案例 tar -C $path -zcf $file_name.tar.gz --exclude=build.sh .
细节:
- 问:tar可以同时打包多个路径
tar -zcvf archive_name.tar /path/to/directory1 /path/to/directory2 /path/to/directory3
,但是由于打包会将层级打包进去,而一条命令只能使用一次-C
。所以多路径打包,会存在路径问题。如何解决? - 可以使用
cp -r 原文件路径 目的文件路径
命令将剩余的n-1个文件夹的内容复制到某一个文件夹,然后对该文件夹进行打包。
- 问:tar可以同时打包多个路径
-
.jar
文件打包/解压:# 1. 解压 # 如果没有 unzip 命令,则需要先安装 sudo apt-get install unzip # 对文件进行解压:将file.jar文件解压到/path/to/directory目录下 unzip file.jar -d /path/to/directory # 2. 打成jar包:将/path/to/files目录下的文件打包为file.jar jar cf file.jar /path/to/files
-
.rpm
文件安装:# 默认安装到 /user/local/ 目录下 rpm -ivh 文件路径 其中(-i表示安装,-v表示详细输出,-h表示显示进度) # --prefix 将软件包安装到由 指定的路径下,例如到/opt下 rpm -ivh --prefix=/opt 文件路径
6. 软连接
软连接/文件快捷方式:ln -s 文件地址 软连接地址
https://cloud.tencent.com/developer/article/1934913
7. 可选参数
-C
:用于使用该命令使,临时改变当前目录。等价于临时cd 目的目录
处理完后,再回到原始目录。这在执行某些命令时非常有用的,例如在复制、移动文件或在不同的目录中执行脚本时。注意:不是所有的 Linux 命令都接受 -C 选项,所以最好查阅该命令的 man 页面或帮助文档以确认其用法。
8. 查看环境变量的命令
-
which
:查看环境变量的值。不能使用echo
,这个命令只能查看变量的值。which hadoop which echo
8. 跨服务器
- 服务器间的文件复制:
-
scp复制:复制所有文件
scp -r /opt/module/jdk1.8.0_212/ hao@hadoop103:/opt/module/ # 也可以在hadoop103上使用scp从hadoop102上拉取,比如: scp -r hao@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
-
rsync同步:只复制名称或内容不相同的文件。
- 区别:前者是复制所有文件,所以慢;后者是复制名称或内容不相同的文件,所以快。
- 使用场景:前者用于文件的第一次复制;后者用于文件的后继复制。
-
9. JDK特有
jps:目标系统上的Java进程基本信息。 https://www.cnblogs.com/gonggy/p/17892704.html
10. 创建快捷命令
-
打开用户目录下的
.bashrc
文件:vim ~/.bashrc
注意:
.bashrc
文件是一个存在于用户主目录的隐藏文件,当你启动一个新的bash shell(即打开一个新的终端窗口)时,它会被自动执行。- 如果需要临时设置快捷命令或环境变量,可以在任意地方创建一个任意名称的脚本,编写完毕之后,
source
该文件。
这个环境变量只对当前的 shell 会话有效,如果你打开一个新的终端窗口或者启动一个新的 shell 会话,那么这个环境变量将不再存在。因此,如果你希望一个环境变量在每次 shell 会话中都可用,你应该将相关的 export 命令添加到你的~/.bashrc
或者~/.bash_profile
文件中。 .bash_profile
和.bashrc
都是 Bash shell 启动时会读取的配置文件,但它们的使用场景有所不同。.bash_profile
:当你登录系统或者启动一个登录 shell(例如新的终端会话)时,Bash 会读取这个文件。这个文件通常用于执行一次性的任务(例如设置环境变量、运行脚本等),以及启动其他的 shell。.bashrc
:当你在当前会话中启动一个新的 Bash 实例(例如新的子 shell 或者新的脚本)时,Bash 会读取这个文件。这个文件通常用于包含在每个子 shell 中都需要的命令,例如别名和函数。
-
创建快捷命令:
alias 快捷命令='具体的命令'
-
让文件生效
source ~/.bashrc
-
使用
which 快捷命令
xx 使用tree展示目录结构
-
没有任何参数直接使用tree则展示目录下所有子目录和文件
tree /proc/self/
-
-d
参数则只展示目录tree -d /proc/self/
-
-L
参数可以指定最大递归层数tree -L 2 -d /proc/self/
-
-F
参数可以在目录和文件上添加一些有用的标识tree -F /proc/self/
具体
-F
做了如下标记:Append a `/' for directories, a `=' for socket files, a `*' for executable files, a `>' for doors (Solaris) and a `|' for FIFO's, as per ls -F