linux相关命令和异常


linux相关问题

不同的子目录不同的含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
不同的子目录具有不同的含义,存放不同类型的文件信息。
bin 存放二进制可执行文件(ls,cat,mkdir等)
boot 存放用于系统引导时使用的各种文件
dev 存放设备文件
etc 存放系统配置文件
home 存放所有用户文件的根目录
lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
proc 虚拟文件系统,存放当前内存的映射
usr 存放系统应用程序,比较重要的目录/usr/local 管理员软件安装目录
var 存放运行时需要改变数据的文件
mnt 挂载目录
sbin 存储管理级别的二进制执行文件
root 超级用户主目录
opt 额外安装的可选应用程序包安装位置

centOS

异常

XXXX is not in the sudoers file. This incident will be reported解决方法

解决方案1

解决方案2

Mandatory arguments to long options are mandatory for short options too.

1
2
3
长选项必须是必须的参数,对于短选项也是必须的。
举例来说,如本例的--mode=MODE中加短选项--m使用--mode
的权限参数,如mkdir-- mode=755 DIRECTORY 或mkdir --mode 755 DIRECTORY,这是长选项,对于短选项-m,其权限参数同样不可省略,如mkidr -m 755 DIRECTORY

Found a swap file by the name “.hello.txt.swp”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost ~]# vi hello.txt
E325: ATTENTION
Found a swap file by the name ".hello.txt.swp"
owned by: root dated: Sun Mar 29 18:14:30 2020
file name: ~root/hello.txt
modified: YES
user name: root host name: localhost.localdomain
process ID: 2158
While opening file "hello.txt"
dated: Sun Mar 29 18:02:43 2020

(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r hello.txt"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".hello.txt.swp"
to avoid this message.
"hello.txt" 6L, 78C
Press ENTER or type command to continue


这一大坨英文的大致意思其实就是之前你没有正确关闭文件,所以产生了临时文件,解决这个问题最直接最暴力的方式就是找到这个临时文件,把它干掉就可以一劳永逸了。
默认和这个原始文件在一个目录下面,只不过它是一个隐藏文件,通过ll命令看不到,这个隐藏文件的后缀名为.swp,我们通过ll -a就可以看到了,找到以后 使用rm删除掉即可。

ttyong is not in the sudoers file. This incident will be reported.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 在root账户条件下
vim /etc/sudoers
# 添加如下之一
ttyong ALL=(ALL) ALL
%ttyong ALL=(ALL) ALL
ttyong ALL=(ALL) NOPASSWD:ALL(出于方便,推荐使用此设置)
%ttyong ALL=(ALL) NOPASSWD:ALL

解释说明:
第一行:允许用户ttyong执行sudo命令(需要输入密码)。
第二行:允许用户组ttyong里面的用户执行sudo命令(需要输入密码)。
第三行:允许用户ttyong执行sudo命令,并且在执行的时候不输入密码。
第四行:允许用户组ttyong里面的用户执行sudo命令,并且在执行的时候不输入密码。

readonly

1
2
3
chmod u+w xxx.txt
或者
vim 退出时 wq!

时间

1
echo `date "+%Y-%m-%d %H:%M:%S"`  #双引号是因为第三个空格;date后面要有空格

使用克隆会话时一定要注意不要同时进行同一个操作

1
2
3
4
在配置hadoop完全分布式部署时,同时scp -rq /data/soft/hadoop-3xxx bigdata02:/data/soft/
scp -rq /data/soft/hadoop-3xxx bigdata03:/data/soft/

最后发现其中一个文件不完整

配置hadoop的五个配置文件时,一定要注意该粘贴到什么位置

1
配置hadoop完全分布式部署时,也是好久才发现问题

命令

基础命令

文件查看
1
2
3
4
5
6
pwd
ls
ll(ls -l的缩写) 列出当前目录下的文件(带文件信息)
ll -a 列出当前目录下的所有文件(包括隐藏文件)
ll --help 查看ls用法,--help是一个帮助命令
ip addr 和ifconfig差不多
创建,重命名文件\文件夹
1
2
3
4
5
6
7
8
9
10
创建文件
vim xxx.txt
touch xxx.txt

创建目录
mkdir abc
mkdir -p abc 存在也不会报错

重命名或移动文件\文件夹
mv 重命名或移动文件\文件夹
链接文件
1
2
3
4
5
6
7
8
linux有两种链接:硬链接、符号(软)链接
软链接功能类似类似于windows的快捷方式,主要用于节省磁盘空间
首先看硬链接:硬链接相当于对原始文件的一个复制,不能对目录使用硬链接。
ln hello.txt hlink
再看符号(软)链接:
如果想使用软连接,需要添加-s,相当于快捷方式,不能删除原文件
命令如下:
ln -s hello.txt vlink
切换目录
1
2
3
4
5
cd .
cd ..
cd ~
cd /
cd directory
删除\文件夹(目录)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  rm命令可以删除文件或者目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉
对于链接文件,只是删除整个链接文件,而原有文件保持不变。
rm 删除文件
删除文件,但是会有提示确认对话,输入y确认删除!
rm -r 删除目录,需要确认
删除目录需要指定r参数,否则会提示不能删除
r是给rm加入递归(recursion)特性,也就是目标为文件夹时删除文件夹下所有数据
rm -f 强制删除
f给rm加入强制(force)特性,也就是遇到删除时不需要询问即可直接删除
注意:这个操作还是比较危险的,建议慎用,因为删除之后就找不到了
Linux系统中没有回收站
rm -rf 递归删除目录及其文件
Linux中最危险的操作,最具破坏性
rf参数可以强制递归删除任何数据,并且没有任何提示,慎用!慎用!慎用!
复制\粘贴\移动
1
2
3
4
5
6
7
8
cp 复制&粘贴文件
cp hello.txt hello-bak.txt
cp -r 复制&粘贴文件或目录 复制目录,需要指定r参数
cp -r abc xyz
mv 移动(剪切)文件或目录
mv xyz abc
移动一个文件夹下的所有
mv xxx/* xxxx/
远程复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

~~~
常见用法:
从本地复制(192.168.182.131)到远程主机 (192.168.182.130)
scp /root/hello.txt 192.168.182.130:/root
提示:
显示进度在scp后添加-v
复制目录在scp后添加-r
静默复制模式在scp后添加-q
scp -rq /root/abc 192.168.182.130:/root
~~~

##### 文件属性

[![7tlJiD.png](https://s4.ax1x.com/2022/01/16/7tlJiD.png)](https://imgtu.com/i/7tlJiD)

~~~
黑带七段
第一段:权限
第一个字符代表文件(-)、目录(d),链接(l)
其余字符每3个一组(rwx),读(r)、写(w)、执行(x)
第一组:文件所有者的权限是读、写和执行
第二组:与文件所有者同一组的用户的权限
第三组:不与文件所有者同组的其他用户的权限
也可用数字表示为:r=4,w=2,x=1,如:权限6可以表示为r+w=6
第二段:目录/链接个数
对于目录文件,表示它的第一级子目录的个数
注意:此处的值要减2才等于该目录下的子目录的实际个数(目录下默认包含.和..这两个目录)
对于其他文件,默认是1
第三段:所属用户
第四段:所属组
第五段:文件大小(字节)
第六段:最后修改时间
第七段:文件\文件夹名称
~~~

##### chmod 分配权限

~~~
常见用法:
chmod u+x xxx.txt 给当前所有者添加执行权限【x表示是执行权限】
针对hello.txt文件,给当前用户添加执行权限
chmod 777 xxx.txt 添加rwxrwxrwx权限
给hello.txt添加777权限
chmod 777 hello.txt
chmod -R 777 xxx 给指定目录递归添加rwxrwxrwx权限
给abc目录及其子目录中的所有内容添加777权限
chmod -R 777 abc
撤销权限
chmod u-w xxx.txt
~~~

##### 内容查看

~~~
1.cat 显示文本内容,类似windows中的type(顺序输出)
cat anaconda-ks.cfg
cat -b 显示行号输出
cat -b anaconda-ks.cfg
2.分屏显示 more
用一次显示一屏,没有显示完时最后一行显示进度。回车显示下一行,按b显示上一页,空格显示下一页,q退出。
根据当前屏幕大小显示一屏内容
more anaconda-ks.cfg
3.tail -f xxx 动态查看信息
tail -n xxx 打印最后n行

tail -F
等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

tail -f
等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
~~~

##### 压缩、解压

~~~
常见用法:压缩和解压
参数:
-z 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-c 创建一个压缩文件的参数指令(create 的意思);
-x 解开一个压缩文件的参数指令!
-v 压缩的过程中显示文件!
-f 使用档案名字,这个参数是最后一个参数,后面只能接档案名!
注意:特别注意,在参数的下达中, c/x 仅能存在一个!不可同时存在!
~~~

**压缩**

~~~
tar -zcvf 打包及压缩(gzip方式)
将abc目录的内容打包压缩为abc.tar.gz
[root@localhost ~]# ll
drwxrwxrwx. 3 root root 17 Mar 29 14:24 abc
[root@localhost ~]# tar -zcvf abc.tar.gz abc
[root@localhost ~]# ll
drwxrwxrwx. 3 root root 17 Mar 29 14:24 abc
-rw-r--r--. 1 root root 130 Mar 29 15:24 abc.tar.gz
~~~

**解压**

~~~
tar -zxvf 解压(gzip包)
tar -zxvf abc.tar.gz


[root@localhost ~]# ll
drwxrwxrwx. 3 root root 17 Mar 29 14:24 abc
-rw-r--r--. 1 root root 130 Mar 29 15:24 abc.tar.gz
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test/
[root@localhost test]# mv ../abc.tar.gz .
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root root 130 Mar 29 15:24 abc.tar.gz
[root@localhost test]# tar -zxvf abc.tar.gz
abc/
abc/xyz/
[root@localhost test]# ll
total 4
drwxrwxrwx. 3 root root 17 Mar 29 14:24 abc
-rw-r--r--. 1 root root 130 Mar 29 15:24 abc.tar.gz
~~~

##### which查找

~~~
which xxxx (应该是去path里查找命令)
~~~

##### find查找文件

~~~
find ./ -name guava*
~~~

##### whereis查找

##### 输出及显示

~~~
echo:将内容输出到设备,类似java里面的system.out.println()
常见用法:
echo "hello\t\t world!" 不解析转义字符
echo -e "hello\t\t world!" 解析转义字符
echo $PATH 输出环境变量
注意:在打印变量信息的时候,使用echo ${PATH} 也可以,效果是一样的

[root@localhost ~]# echo "hello\t\t world!"
hello\t\t world!
[root@localhost ~]# echo -e "hello\t\t world!"
hello world!
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
~~~

##### 软件安装和卸载

```第一种:压缩包安装方式,直接解压,配置相应的环境变量即可使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

yum集成了连接网络,软件安装,删除,更新等功能,yum在配置好repo后,机器只要连网,就能智能化安装软件,使用yum 安装的好处在于可以自动安装软件需要的依赖包

~~~
安装
yum install -y 安装
升级
yum update 不跟则更新全部
查找和显示
yum info 显示包信息
yum list 不跟则显示已安装或可安装包
删除程序
yum remove
清除缓存
yum clean all 清除所有缓存(包含文件、旧软件)
在这里大家先了解yum的基本语法,等后面具体使用到的时候我们再演示。
~~~

##### 查看操作历史

~~~
history保留了最近执行的命令记录,默认可以保留1000。
历史清单从0开始编号到最大值。
常见用法:
history N 显示最近N条命令
history -c 清除所有的历史记录
history -w xxx.txt 保存历史记录到文本xxx.txt
~~~

##### 磁盘使用情况

~~~
使用df命令查看硬盘使用情况

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.2G 16G 7% /
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
~~~

##### 清屏小命令

~~~
[root@localhost ~]# clear
~~~

##### 查看内存使用情况

~~~
free 查看内存和交换空间的使用情况
常见用法:
free -m:显示内存单位为MB
free -h:根据值的大小,显示易于识别的单位


[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1819 169 1509 9 140 1501
Swap: 2047 0 2047
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 169M 1.5G 9.5M 140M 1.5G
Swap: 2.0G 0B 2.0G
~~~

##### 关机重启快捷命令

~~~
shutdown -h now 关机

reboot -h now 重启

exit 退出当前登录状态
~~~

##### 查看linux的存储空间使用情况

~~~
df -h
~~~



#### 高级命令

##### Linux高级命令之文件相关

###### vi文件编辑利器的使用

**基础操作**

```文件不存在时,自动创建一个空文件,也可以用touch
1
2
不可编辑模式
可编辑模式

高级操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1.查找字符串  对文件中字符串的快速查找
vi里的命令模式:/查找内容
有多个结果是n代表下一个查询结果

2.查找某一行内容 已经知道了需要修改的内容在文件的第几行
vi里的命令模式:shift+冒号+具体行号

3.使vi编辑里每行具有行号
shift+冒号+set nu

4.复制粘贴
使用vi命令打开hello.txt,把光标移动到希望复制的那一行内容上面,然后连按yy,这样就把这一行内容复制上了,然后按p就会把刚才复制的内容粘贴到下一行,按一次p粘贴一行,一直按到你喊停为止。
最后按shift和: 输入wq保存退出即可。
多行赋值:nyy

命令行模式下输入
6,9 co 12
复制第6行到第9行之间的内容到第12行后面。

有时候不想费劲看多少行或复制大量行时,可以使用标签来替代
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
然后 :'a,'b co 'c 把 co 改成 m 就成剪切了
要删除多行的话,可以用 :5, 9 de

5.快速删除
到想要删除的那一行内容上面,连按dd,就可以删除当前行的内容。
还有一个大招,如果想要清空当前行下的所有内容,先连按999,然后再连按dd,这样就可以清空光标所在行下的所有内容了。
6.快速跳到文件首行和末行
在命令模式下,通过大写的G可以快速将光标移动到最后一行
在命令模式下输入小写的gg即可快速跳转到第一行
文件内容统计相关命令(wc;sort;uniq;管道;head)
1
2
3
4
5
6
7
8
9
10
11
12
13
1. wc:统计字数相关信息
Usage: wc [OPTION]... [FILE]...

-c, --bytes print the byte counts 字节数(含换行符)
-m, --chars print the character counts 字符数(含换行符)
-l, --lines print the newline counts 行数
--files0-from=F read input from the files specified by
NUL-terminated names in file F;
If F is - then read names from standard input
-L, --max-line-length print the length of the longest line 最长行字符数(不含换行)
-w, --words print the word counts 表示文件中单词的个数,默认使用空白符切割
--help display this help and exit
--version output version information and exit
1
2
3
4
5
2. sort:排序
sort命令是对数据进行排序的,它后面也支持很多个参数,我们在这里只讲三个
-n的意思是按照数据的数值大小排序
这个时候是正序排序,能不能倒序排序呢?当然可以,倒序需要使用-r
单纯使用-r是不行的,需要让n和r同时上场
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost ~]# cat num.txt 
3
2
9
10
1
[root@localhost ~]# sort num.txt
1
10
2
3
9
[root@localhost ~]# sort -n num.txt
1
2
3
9
10
[root@localhost ~]# sort -r num.txt
9
3
2
10
1
[root@localhost ~]# sort -nr num.txt
10
9
3
2
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175

~~~
[root@localhost ~]# cat num2.txt
bc 2
ax 1
aa 9
dd 7
xc 15
[root@localhost ~]# sort -n num2.txt 对第一列字母排序
aa 9
ax 1
bc 2
dd 7
xc 15

在-n的基础上增加-k 这个参数后面需要指定一个数字,这个数字表示是文件中的第几列,编号从1开始
[root@localhost ~]# sort -k 2 -n num2.txt
ax 1
bc 2
dd 7
aa 9
xc 15
~~~



~~~
3. uniq:检查重复的行列
什么参数都不带的
[root@localhost ~]# cat hello.txt
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
[root@localhost ~]# uniq hello.txt 出现一次也是重复一次
hello world!

-c参数,这个参数表示在输出行的前面加上数据在文件中重复出现的次数
[root@localhost ~]# uniq -c hello.txt
6 hello world!

-u参数,表示返回文件中不重复的行
~~~

~~~
我重新创建一个文件,test.txt。我想要对这个文件中的内容进行去重,最后返回hello和abc
[root@localhost ~]# cat test.txt
hello
hello
abc
hello
hello

在这执行uniq test.txt 【对连续相同的数据行进行去重】
[root@localhost ~]# uniq test.txt
hello
abc
hello

最终显示的结果并不是我想要的
目前使用uniq test.txt这个命令最终获取的结果有问题是因为文件中的数据没有排序,相同的数据不是连续在一起的,uniq只能对连续在一起的重复内容进行去重,那我们想要利用这个特性的话就需要先对数据进行排序,再去重
~~~

~~~
4. 管道命令,管道命令很简单,就是一个 |
通过管道可以把前面一个命令的输出结果传递给后面一个命令
[root@localhost ~]# sort test.txt | uniq
abc
hello
~~~

~~~
5. head:取前N条数据,默认返回前10条,后面可以通过指定数字来控制返回的数据条数
head -number xxx

这样是没有什么意义的,我们想取前几条数据其实就是想取topN,这样直接获取的数据是没有排序的,所以可以把sort和head命令放在一块使用
[root@localhost ~]# sort -nr num.txt | head -3
10
9
3

其实我们前面学习的这些命令都可以处理管道传输过来的数据。
例如 cat和sort命令
[root@localhost ~]# cat num.txt | sort -nr
10
9
3
2
1
~~~

##### Linux高级命令之日期相关(date)

~~~
1.date命令默认获取系统当前时间

[root@localhost ~]# date
Sun Mar 29 20:48:15 CST 2026

date命令支持对时间进行格式化
通过%Y,%m,%d这些参数可以对日期进行格式化
date +"%Y-%m-%d %H:%M:%S"
注意:date后面的这些参数中间如果没有空格,可以省略双引号。

[root@localhost ~]# date +"%Y-%m-%d %H:%M:%S"
2026-03-29 21:06:45

2.时间戳
这里面的%s表示获取自1970-01-01 00:00:00以来的秒数
[root@localhost ~]# date +%s
1585487600

虽然date命令没有直接支持获取毫秒数,但是从秒换算为毫秒也很简单啊,最直接粗暴的方式就是在秒数后面加3个0
[root@localhost ~]# date +%s"000"
1585487796000
~~~

~~~
3.获取指定时间的时间戳
date命令 提供的有--date这个参数,可以指定时间
date --date="2026-01-01 00:00:00"

[root@localhost ~]# date --date="2026-01-01 00:00:00"
Wed Jan 1 00:00:00 CST 2026

[root@localhost ~]# date --date="2026-01-01 00:00:00" +%s
1577808000
~~~

~~~
4.获取昨天的日期,这个需求也需要使用--date参数实现
[root@localhost ~]# date --date="1 days ago"
Sat Mar 28 21:36:37 CST 2026

再对返回的结果进行格式化,只获取年月日
date --date="1 days ago" +%Y-%m-%d

[root@localhost ~]# date --date="1 days ago" +%Y-%m-%d
2026-03-28
~~~



##### Linux高级命令之进程相关

###### ps:显示进程信息

~~~
一个典型应用就是在后面跟e和f参数,显示系统内的所有进程
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:46 ? 00:00:01 /usr/lib/systemd/systemd --sw
root 2 0 0 20:46 ? 00:00:00 [kthreadd]
root 4 2 0 20:46 ? 00:00:00 [kworker/0:0H]
........

grep命令以后,就可以把这两个命令组合到一块使用
ps -ef | grep java

这是一个比较常用的操作,过滤出系统内的java进程信息
[root@localhost ~]# ps -ef | grep java
root 2239 1973 0 22:19 pts/0 00:00:00 grep --color=auto java
注意:这里面返回的grep --color=auto这一行信息表示是grep这个命令本身

[root@localhost ~]# ps -ef | grep python
root 736 1 0 20:46 ? 00:00:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
root 1070 1 0 20:46 ? 00:00:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 2241 1973 0 22:19 pts/0 00:00:00 grep --color=auto python
~~~

###### netstat:显示端口信息

```netstat也是显示进程相关信息的,只不过可以比ps命令额外显示端口相关的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
但是这个命令默认是没有安装的,最方便的方式就是使用yum来在线安装
yum install -y net-tools
netstat的常见用法是
netstat -anp

[root@localhost ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1312/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1071/sshd
tcp 0 52 192.168.182.132:22 192.168.182.1:51472 ESTABLISHED 1969/sshd: root@pts
tcp6 0 0 ::1:25 :::* LISTEN 1312/master
tcp6 0 0 :::22 :::* LISTEN 1071/sshd
......
1
2
3
4
5
6
7
8
这里会显示很多的进程和端口信息,netstat也需要和grep命令结合使用
假设我们想看一下ssh服务的端口使用情况,ssh服务的端口是22,如果ssh服务开启了,那么22这个端口就会被监听。
netstat -anp | grep 22

[root@localhost ~]# netstat -anp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1071/sshd
tcp 0 52 192.168.182.132:22 192.168.182.1:51472 ESTABLISHED 1969/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1071/sshd
jps:显示Java进程信息
1
2
3
jps:类似ps命令,不同的是ps是用来显示所有进程信息的,而jps只显示Java进程
准确的说jps是显示当前用户已启动的Java进程信息,信息包括进程号和简短的进程command
注意:jps是Java提供的命令,只有在安装配置好Java环境之后才能使用
1
jps -m 可以显示得更全面些
top:动态监控进程信息
1
2
3
4
  主要作用在于动态显示系统消耗资源最多的进程信息,包含进程ID、内存占用、CPU占用等
和ps命令作用基本相同,唯一的区别是top命令能够动态显示进程信息
注意:这里的CPU使用情况是总体CPU的使用情况,如果是多核CPU,想查看具体每个CPU的使用情况的话可以在监控模式中按键盘上的1,就可以查看每一个CPU的情况了
按q可以退出此监控模式
kill命令
1
2
3
可以使用前面学习的ps命令,找到程序对应的PID,然后使用kill命令杀掉这个进程,进程被杀掉了,对应的程序也就停止了

如果遇到有一些进程使用kill命令杀不掉,那就可以使用kill -9 PID ,这样可以实现强制杀进程。
Linux三剑客
1
这三个命令合称Linux的三剑客,从三剑客这个名字上大家可想而知它们有多厉害,如果把它们的全部内容都讲完的话,至少讲三天三夜,最可怕的是讲了三天三夜,最后你会发现里面很多的知识点是我们搞大数据开发压根用不到的
grep:查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
常用于查找文件里符合条件的字符串
[root@localhost ~]# cat hello.txt
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
abc
[root@localhost ~]# grep abc hello.txt
abc

grep后面跟的这个字符串是可以支持正则表达式的
查询hello.txt中以字母a开头的内容,这样写也是可以的
[root@localhost ~]# grep ^a hello.txt
abc

忽略大小写功能
[root@localhost ~]# grep ABC hello.txt
[root@localhost ~]# grep -i ABC hello.txt
abc

查询出来对应字符串带行号
[root@localhost ~]# grep -i ABC -n hello.txt
7:abc
1
2
3
4
5
6
7
[root@localhost ~]# ps -ef | grep java
root 2497 2247 0 22:34 pts/1 00:00:00 grep --color=auto java

显示出这个信息其实说明没有找到java进程信息,下面返回的这一行表示是grep进程本身,这样容易给我们造成错觉,想把它去掉,怎么去掉呢?

很简单,使用grep加上-v参数再做一次过滤即可,表示忽略包含指定字符串的数据。
[root@localhost ~]# ps -ef | grep java | grep -v grep
sed:编辑

增添数据

1
之前我们修改文件是使用vi命令,大家可以想象一个场景,如果让你同时去修改上千个文件里面的某一行内容,你再使用vi去操作,是不是有点手软,虽然这个上千个文件有点夸张,但是在实际工作中类似这样同时修改10几个文件的场景还是有的,大家不要想着,就10几个文件,我使用vi命令不到10分钟就搞完了,如果你这样想,那就完了,程序员一定要懒,这个懒是指能用程序去做的,千万不要动手。
1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# cat hello.txt 
hello world!
hello world!
abc
[root@localhost ~]# sed '2a\haha' hello.txt (append)
hello world!
hello world!
haha
abc
注意了,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据,最终把缓冲区内的数据输出到控制台
sed '1a\haha' hello.txt 此操作会将数据添加到第一行下面(也就是第二行的位置)
sed '0a\haha' hello.txt 此操作会报错,行号是从1开始的
1
2
3
i的意思表示在指定行的前面插入一行,它的使用方式和参数a一样
我们来演示一下
[root@localhost ~]# sed '1i\haha' hello.txt (insert)
1
2
特殊参数 $ 它在这里表示是最后一行的意思
[root@localhost ~]# sed '$i\haha' hello.txt

删除数据

1
2
[root@localhost ~]# sed '7d' hello.txt  
[root@localhost ~]# sed '$d' hello.txt $参数,删除最后一行,更加便捷

替换数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

~~~
修改一下文件内容中的l这个字符
sed 's/l/a/1' hello.txt
sed后面的参数格式为[address]s/pattern/replacement/flags

address 表示指定要操作的具体行,是一个可选项
s 表示替换操作,pattern 指的是需要替换的内容,replacement 指的是要替换的新内容,flags有多种用法,我们挑两种说一下
第一种就是flags可以表示为1~512之间的任意一个数字,表示指定要替换的字符串在这一行中出现第几次时才进行替换
第二种就是flags可以直接表示为g,这样的意思就是对每一行数据中所有匹配到的内容全部进行替换
如果flags位置的值为空,则只会在第一次匹配成功时做替换操作

sed 's/l/a/1' hello.txt
sed 's/l/a/2' hello.txt
sed 's/l/a/3' hello.txt
sed 's/l/a/g' hello.txt
sed 's/l/a/' hello.txt
上述是每一行只要满足要求,都会替换
~~~

~~~
我们现在的替换操作都是会匹配文件中的所有行,如果我们只想替换指定行中的内容怎么办呢?只需要增加address 参数即可。
sed '2s/l/a/g' hello.txt 对第二行进行这种操作
~~~

~~~
注意了,咱们前面所讲的sed命令的所有操作,在执行之后都不会修改源文件中的内容,这样只能作为测试,如果需要修改源文件的话,其实也很简单,只需要增加一个 -i 参数即可
[root@localhost ~]# sed -i '2s/l/a/g' hello.txt
[root@localhost ~]# cat hello.txt
~~~

```注意:对空文件执行sed 插入没用
awk:分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

~~~
awk的基本格式:awk [option] programe file

这里的option是一个可选项,一般在这里来指定文件中数据的字段分隔符
programe 是具体的处理逻辑
file表示我们要操作的文件

在具体使用awk之前我们还需要掌握awk的一个特性,就是awk在处理文本数据的时候,它会自动给每行中的每个字段分配一个变量

变量从1开始,
$1表示是文本中的第1个数据字段
$2表示是文本中的第2个数据字段
以此类推。
还有一个特殊的 $0 它代表整个文本行的内容
~~~

~~~
[root@localhost ~]# cat hello.txt
hello world!
heaao worad!
hello world!
hello world!
hello world!
hello world!
abc
[root@localhost ~]# awk '{print $1}' hello.txt
hello
heaao
hello
hello
hello
hello
abc
[root@localhost ~]# awk '{print $2}' hello.txt
world!
worad!
world!
world!
world!
world!

[root@localhost ~]# awk '{print $0}' hello.txt
hello world!
heaao worad!
hello world!
hello world!
hello world!
hello world!
abc
~~~

~~~
linux中还有一个文件 /etc/passwd 里面存储的是用户信息
但是这个文件中的字段之间是使用:分割的,这个时候想要操作某列字段的话就需要我们手工指定字段分隔符了。
咱们前面说了,可以在option里面指定字段分隔符,通过-F 参数
awk -F: '{print $1}' /etc/passwd

我们在处理数据的时候还可以对数据进行一些过滤操作,只获取满足条件的数据
在programe中可以使用正则表达式进行过滤,
awk '/world/ {print $1}' hello.txt 这种写法表示对每次读取到的那一行数据进行匹配,然后输出匹配的每行第一个字段
~~~

```如果我们只想对某一列数据进行匹配呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
awk '($1 ~ /world/) {print $1}' hello.txt 在这里面可以通过$来指定具体是哪一列,需要把具体的对比逻辑放到小括号里面

[root@localhost ~]# awk '($1 ~ /world/) {print $0}' hello.txt
[root@localhost ~]# awk '($2 ~ /world/) {print $0}' hello.txt
hello world!
hello world!
hello world!
hello world!
hello world!

[root@localhost ~]# awk '($2 ~ /wor[a-z]d/) {print $1}' hello.txt
hello world!
heaao worad!
hello world!
hello world!
hello world!
hello world!
注意:这里如果是不匹配的意思的话需要使用 !~

ok,针对awk的使用我们暂时先掌握这些就可以了
拼成一行

image-20230503171756213

三剑客配合使用
1
2
grep -n 查找内容 /etc/sudoers 查找内容,以行号方式输出
sed '行号a\插入内容' -i /etc/sudoers

Linux命令积累

1
nc -l 9000 开启一个socket,可以想这个端口里输入数据
1
export HADOOP_CLASSPATH=`${HADOOP_HOME}/bin/hadoop classpath`
1
jps -ml 进程信息显示得更全面
1
ll比ls显示得更全面
1
head -1 xxx.log

shell脚本写法积累

循环

1
2
3
4
5
6
7
for i in 0 1 2 x x x x
do
for j in 1 2 3 4 5 x x x x
do
echo follower_${i}${j}
done
done

shell里有mysql

1
mysql -uxx -pxx -h xx -e "sql"

if条件

1
2
3
4
5
6
if [ "X$1" == "X" ] // 注意括号内空格
then
yesterday=`date --date="1 days ago" +%Y-%m-%d`
else
yesterday=$1
fi

变量在双引号内

1
"xxxx'${yesterday}'xxx" 变量在双引号内,且在单引号内可以解析

将变量中的-去掉

1
xx/xx/${yesterday}//-/ 将变量中的-去掉

maven项目pom编写经验积累

父项目和子项目pom

1
2
3
1.父项目和子项目pom
父项目可以将公共依赖配置好(如版本),子项目直接复制(不用写版本信息)
打包配置写在子项目里

依赖的依赖

1
在pom里的依赖,通过ctrl+点击 可以查看这个依赖依赖谁(有时排查错误时,会用到)

循环生成以逗号相隔的路径

1
2
3
4
5
file=""
for (i=1;i<=30;i++)
do
file+= $i,
done
1
2
3
4
5
6
# 获取最近一个月的文件目录
filepath=""
for((i=1;i<=30;i++))
do
filepath+="hdfs://bigdata01:9000/data/video_info/"`date -d "$i days ago" +"%Y%m%d"`, // 这里的,号很经典
done

ubuntu

异常

命令

不同VMware版本

VMware workstation 15 player

VMware workstation 15 player没有克隆虚拟机的功能,解决办法?

1
VMware workstation有此功能

方法url1

方法url2

VMware workstation


本文标题:linux相关命令和异常

文章作者:TTYONG

发布时间:2020年05月24日 - 17:05

最后更新:2023年05月03日 - 17:05

原始链接:http://tianyong.fun/linux%E7%9B%B8%E5%85%B3%E5%91%BD%E4%BB%A4%E5%92%8C%E5%BC%82%E5%B8%B8.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%