一、导学
掌握Linux命令是高级Java工程师必备的技能之一,但并不是每个人都能完全掌握,绝大部分Java初中级工程师只知道少数的cd/ls/mkdir/rm等非常简单的命令,但是只会这些命令是完全不够的,如果想要提升技术壁垒,晋升成为大牛程序员,掌握最实用的Linux命令是不可或缺的。文本作者结合多年企业开发经验,将最实用的Linux命令进行了清晰的分类,逐条罗列,对照反复练习即可快速掌握。熟练使用文本提到的命令能有效提升运维技能并帮助各位提高工作效率。
提示:
- 操作系统:CentOS
- 适合对象:使用过Linux的人群
- 本文命令:多以示例命令为主,要学会举一反三
二、安装服务命令
在日常开发和部署的工作中,安装服务是非常常见的操作,一般来说当我们执行某个命令提示不存在命令时,都需要进行服务安装,一般安装命令有2种:在线安装和离线安装。对比来说,如果网速还不错的话,推荐使用在线安装更加方便。
1. 在线安装
yum install -y vim
示例含义:在线安装vim服务
注意:如果要加速yum在线下载需要修改yum源为国内源
2. 离线安装
rpm -ivh tomcat.rpm
示例含义:离线安装tomcat服务
注意:rpm文件安装包需要上传到服务器上,再执行安装命令
三、文件操作命令
文件操作命令是Linux中使用最为频繁的命令,众多命令中还包含非常出名的Linux三剑客grep、awk、sed,在文中也有介绍。
1. 创建文件
创建方式1:touch命令直接创建
yacas touch abc.txt
创建方式2:vi命令修改后保存
yacas vi abc.txt
- 然后保存
创建方式3:echo命令输出写入文件
yacas echo hello > abc.txt
2. 编辑文件
yacas vi abc.txt
yacas vim abc.txt
3. vi或vim内查找关键词
用法:vi或vim打开文件后(不要进入到编辑模式)输入英文的?或/,后面跟上要搜索的关键词即可
yacas ?hello
- 然后按住n健查找下一个,按N健查找上一个
yacas /hello
- 然后按住n健查找下一个,按N健查找上一个
4. 命令光标的移动
这个命令非常实用,有时候当我们输入一段比较长的命令时,光标已经到最后了,但发现前面的命令写错了,一般的做法是按照向左箭头按键一直往左移动光标,改完由按向右监听按键一直向右移动光标,这个效率太慢了,以下快捷键能快速解决这个问题,能直接达到命令最前面和最后面。
- 移动到命令最前:按住快捷键 ctrl +a
- 移动到命令最后:按住快捷键 ctrl+e
5. vi或vim设置或取消行号
vi或vim打开文件后,根据要求分别输入如下命令(不要进入到编辑模式)
- 设置行号
shell :set nu
- 取消行号
shell :set nonu
6. vi或vim 调到末行及首行
vi编辑文件时,如果内容太长,想要快速将光标跳转到文件头部或尾部,使用下面按键
- 跳转末行 ,按住 G健
- 跳转首行 ,按住 g健
7. vim或vim删除行
不进入编辑模式,在要删除的行敲击 dd
8. vi或vim复制行
不进入编辑模式,在要删除的行敲击 4 yy,标识从当前行开始复制4行,再移动光标到指定位置按p键粘贴
9. 不编辑查看文件全部内容
cat abc.txt
10. 不编辑查找文件内容
- 方式1
shell grep "heima" abc.txt
- 方式2
shell cat abc.txt |grep "heima"
这里用到了Linux三剑客之一的筛选命令grep,主要用于筛选文本
10. 统计某个关键字在文件中出现的次数
- 方式1
shell grep "heima" abc.txt |wc -l
- 方式2
shell grep "heima" abc.txt |wc -l
11. 查看文件首行或尾行
- 查看前3行
shell head -3 abc.txt
- 查看尾3行
shell tail -3 abc.txt
- 查看尾实时输出的3行日志
shell tail -3f abc.txt
12. 替换文件内某个关键字
sed作为Linux三剑客之一,是使用的最流行的替换命令,主要用于替换本文中的内容
sed -i s/heima/itcast/g abc.txt
示例含义:替换abc.txt文件内所有heima为itcast
13. 重命名文件
- 方式1
shell mv abc.txt bcd.txt
- 方式2
shell rename abc bcd abc.txt
14. 输出格式固定的文件中第几行第几列数据
awk作为Linux三剑客之一,主要用于输出固定格式文件的内容
假设文本文件内每行数据的格式如: 姓名,年龄,城市,注意分隔符是逗号
- 输出每一行
shell awk '{print;}' aaa.txt
- 输出第三列所有值
shell awk -F ',' '{print $3}' aaa.txt
-F后紧跟的是每行内容的分割符号
- 输出倒数第2列的值
shell awk -F ',' '{print $(NF-1)}' aaa.txt
- 输出前2行的第2列的值
shell awk -F ',' '{print $2}' aaa.txt|head -2
15. 根据名称查找某目录下的文件
find test/ -name abc*
示例含义:查找test目录下,所以文件名包含abc的文件
16. 查找文件并删除
find test/ -name "abc*" | xargs rm -rf
示例含义:查找test目录下,所以文件名包含abc的文件并执行删除操作
17. 查找30天前创建的文件并删除
find test/ -mtime +30 -type f | xargs rm -rf
示例含义:查找test目录下,所有创建时间超过30天的文件并执行删除操作
18. 下载文件
- 单线程下载
shell wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
- 多线程下载
shell axel -n 10 https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
示例含义:开启10个线程一起下载一个文件,注意这种下载效率会比单线程快很多
- 将本地文件上传到服务器或从服务器下载
- 上传
rz
执行命令后会弹出窗口,选择本地的文件,确认后会执行上传 - 下载
sz 文件命名
默认会下载到本地操作系统downloads目录下
说明:以上两个命令执行的前提是已经安装了lrzsz,可通过在线命令yum install -y lrzsz
安装
四、压缩解压命令
压缩解压命令在开发中比较常见,一般开发部署遇到的压缩包主要以zip和tar包为主,掌握这2种压缩文件的压缩和解压命令就足够了。
1. zip
- 压缩
shell zip -r xxxx.zip xxxx
实例含义:将xxx的全部内容压缩为xxx.zip
- 解压
shell unzip -d xxxx xxxx.zip
2. tar.gz
- 压缩
shell tar -zcvf test.tar.gz test/
- 解压
shell tar -zxvf test.tar.gz test
五、系统命令
系统命令是我们日常排查服务器问题及进行系统设置时使用比较多的命令,这些命令要求熟记于心
1. 查看网卡信息
ip addr
ifconfig
2. 修改密码
修改当前用户密码:
passwd
修改其他用户密码:
password deploy
3. 重启系统
reboot
4. 重启网卡
service network restart
5. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
6. 查看内存大小
- 查看还剩多少m
shell free -m
- 查看还剩多少g
free -g
7. 查看磁盘空间
- 查看总共剩下多少空间
shell df -h /
- 查看某个目录占用空间
shell du -sh test/
- 查看某个文件占用空间
shell du -sh abc.txt
8. 查看cpu使用情况
top
9. 跨服务器传输文件
- 将本服务器文件传输到其他服务器
shell scp aaa.zip root@192.168.200.130:/usr/local/
- 将本服务器目录传输到其他服务器
shell scp -r aaa root@192.168.200.130:/usr/local/
- 将其他服务器文件传输到本服务器
shell scp root@192.168.200.130:/usr/local/bbb.zip aaa.zip
- 将其他服务器目录传输到本服务器
shell scp -r root@192.168.200.130:/usr/local/bbb /mnt
六、文件权限命令
1.为文件添加权限
比如我们在任意目录下执行ls -al
,将看到文件或目录最前面显示效果如下
444 r--r--r--
600 rw-------
644 rw-r--r--
666 rw-rw-rw-
700 rwx------
744 rwxr--r--
755 rwxr-xr-x
777 rwxrwxrwx
解读下这个展示效果的含义,其实都是文件系统权限相关内容:
从左至右,先是3个数字,代表文件权限然后是9个字母(或者连字符),其中 1-3位数字代表文件所有者权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限,而具体的权限是由数字来表示的。
- 读取的权限等于4,用r表示
- 写入的权限等于2,用w表示
- 执行的权限等于1,用x表示
通过4、2、1的组合,得到以下几种权限:
- 0(没有权限)
- 4(读取权限)
- 5(4+1 | 读取+执行)
- 6(4+2 | 读取+写入)
- 7(4+2+1 | 读取+写入+执行)
2. 为某个目录添加执行权限
chmod a+x -R test
3. 以root身份执行命令
su chmod a+x -R test
七、进程命令
服务部署时使用比较多的命令就是进程命令,这些命主要是围绕着查看进程、确认进程存活情况及杀掉进程等操作
1. 查看进程
ps -ef|grep java
示例含义:查看所有运行中的进程信息中包含java的进程
2. 查看端口是否占用
lsof -i:8080
示例含义:确认8080端口是否被占用,如果命令执行完有响应数据列表,则表示已占用
3. 确认端口是否开启*
telnet 192.168.200.130 8080
示例含义:确认192.168.200.130的8080端口是否能连通,能连通就会进入黑窗口有光标,否则会卡主到超时
4. 杀掉进程
kill -9 1011
八、结束语
好了,这么多命令你终于都练习完毕了,有很多命令是不是让你感觉很Nice,令你眼前一亮呢?还记得这些命令分为哪些种类吗,如果忘记了就回顾多敲几遍,熟能生巧! 最后别忘了,除了文中总结的命令以外,我们Java开发中还涉及到基础命令还有jdk命令、maven命令、git命令,这些也都要求必须掌握的。有关于服务部署命令,更高级的命令还有docker容器相关命令,感兴趣可以在本文基础之上进一步自学docker。