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

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

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

日志/文本查看命令

  • catcat 文件名
  • tailtail -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 -rf
      • find /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.asc
      • find 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 -rf
      • sudo find ./ -name "*.log" -type f | xargs sudo rm -rf
    • 示例5:
      • find /tmp -name core -type f -print | xargs /bin/rm -f
      • find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
      • find . -type f -exec file '{}' \;
      • find $HOME -mtime 0
      • find /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.txt
        • find . -num 138956
      • 搜索文件时使用 -iname 参数可以忽略文件名称大小写

文本编辑/替换命令

  • sedstream 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 注意:这里的/可以由@替换
  • whereis命令
    • whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
    • whereis 命令的使用实例:
$ whereis grep
# grep: /bin/grep /xx/share/man/man1p/grep.1p.gz /xx/share/man/man1/grep.1.gz
  • which命令
    • which 命令的作用是,在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
    • which 命令的使用实例:
$ which grep
# /xx/grep

文本搜索命令

  • 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 liker
      • grep "\(l..e\).*\1r" testfile.txt的输出内容为:
        He loves his lover
        She like his liker
        输出结果中;前面显示like的后面显示liker,前面显示love的后面显示lover

xargs命令

  • 基本格式
xargs定位参数位置 | xargs控制参数位置 | 如何定位控制xargs参数位置
  • 用法介绍:
      管道 + xargs 用于把上游输出转换为下游参数输入。
      例如 ls *.bak | xargs rm -f

内存查看命令

  • top
  • freefree -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 pid
    • kill -15 pid
    • killkill -9,两个命令都有杀死进程的效果,然而两命令的执行过程不同,在程序中如果用错了,可能会造成莫名其妙的现象。
      • 执行 kill (不加 -* 默认kill -15)命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情:
        • 1)程序立刻停止;
        • 2)当程序释放相应资源后再停止
        • 3)程序可能仍然继续运行
    • 大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应,我在使用wkhtmltopdf转pdf的项目中遇到这现象),也就是说,SIGTERM多半是会被阻塞的。
    • 然而kill -9命令,系统给对应程序发送的信号是SIGKILL,即exitexit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
    • 小结:在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。
  • 查看端口号的占用情况
    • ssss 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 [address_family_options] [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w]  [--listening|-l]  [--all|-a]  [--numeric|-n]  [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o]  [--program|-p]  [--verbose|-v]  [--continuous|-c] [--wide|-W]
+ `netstat -tnlp | grep ssh`
+ `netstat -tnlp | grep ":22"`(此处22表示端口号)
  • lsof -i tcp:8286
  • fuser -v 8286/tcp

网络及端口命令

  • 显示当前网络接口状态:ifconfig
  • 查看哪些端口在使用:ps -ef

查看Linux内核版本信息

  • cat /proc/version
  • uname -a
  • uname -r

查看Linux用户信息

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

解压缩:

  • 1、*.tartar –xvf 解压
    2、*.gzgzip -d或者gunzip 解压
    3、*.tar.gz*.tgz 用 tar –xzf 解压
    4、*.bz2bzip2 -d或者用bunzip2 解压
    5、*.tar.bz2tar –xjf 解压
    6、*.Zuncompress 解压
    7、*.tar.Ztar –xZf 解压
    8、*.rarunrar e解压
    9、*.zipunzip 解压
  • 示例:
    • 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中sh -c用法整理

  • 在Linux使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式。

  • 比如要向 test.asc 文件中随便写入点内容,可以:

$ echo "信息" > test.asc  或者   $ echo "信息" >> test.asc
  • 下面,如果将 test.asc 权限设置为只有 root 用户才有权限进行写操作:
$ sudo chown root.root test.asc
  • 然后,我们使用 sudo 并配合 echo 命令再次向修改权限之后的 test.asc 文件中写入信息:
$ sudo echo "又一行信息" >> test.asc
-bash: test.asc: Permission denied
  • 这时,可以看到 bash 拒绝这么做,说是权限不够。这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 test.asc 文件写入信息的权限。
    解决这一问题的途径有两种。第一种是利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo sh -c 'echo "又一行信息" >> test.asc'
  • 另一种方法是利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:
$ echo "第三条信息" | sudo tee -a test.asc
  • 注意,tee 命令的 “-a” 选项的作用等同于 “>>” 命令,如果去除该选项,那么 tee 命令的作用就等同于 “>” 命令。

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

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值