Linux、shell命令

一、命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值