Linux 小技巧

警告
本文最后更新于 2023-10-30,文中内容可能已过时。

Linux 小技巧

  1. 韩老师说,在 Linux 中,没有任何提示信息就是成功了,有提示信息往往就是报错了,所以在 Linux 中没有消息就是好消息

  2. Linux 中的很多命令都是单词的简写的组合,比如用户操作相关的命令,useradd(user+add)  userdel(user+delete) usermod(user+modify) 比如用户组相关的命令 groupadd(group+add) groupdel(group+delete)。

    参数名称也都差不多

    • -r 表示 recursive,表示递归。

    • -i 表示 interactive 交互或者 ignore,忽略大小写,用户手动选覆不覆盖,删不删出等等等等

    • -f force 强制做什么,而且不会提示用户,强制删除,强制覆盖等等,

    • -n 输出行号,或者指定行数

    • -b 指的是字节数,

    • -c 或 -w 指字符数

    • -h 参数的意思是 human readable 人更好阅读。

  3. CRON 表达式的一个总结

  4. https://stackoverflow.com/questions/5407703/javac-command-not-found centos 中包含的是 JRE,但没有包含 JDK,也就是说,java 程序可以在 centos 上运行,但是本地无法开发 Java 程序,现象就是 java -version 可以查出来版本,但是 javac 会提示找不到,因为 javac 就属于 jdk,所以你得在本地安装 jdk 之后再使用 javac: yum install java-devel 具体请看《Linux 之 JavaEE 定制篇 - 搭建 JavaEE 环境》

  5. 查找 Java 安装路径 举个例子:

    1
    2
    3
    4
    5
    6
    
    [lk@lkCentOS bin]$ which java
    /usr/bin/java
    [lk@lkCentOS bin]$ ls -lrt /usr/bin/java
    lrwxrwxrwx. 1 root root 22 86 10:47 /usr/bin/java -> /etc/alternatives/java
    [lk@lkCentOS bin]$ ls -lrt /etc/alternatives/java
    lrwxrwxrwx. 1 root root 71 86 10:47 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/bin/java

    Java 安装路径就在 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/bin/java 最好,还是配置环境变量 JAVA_HOME

    配置方法: 切换到 root 用户

    1
    2
    3
    4
    
    vim /etc/profile
        在最后一行加上
        export PATH=$PATH:/home2jdk
    source /etc/profile

    生效期限:永久有效 生效范围:对所有用户有效

    然后下次找 jdk 安装路径echo $JAVA_HOME即可。

  6. 脚本的执行效果很命令行的执行效果不一样,极有可能是因为脚本执行的时候没有加载环境变量 在脚本第一行加上. /etc/profile即可

  7. linux 的文件系统是区分大小写的,但是 window 的文件系统是不区分大小写的,例如,你可以在 Linux 下的同一个文件夹下创建 file.txt 和 FILE.txt,但是在 Windows 中却不行

  8. https://www.xiaoz.me/archives/12989

    服务器时间校准:分两步 先设置时区

    1
    
    timedatectl set-timezone Asia/Shanghai

    然后校准时间

    1
    
    ntpdate ntp1.aliyun.com
  9. centos7 中 ifconfig 没有 ens33: 之前已经配置好网络了,用了一段时间突然不能上网了,首先 ens33 配置没有问题 解决办法 1、 ifconfig ens33 up 执行上述命令后发现 ifconfig 有 ens33 了,但是没有 ip 再继续执行下面的命令 2、 systemctl stop NetworkManager systemctl disable NetworkManager 3、再激活一下 ifup ens33 4、重起一下网络 systemctl restart network 最后 ping 一下就发现通了

  10. 输出当前 Linux 系统的 IP

    1
    
    ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 }'
  11. 换行,参考博客,Linux 参数太长,一般可取续行符 “"进行参数换行。反斜杠 \ 后面紧跟回车,表示下一行是当前行的续行。

  12. Ansible 常见错误解析 (停止更新)_non-zero return code-CSDN 博客

    有时候有这样一个重试场景,比如创建文件夹,mkdir folder,如果已经创建过了,再次执行的时候,是会报错的,这个时候,我们可以通过 mkdir folder > /dev/null 2>&1 将错误消除,这样,如果文件夹已存在,也不会报错,不存在,执行这个语句就创建了。 有时候这样还不够,因为有的时候,命令行必须返回点什么,不然就有可能是报错了,所以我们返回结果的行数,mkdir folder > /dev/null 2>&1 |wc -l,这样会一直返回 0,

  13. 如何在交互式的 shell 脚本中自动输入命令,请看Linux Shell 脚本交互输入_51CTO 博客_shell 脚本交互式输入命令 当我们想在数据库的命令行工具中执行数据库脚本的时候,我们就会遇到这个问题,但是大部分的数据库命令行工具都会提供非交互式的执行数据库脚本的工具 比如 mysql,比如 tdengine

  14. systemctl start/stop 的具体日志信息,通过 tail -fn 200 /var/log/messages 查看

  15. Authorization not available. Check if polkit service is running or see debug message for more information. 官方解决方案: https://access.redhat.com/solutions/1543343 https://www.jianshu.com/p/64e943664f8a 集大成者 https://blog.csdn.net/weixin_46398647/article/details/129797875 以上这些方案,最后都不能解决问题,是因为还差了最后一步,这最后一步就是重启之后,需要执行 systemctl daemon-reload 上面的博客结合这一步操作,解决了我的问题, 而这一步,只有下面这个博客提到了 https://blog.csdn.net/qq_16942727/article/details/104391536 官方解决方案之所以不能直接解决问题,可能是因为我的系统是 Centos,官方教程针对的 hi Redhat。

  16. Linux 后台启动,运行 jar 包

    1、首先基本的运行 jar 包命令如下,java -jar xxx.jar。这个命令会锁定命令窗口,当窗口关闭时,程序也就自动退出了,所以需要让 jar 包后台运行。

    2、后台启动运行,nohup java -jar xxx.jar &。nohup 命令:忽略所有挂断信号,当窗口关闭时,程序仍然运行。& 符号:程序后台运行。

    3、指定输出文件,如下,xxx.log 就是指定的输出文件,如果不指定,默认在 jar 包所在目录,创建 nohup.out 文件。nohup java -jar xxx.jar >xxx.log &> xxx.file:将输出重定向到 xxx.file 文件,也就是将内容输出到 xxx.file 文件中。

  17. 查看系统中所有的用户,在终端里。其实只需要查看 /etc/passwd 文件就行了。看第三个参数 :1000 以上的,就是后面建的用户了,其它则为系统的用户。

0%