Linux日常开发运维常用命令总结

Linux日常开发运维常用命令总结,第1张

Linux日常开发运维常用命令总结 Linux日常开发运维常用命令总结

作为后端开发人员,在日常开发、运维过程中经常需要在Linux系统中查看日志,这时候就需要会使用一些基本的Linux命令,对于日常工作很有必要(虽然目前容器化技术日益普及,可能并不一定需要直接 *** 作Linux)。这篇文章专门对日常开发、维护经常用到的命令作一总结。 日志/文本查看命令

cat:cat 文件名tail:tail -1000f 文件名find:查找命令。

示例1:Linux中删除指定目录下中包含log的所有文件,排除bbbbb-2021-06-30-17.log这个文件,然后删除找到的文件

find /export/xxx/aaa/ -name '*log*'| grep -v bbbbb-2021-06-30-17.log |xargs sudo rm -rffind /export/xxxx/ -name '*log*'| grep -v test-2021-06-26-11.log |grep -v /export/xxxx/logs |xargs sudo rm -rf 示例2:

输入:find ./libs/ -name *kafka_* | head -1 | grep -o 'kafka[^n]*'
输出结果:kafka_2.12-1.0.0-javadoc.jar.ascfind dir -name ,就是在dir目录下根据名称去查找,这地方使用的是 也快是 “kafka_”,就是中间包含关键字的名称文件,然后管道之后是head -n,就是显示查询结果的前n行,之后再管道,再grep -o,就是 — 只输出匹配的具体字符串,匹配行中其他内容不会输出,比如没有这个grep -o的结果如下:
find ./libs/ -name "*kafka_*" |head -3
./libs/kafka_2.12-1.0.0-javadoc.jar.asc
./libs/kafka_2.12-1.0.0-test-sources.jar.asc
./libs/kafka_2.12-1.0.0-test.jar 示例3:模糊搜索

find /usr/local/nginx/logs/access/host/ -name '*.access.log.log'|xargs rm -rf模糊搜索/usr/local/nginx/logs/access/host/目录下文件名中包含access.log.log的所有文件:find /usr/local/nginx/logs/access/host/ -name '*.access.log.log'查找文件名中包含某字符(如"elm")的文件:

find /home/lijiajia/ -name '*elm*'find /home/lijiajia/ -name 'elm*'find /home/lijiajia/ -name '*elm' 示例4:正则表达式:注意:. 表示普通字符,并不是java正则表达式中的任意字符。

sudo find ./ -name "*.log.*" -type f | xargs sudo rm -rfsudo find ./ -name "*.log" -type f | xargs sudo rm -rf 示例5:

find /tmp -name core -type f -print | xargs /bin/rm -ffind /tmp -name core -type f -print0 | xargs -0 /bin/rm -ffind . -type f -exec file '{}' ;find $HOME -mtime 0find /usr/local/src/all2 -name aaa.txt -type f -print | xargs /bin/cat:将find命令的搜索结果作为后面命令的输入 示例6:

find / -name docker.service -type f 其他查找命令:locate命令

locate 命令其实是 “find -name” 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。locate命令的使用实例:

搜索etc目录下所有以sh开头的文件:locate /etc/sh搜索用户主目录下,所有以m开头的文件,并且忽略大小写:locate -i ~/m

示例7:

查找指定目录下含有指定词的文件

find /export/mulu/ -name "*screen*.jar" -print

在/dir目录及其子目录下面查找名字为filename的文件

find /dir -name filename 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件

find . -name "*.c" 在 etc 目录下,查找大写字母开头的 txt 文件

find /etc -name "[A-Z]*.txt" -print 在当前目录下查找不是 out 开头的 txt 文件

find . -name "out*" -prune -o -name "*.txt" -print 在当前目录除 git 子目录外查找 txt 文件

find . -path "./git" -prune -o -name "*.txt" -print 找出某个文件的所有硬链接,ls 命令 -i 选项可以查看文件的 inode 号

ls -i 1.txt # 138956 1.txtfind . -num 138956 搜索文件时使用 -iname 参数可以忽略文件名称大小写 文本编辑/替换命令

sed:stream editor for filtering and transforming text

命令格式1:sed 's/原字符串/新字符串/' 文件命令格式2:sed 's/原字符串/新字符串/g' 文件
这两种命令格式的区别在于是否有个“g”。没有“g”表示只替换第一个匹配到的字符串,有“g”表示替换所有能匹配到的字符串,“g”可以认为是“global”(全局的)的缩写,没有“全局的”结尾就不要替换全部,这样就好记啦
例如:sed 's/b/B/' testfile.txt 将testfile.txt中的第一个b替换为B;
sed -i 's/[0-9]/好的/g' testfile.txt 将testfile.txt中的所有数字替换为好的,会编辑原文件替换某行内容

命令格式1:sed '行号c 新字符串' 文件命令格式2:sed '起始行号,终止行号c 新字符串' 文件 多条件替换:

命令格式:sed -e 命令1 -e 命令2 -e 命令3有些时候有多个替换条件,那就可以使用“-e”参数将这些替换条件连接起来,一次性完成所有的替换 *** 作。例如,可以将上述的两种命令连接起来:“sed -e ‘s/原字符串/新字符串/’ ‘行号c 新字符串’ 文件”。如下图,不仅将小写“a”替换成了大写“A",还将第2行内容替换成了“new test!”。例如:sed -e 's/b/B/g' -e '3,4c this is new Test' testfile.txt 注意:这里的/可以由@替换 文本搜索命令

grep:应用示例:

ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。grep 'test' d* 显示所有以d开头的文件中包含test的行。grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成’w(es)t.'就可以了。grep -i pattern files :不区分大小写地搜索。默认情况区分大小写grep -l pattern files :只列出匹配的文件名,grep -L pattern files :列出不匹配的文件名,grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’)grep -C number pattern files :匹配的上下文分别显示[number]行,grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。分组:对模式进行分组

() 引用:对分组的字符串基于位置引用

1: 后向引用,表示引用前面的第一个左括号与之对应的右括号中的模式所匹配到的内容2: 表示引用前面的第二个左括号与之对应的右括号中的模式所匹配到的内容
例如:testfile.txt文件内容为:
He like his lover
She love her liker
He loves his lover
She like his likergrep "(l..e).*1r" testfile.txt的输出内容为:
He loves his lover
She like his liker
输出结果中;前面显示like的后面显示liker,前面显示love的后面显示lover。 内存查看命令

top:free:free -h -s 2

第一列
Mem 内存的使用信息
Swap 交换空间的使用信息
第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小

其中有两个概念需要注意:free 与 available 的区别

free 是真正尚未被使用的物理内存数量。available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。

磁盘命令

查看磁盘空间占用情况 df -hT查看当前目录下的文件及文件夹所占大小: du -h --max-depth=1 ./* 进程管理命令

jps:kill:杀死当前指定进程,具体用法:

kill -9 pidkill -15 pidkill和kill -9,两个命令都有杀死进程的效果,然而两命令的执行过程不同,在程序中如果用错了,可能会造成莫名其妙的现象。

执行 kill (不加 -* 默认kill -15)命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情:

1)程序立刻停止;2)当程序释放相应资源后再停止3)程序可能仍然继续运行 大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应,我在使用wkhtmltopdf转pdf的项目中遇到这现象),也就是说,SIGTERM多半是会被阻塞的。然而kill -9命令,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。小结:在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。 查看端口号的占用情况

ss: ss is used to dump **socket statistics**. It allows showing information similar to netstat. It can display more TCP and state informations than other tools.

示例:ss -tnlp | grep ":22"说明:

-n, --numeric
 Do not try to resolve service names.
 -l, --listening
Display only listening sockets (these are omitted by default).
-p, --processes
Show process using socket. 
-t, --tcp
 Display TCP sockets.
 -u, --udp
Display UDP sockets.

netstat:

netstat -tnlp | grep sshnetstat -tnlp | grep ":22"(此处22表示端口号) lsof -i tcp:8286fuser -v 8286/tcp 网络及端口命令

显示当前网络接口状态:ifconfig查看哪些端口在使用:ps -ef 查看Linux内核版本信息

cat /proc/versionuname -auname -r 查看Linux用户信息

查询当前用户
id查询指定用户
id 用户名添加用户:useradd psvmc删除用户:userdel psvmc查看用户所在组:查询当前用户的组内成员:groups 解压缩:

1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压示例:

tar -tf all.tar
 这条命令是列出all.tar包中所有文件,-t是列出文件的意思tar -xf all.tar
  这条命令是解出all.tar包中所有文件,-t是解开的意思压缩:
1) tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
2)tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
3)tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
4)tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
-Z, --compress, --uncompress,filter the archive through compress tar命令详解

-c: 建立压缩档案:create,create a new archive-x:解压:extract/get:extract files from an archive-t:查看内容:list,list the contents of an archive-r:向压缩归档文件末尾追加文件:append,append files to the end of an archive-u:更新原压缩包中的文件:update,only append files newer than copy in archive
  这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。:file-v: verbose, verbosely list files processed-z:gzip,filter the archive through gzip

	tar -cf all.tar *.jpg

这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

	tar -rf all.tar *.gif

这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

	tar -uf all.tar logo.gif

这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

Linux下 *** 作MySQL

Linux下导入导出 MySQL 数据库表结构数据

导出完整数据:表结构+数据
mysqldump -hIP -Pport -u数据库用户名 -pdatabasePass databaseName> dump.sql导出数据库表结构:增加一个’-d’参数,忽略数据,只导出结构。
mysqldump -h localhost -u数据库用户名 -pXXXXX -d database > dump.sql导出单个数据表结构和数据
mysqldump -h localhost -u数据库用户名 -pXXXXX database table > dump.sql导出单个数据表结构(不包含数据)
mysqldump -h localhost -u数据库用户名 -pXXXXX -d database table > dump.sql 欢迎走过路过的各位大佬关注我的微信公众号ItBeeCoder

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5705501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存