一、命令
1、cd命令
cd 目录名/ 进入到某个文件夹内
cd .. 回退上一级
cd ../.. 返回上两级目录
cd - 回退到上次目录
cd / 绝对路径——根目录
cd /opt/midware/tomcat/webapps/meeting 绝对路径——某个文件夹
2、查看文件
pwd 显示当前目录绝对路径
ls 查看目录中的文件
ll(ls -l)显示文件和目录的详细资料
3、操作文件
(1)新建目录:mkdir
mkdir 文件夹:新建一个文件夹
mkdir -p /tmp/dir1/dir2 创建一个目录树
(2)创建文件:touch
创建一个文件:touch readme.md
创建多个文件:touch 1.md 2.md
注意:由于windows创建文件的数据存储格式和Linux是 不同的,即使是后缀名一样,但文件数据格式还是有些不同。
比如windows下创建的记事本.txt文件改为sh文件,Linux无法识别为脚本文件;
git提交文件时的警告,
(2)移动目录:mv——将保留文件的所有信息,包括日期
移动重命名:mv dir1 new_dir 重命名/移动 一个目录文件。
原理是:移动文件夹dir1 到指定目录中,如果该目录存在,dir1将移动到目标目录下;如果该目录不存在,dir1将移动至目标目录的上级目录且重命名为目标目录名。
移动文件到目录中:mv source_file(文件) dest_directory(目录) 将文件 source_file 移动到目标目录 dest_directory 中
移动且重命名文件:mv source_file(文件) dir/dest_file(文件) 对文件的操作,移动到指定目录下且重命名
如果移动目录或者文件 到指定文件夹中时,该目录或者文件已经存在:
如果目标目录不是空,提示Directory not empty目录不为空,而无法覆盖。——
mv
命令移动的东西如果在目标路径中已存在(不为空),那么它是移动不了的,这是mv
的一种保护机制,防止错误覆盖。mv === mv -i 覆盖前询问
mv -i 操作文件,overwrite ?的覆盖提示,输入y,成功将已经存在的文件替换
mv -i 操作目录,overwrite ?的覆盖提示,如果目标目录是空,可以成功覆盖;如果目标目录不是空,提示Directory not empty目录不为空,而无法覆盖。
mv命令因为设置的原因,mv其实是mv -i,使用\mv 代表正真的mv命令。
- -b 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。(因为目标目录中存在,所以在模板目录中创建一个备份)
比如:static 目录,在覆盖前会备份为static~
- -f 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接去覆盖旧文件,但是如果目标目录不是空,任然无法成功覆盖
- -n: 不要覆盖任何已存在的文件或目录。比如移动多个文件到目标目录时,有个文件已经存在,不覆盖。
(3)删除:
rm -f file1 删除一个叫做 'file1' 的文件'
rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容
删除多个目录:rm -rf dir1 dir2
(4)复制:cp -i -a -r 使用较多
-a :相当于 -pdr 的意思(dao参数pdr分别为:保留zhi权限,复dao制软链接本身,递归复制);使用-a ,可以完全复制目录或文件的全部信息,包括时间。
-p :连同档案的属性一起复制过去,而非使用预设属性;
-d :若dao源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
cp -r dir1 dir2 复制一个目录及子目录dir1 ——> dir2下
\cp -rf 强制复制,没有提示,无需用户确认
问题:cp命令即使加上了-rf参数,系统还是会对重名文件的覆盖一个个作出确认提示
原因:Linux中的.bashrc文件给命令设置别名,cp实际上是 cp -i 的别名。cp 命令前加了 \ ,意思是不让它用~/.bashrc里的别名运行
查看别名的命令:alias cp
输出结果:alias cp='cp -i'
linux系统中,cp命令用于拷贝文件,常用的参数:
-r 是递归,拷贝目录下的所有子目录及文件
-f 是强制覆盖,如果存在相同参数时
-i 是覆盖同名文件时进行提示参考:https://blog.csdn.net/inkflow/article/details/96139806
\cp的常用命令:
复制文件无提示:\cp
复制目录 无提示:\cp -r
发现特点:命令 源目录 目标目录
其中对源文件夹的操作,就是操作该目录,把这个目录看做一个整体。
源文件、源目录,可以有多个;但目标目录、文件只能有一个。
目标目录:是将操作的源目录,放入到目标目录下,目标目录中。(注意:重命名目录时,是放在目标目录的上级目录,而目标目录是重命名的源目录)
问题:如何操作源目录下的多个文件呢?目标目录必须存在(不存在的话不是重命名,怎么可能同时重命名几个文件呢)
如将 /usr/runoob 下的所有文件和目录移到当前目录下,mv /usr/runoob/* .
如将/usr/runoob 下的dir1和dir1 移动到当前目录下, mv /usr/runoob/dir1 /usr/runoob/dir2 .
4、抓包、查看日志
tail :输出文件的最后几行。-n倒数n行;
tail -n 10 filename 输出文件的最后10行。
比如:输出tomcat日志文件的文件的内容倒数3000行,并且重命名为1.txt
tail -n 3000 /opt/log/tomcat/catalina.out > 1.txt
查看实时日志:tail -f
tail -f /opt/log/tomcat/catalina.out
head命令:
显示 notes.log 文件的开头 5 行,请输入以下命令:
head -n 5 runoob_notes.log
5、系统——分别获取年月日 时分秒
(1)显示系统日期时间:date
(2)显示拼接后的日期时间(数字格式)
date +%Y%m%d%H%M%S
输出:20201231095350
(3)可以在年月日时分秒之间添加拼接字符
date +"%Y:%m"
2020:12
赋值给变量:
6、软连接
硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
软链接:
- 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
- 2.软链接可以 跨文件系统 ,硬链接不可以
- 3.软链接可以对一个不存在的文件名进行链接
- 4.软链接可以对目录进行链接
硬链接:
- 1.硬链接,以文件副本的形式存在。但不占用实际空间。
- 2.不允许给目录创建硬链接
- 3.硬链接只有在同一个文件系统中才能创建
参考菜鸟教程:https://www.runoob.com/linux/linux-comm-ln.html
- -s 软链接(符号链接)
ln -s file1 lnk1 创建一个指向文件或目录的软链接
给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:
ln -s log2013.log link2013
给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同:
ln log2013.log ln2013
7、权限
人群:所有人u、群组g、其他人o
读写执行(r1 w2 x4)
chmod 777 文件
8、执行文件交脚本
方式一:sh test.sh
方式二:./test.sh
9、变量的使用
变量赋值:可以赋值路径,也可以赋值文件;=号两边不能有空格
filea=/root/index.js 赋值变量名为filea,代表/root/index.js文件
pathb=/root/home 赋值变量名为pathb,代表/root/home路径
输出变量:
echo $filea 或者 ${filea}
echo $pathb 或者 ${pathb}
使用:
$filea $pathb 就代表了对应的值。可以直接使用在任何地方
注意:变量是临时存在内存中的,如果在sh脚本声明赋值,sh脚本执行结束,变量销毁;如果在xshell中,关闭xshell窗口,变量销毁。
获取系统时间且赋值给变量:使用反引号
nowDate=`date "+%Y%m%d"`
拼接字符串:nowDate=abc`date "+%Y%m%d"` 结果:abc20201231
总结:变量赋值时,=右侧默认都是字符串,所以不需要引号。当字符串和变量或者命令拼接时,使用反引号来表达命令。具体的可参考上面的实例。
10、查看某个文件的位置
locate pathfragmentname——全局查找路径片段字符串
Linux中,所有的文件夹、文件的路径集合,在该集合中搜索带有指定片段字符串的路径
比如:locate nginx.conf
输出带有nginx.conf字符串的所有的路径
/opt/midware/nginx/nginx/conf/nginx.conf
/opt/midware/nginx/nginx/conf/nginx.conf.a
find 命令用来在指定目录下查找某个文件
find . -name "*.c"将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
比如:find . -name "set.js"
查找当前文件夹下name为set.js 的文件。输出对应的文件路径:./js/set.js
注意:不是文件所在的路径,而是相对于当前文件夹下的文件路径。
11、sleep命令可以用来将目前动作延迟一段时间
sleep 5s 其中 s 为秒,m 为 分钟,h 为小时,d 为日数
12、解压zip包、war包
参考菜鸟教程:https://www.runoob.com/linux/linux-comm-unzip.html
unzip命令
比如:unzip -o meeting.war -d /opt/midware/tomcat/webapps/meeting/
- -o 不必先询问用户,unzip执行后覆盖原有文件。
- -d<目录> 指定文件解压缩后所要存储的目录。
操作文件内容
1、修改文件内容 vim 或 vi
vim 文件名——进入文件
按键i——进入编辑状态(insert)
按键ESC——退出编辑状态
输入 :进入命令状态 ——输入wq!保存修改;输入q!不保存修改;
w:write 重写
q:quit 退出
! 强制执行
显示行号:vi 文件名——》:set number命令
输入:set nu 会显示行号
输入:31,36d 会删除对应行号范围的内容
2、对比文件内容 cmp
对比两个文件内容是否相同:cmp 文件1 文件2
查看两个文件的差异:diff
3、查看文件内容 cat more less
cat、more、less等命令
输入q退出查看
通过cmd使用ssh连接服务器
1、ssh命令连接
ssh -p 22225 root@ip
Linux磁盘
1、查看磁盘使用率
df -h
实际开发中遇到的问题:
1、window创建的txt文本修改格式为sh的话,上传的服务器中,无法执行。
cat -A filename,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式。
如果是dos格式文件,需要修改为Unix格式,执行命令如下:
vim filename,编辑文件,执行“: set ff=unix”,将文件设置为unix格式,然后执行“:wq”,保存退出。
参考:https://blog.csdn.net/weixin_39309402/article/details/99732688
2、在shell脚本的第一行中,必须写#!/bin/bash
#通常用作注释,但是#!放在一起就标志着这是一个shell script,其后的路径指出了用来解释这个script的程序。
如果这个script中包含一些自定义的程序组件,比如说函数,变量等,#!便需要标注。
3、操作tomcat
(1)启动停止重启
service tomcat start
service tomcat stop
service tomcat restart
(2)查看tomcat日志
输出tomcat日志文件的文件的内容倒数3000行,并且重命名为1.txt
tail -n 3000 /opt/log/tomcat/catalina.out > 1.txt
(3)清除tomcat缓存
找到tomcat缓存对应的路径,进行清除
比如:rm -rf /opt/midware/tomcat/work/*
4、操作nginx
(1)清除nginx缓存
找到nginx缓存文件对用的路径,进行清除
比如:rm -rf /opt/data/nginx/proxy_cache/*
5、防火墙
防火墙的开启、关闭、禁用命令
命令中的firewalld是firewalld.service的简写
查看防护墙状态:systemctl status firewalld
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)重启防火墙:service firewalld restart
使用firewall-cmd配置端口
(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
(5)关闭防火墙端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent
参考文章:https://www.cnblogs.com/marso/archive/2018/01/06/8214927.html
查看历史操作命令:
history | grep npm
查看某个程序的进程情况:
ps -ef | grep node
查看CPU使用情况:
CPU实时情况:top