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
管理员登陆: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
echo $变量名
如果要取消换行可以加入可选项
n
,如:echo -n "abc"
cat 文件路径
:查看文件所有内容tail -200 文件路径
:查看文件末尾200行内容打印当前绝对路径:pwd
打印某个文件的目录路径,相当于移除了文件名:dirname 文件名
切换路径:
cd 绝对路径
。比如切换到root:cd /rootcd 子文件夹名
。比如当前在/root,要进入/root/file,则:cd filecd ..
cd /
:切换到根目录cd .
:切换到当前目录 (.
表示当前目录,但这个命令好像没有太大作用,基本不用)cd
或cd ~
:回到当前用户目录mkdir 文件夹名
mkdir -p 文件夹名
, 比如mkdir aaa/bbb/ccc
> 文件名
touch 文件名
vim 文件名
rm -f 文件名
rm -f 文件名1 文件名2 文件名3
rm -f part*
r
,如:rm -r -f 文件夹名或文件名
rm
命令是remove
的简写,用于删除文件;-r
:是rm命令的可选项,表示递归处理,将指定目录下的所有文件与子目录一并处理;-f
:是rm命令的可选项,表示强制删除文件或目录。
vim 文件路径
(常借用Tab键补全文件名)echo
命令,echo 字符串/文件名
echo '要追加的文字'或文件路径 >> 文件路径
:追加到文件末尾echo 'export SPARK_HOME=/usr/local/spark' >> /etc/profile
echo '要追加的文字'或文件路径 > 文件路径
:覆盖写入mv 原文件名 新文件名
打印当前目录下的所有文件和目录:
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
cp 文件路径 目的路径
cp -r 目录路径 目的路径
文件合并:
>
是覆盖写入
>>
是追加写入
语法: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
对比于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/../../g
(这里的g可以省略,即s/../../
) 是替换,并修改原文件# 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
例子:
# 【模拟替换】全局搜寻inet替换为hhhh,并将替换后的内容输出到屏幕, ip_file文件内容不变
[root@localhost ~]$ sed 's/inet/hhhh/g' ip_file
1: lo: ,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: ,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: ,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: ,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: ,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: ,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: ,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: ,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: ,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: ,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: ,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: ,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
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
使用|
可将多个命令串行执行,示意图如下:
比如:
# 打印spark-shell.sh文件,筛选出前20行显示在屏幕上
cat spark-shell.sh | head -n 20
linux执行任何一个命令,会存在两种种情况:
默认都是将结果输出到屏幕,如果需要将结果写入到文件,而不打印到屏幕上,就需要用到重定向。
语法:
>
表示覆盖写入文件。cat spark-shell.sh rm> temp
>>
表示最加写入文件。eg:``cat spark-shell.sh >> temp
筛选输出:
0>
:只存放成功信息>
或1>
:只存放错误信息,默认是这个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文件中没有内容
用于一次性输入多行代码。
命令 << 自定义结束符
exit
service network restart
reboot
clear
或 按快捷键ctrl + l
kill -p 进程号
【kill命令详细描述】ctrl + shift + v
ctrl + shift + c
source 脚本名
:命令可以使得脚本中定义的变量和函数等在当前shell中保留。sleep
sleep 5 # 暂停5秒
sleep 1m # 暂停1分钟
sleep 2h # 暂停2小时
sleep 3d # 暂停3天
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 # 显示下一年的日期
.tar
文件解压:tar -zxvf 文件路径 [- C 目标路径]
① tar
:用于处理tar文件
② -z
:表示tar文件是用gzip压缩的,所以需要用gzip进行解压。
-c
:压缩文件
③ -x
:解压
④ -v
:这是“verbose”的缩写,表示命令在运行的时候会显示详细信息。
⑤ -f
:这表示后面跟的是要处理的文件名。
# 1. 解压文件
# 将output.tar文件加压到当前目录
tar -zxvf output.tar.gz
# -C 用于改变目的路径
tar -zxvf output.tar.gz -C /path/to/directory
# 2. 压缩文件
tar -zcf output.tar.gz /path/to/your/directory # output.tar.gz是文件名;/path/to/your/directory是要压缩的路径
.rpm
文件安装:
# 默认安装到 /user/local/ 目录下
rpm -ivh 文件路径 (ivh表示带有进度条显示的安装)
# --prefix 将软件包安装到由 指定的路径下,例如到/opt下
rpm -ivh --prefix= /opt 文件路径
软连接/文件快捷方式:ln -s 文件地址 软连接地址
https://cloud.tencent.com/developer/article/1934913
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同步:只复制名称或内容不相同的文件。
- 区别:前者是复制所有文件,所以慢;后者是复制名称或内容不相同的文件,所以快。
- 使用场景:前者用于文件的第一次复制;后者用于文件的后继复制。
jps:目标系统上的Java进程基本信息。 https://www.cnblogs.com/gonggy/p/17892704.html
打开用户目录下的.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 快捷命令