Linux常用指令

本文最后更新于:2 个月前

  1. 从本地上传文件到服务器

    $ scp -r /home/yysir/dist java@ip:/tmp

    即可将本地dist文件夹上传到服务器的tmp文件夹下,

    然后即可连接服务器将文件移动到相应文件夹中【因为目标文件夹可能没有写入权限,所以先放入具有全部权限的tmp文件夹下,再进行移动】

  2. 从服务器下载文件到另一服务器或者本机

    #注意:这是在服务器端,要求必须要有公网ip才能传到对应电脑,否则,只能先退出服务器,在本机然后再从服务器上下载文件。
    
    $ scp java@ip:/tmp/test.txt yysir@ip:/home/yysir/Download
  3. 查看服务器图片

    python3:

    $ python -m http.server 8080

    python2:

    $ python -m simpleHTTPServer 8080

    如果服务器8080端口防火墙打开了的话,在浏览器输入服务器的ip地址和端口,即可在本地查看服务器的图片。

  4. rar解压

    linux没有直接解压rar的功能,先去rarlab下载

    解压到/opt目录下,进入rar文件夹,sudo make即可

    语法:

    unrar x [fileName] 解压

    rar a [rarName.rar] fileName

  5. ubuntu下开启防火墙端口

    $ sudo su
    
    #开启8080端口
    $ iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
    
    $ cd /etc/network/
    
    #目录下如果没有iptables.up.rules
    iptables-save >/etc/network/iptables.up.rules
    
    $ vim iptables.up.rules
    
    #把新加入的8080端口新加入的那一行移动到合适位置【其实直接将第一行命令加到这里相应位置就可以】
    
    # accept一定要放到reject的前面!!
    
    $ iptables-apply
    #检查程序是否运行中,端口是否开启
    #特别的,在沸点的项目需要向学校申请开放端口
  6. 命令行下查看wifi

    # 查看所有wifi
    $ nmcli device wifi list
    # 连接wifi
    $ nmcli device wifi connect 'SSID' password 'password'
    # 显示一个所有连接过网络的UUID列表
    $ nmcli connection show
    # 查看所有的网络设备和状态
    $ nmcli device
  7. 查看端口

    1. 查看端口是否被占用:【注意root权限

      • netstat -anp |grep 8080
      • lsof -i:8080
    2. 查看端口是否在防火墙放行

      • netstat -ntpl【tcp类型端口】

      • netstat -nupl【udp类型端口】

      • /sbin/iptables -L -n

      • telnet ip【ip地址】 port【端口】

      • 可以连接则显示

        Trying ip ...
        Connected to ip...
        Escape character is '^]'.

        输入’]'后,进入telnet,键入quit退出

      • 不能连接则显示

        Trying ip...
        telnet: connect to address ip: No route to host
  8. 内网穿透

    我如果连接外网时连接内网的主机,输入192.168.1.110这样的内网ip肯定是无法连接的,这样就需要内网穿透

    1. 方案一:

      用有公网ip的服务器,搭建ngrok进行内网穿透,这个就需要买服务器,然后自己搭ngrok了。我现在暂时还用不到服务器,就没有采取这个方案。

    2. 方案二:

      用ngrok现成的,官网 注册一个帐号,下载zip文件,解压到opt

      $ cd /opt
      # 安装screen使ngrok可以在后台运行
      $ sudo pacman -S screen
      
      # 启动screen,-S 后面的ngrok就是一个名字而已
      $ screen -S ngrok
      
      # 开启ssh默认的22端口
      ./ngrok tcp 22
      
      # 记下端口和host
      
      # 看到启动成功后,按下 ctl+A+D,使ngrok在后台运行
      
      # 连接外网测试ssh
      $ ssh -p prot yysir@0.tcp.ngrok.io

      更新:

      我必须在本机的命令行开一个命令行界面才能连上,否则有迷之网络连接失败

  9. 在服务器上后台运行程序

    前些时候(大概四到五月份)做帐号中心的项目,才开始真正熟悉Linux的各种操作和Spring Boot的学习。具体踩过的坑一时半会都说不完。不过今天又发现了一些新的问题值得记录一下⬇

    # 之前仅仅是用 >file 来重定向输出文件,还有 & 来保持程序后台运行,具体命令如下:
    
    $ java -jar demo-SNAPSHOT.jar >accountcenter.out &

    可是最近发现每过一段时间(大概一个月左右),程序就会自动停止,然后我就又不得不重新连服务器,把后台提起来。

    今天上网查了查,找到一个可能的疏漏:要用nohup来保持程序后台运行
    (具体不确定,站坑,等过一个月再来答)

    (过了好久,终于填坑,果然是需要nohup)

    $ nohup java -jar demo-SNAPSHOT.jar >accountcenter.out &
  10. nginx

    1. 安装:

      $ sudo pacman -S nginx
    2. 开启服务&测试

      $ sudo systemctl status nginx
      $ sudo systemctl start nginx
      
      $ sudo nginx -t

      如果测试出现如下错误:

      nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 2048 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size

      解决方案:

      $ sudo vim /etc/nginx/nginx.conf

      在http模块下,server子模块前,添加如下配置:

      types_hash_max_size 2048;
      server_names_hash_max_size 2068;
      types_hash_bucket_size 1024;

      #重启
      $ sudo systemctl restart ngxin
      
      #测试
      $ sudo nginx -t
      
      #出现以下提示即可:
      #nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
      
      #nginx: configuration file /etc/nginx/nginx.conf test is successful

      本地nginx主页

    3. 配置反向代理

      $ sudo vim /etc/nginx/nginx.conf

      <一、通过域名访问>
      添加如下配置

      server {
          listen 80;
          server_name yinchao;
          root /opt/BlogFile/.deploy_git
          location /{
              index index.html;
              try_files $uri $uri/ /index.html;
          }
      }

      <二、通过端口访问>

      server {
          listen 8888;
          server_name localhost;
          root ~;
          location / {
              index ~;
              try_files $uri $uri/ ~;
          }
      }
      sudo systemctl restart nginx

      即可通过http://yinchao/ 或localhost:8888访问。

    • 前端部署的坑:

      • 如果是vue等可以用

        npm run build

        命令打包为dis文件的,直接就可以了

      • 如果是原生的html+css+javascript

        就要把文件归类,html平行的就是css和js

        而且nginx的配置文件要配置好

        从昨天22:30到夜里1点多,再从今天早上9:20到下午1点,终于把这个原生页面部署上去了😩

  11. 查看文件编码

    file fileName
    # 还可以错略通过换行符判断Windows/Unix系统
  12. 数据库备份和还原

    备份:

    mysqldump -uroot -proot databaseName > databasesName.sql;

    还原的前提:必须先建立database,然后才能在其中添加数据,否则会报错

    mysql -uroot -proot databaseName < databaseName.sql;
  13. 网络相关

    1. www和不加www域名的区别:

      前者是后者的子域名

      后者被称为裸域名,好处是简短容易记忆,常见于个人博客等。坏处是不能把裸域设定为另外域名的别名等详情见知乎

  14. ls命令

    • 按文件大小进行排序

      $ ls -hlSa

      -a: --all

      -h:–human-readable,显示人类可读的文件大小

      -S:以文件大小降序方式排序

      -r:–reverse,反向排序

    • 按文件时间顺序排序

      $ ls -hlta

      -t: sort by modification time,newest first,即按修改时间对文件进行降序排序

  15. 命令记录

    • ldd [path]: 查看依赖库

      $ ldd /usr/bin/mysqld

      注意要写完整路径,如果写成
      $ ldd mysql
      会提示mysql NOT FOUND

    • LD_DEBUG=libs [path]:

      LD_DEBUG 是 glibc 中的 loader 为了方便自身调试而设置的一个环境变量。
      通过设置这个环境变量,可以方便的看到 loader 的加载过程,使用ldd命令可以知道程序依赖于哪些库。
      在找不到这些库的时候,使用LD_DEBUG可以知道系统在哪些路径下进行了尝试

  16. gitlab

    昨天(2019.8.18)程时坤重启了 gitlab 500的错误,但是没办法用ssh克隆导致我晚上调了很久,最后发现是url不对!!!

    应该是 ×××.edu.cn,结果现在的url为 ×××.edu.cn.com,然后用ssh克隆就一直提示需要使用密码。

    解决办法:

    # 登上服务器,获取超级用户权限
    $ ssh feidian
    $ sudo su
    
    # 进入gitlab配置目录,进行相应配置
    $ cd /etc/gitlab
    $ vim gitlab.rb
    
    # 发现external_url是'http://git.feidian.hzau.edu.cn.com'
    # 修改,把最后的.com去掉即可
    
    # 更坑的来了,之前在网上找到的命令是 gitlab-ctl reconfigure,执行之发现刚刚修改的gitlab.rb的数据被重置了!!!
    # 尝试多次发现show-config才是正确的
    $ gitlab-ctl show-config
    # 成功
  17. banner

    • 生成banner

    • 登录前banner:

    $ sudo vim /etc/issue
    Manjaro Linux \r  
    server name: (\n) 
    user: (\l)
    version: (\v)
    OS Name:(\s)
    time: (\t)
    hard ware level: (\m)
    • 登录后banner
    $ sudo vim /etc/motd
      ___    ___  ___      ________           ________      ___  ___      ________      ________     
     |\  \  /  /||\  \    |\   ___  \        |\   ____\    |\  \|\  \    |\   __  \    |\   __  \    
     \ \  \/  / /\ \  \   \ \  \\ \  \       \ \  \___|    \ \  \\\  \   \ \  \|\  \   \ \  \|\  \   
      \ \    / /  \ \  \   \ \  \\ \  \       \ \  \        \ \   __  \   \ \   __  \   \ \  \\\  \  
       \/  /  /    \ \  \   \ \  \\ \  \       \ \  \____    \ \  \ \  \   \ \  \ \  \   \ \  \\\  \ 
     __/  / /       \ \__\   \ \__\\ \__\       \ \_______\   \ \__\ \__\   \ \__\ \__\   \ \_______\
    |\___/ /         \|__|    \|__| \|__|        \|_______|    \|__|\|__|    \|__|\|__|    \|_______|
    \|___|/
  18. 根据端口号直接杀死进程

    fuser -k -n tcp 8099
  19. 获取日志中一定范围的

    cat 日志 | grep -E '2018:2[0-2]:[0-9][0-9]:[0-9][0-9]'