系统服务

2017年08月03日

  • 查看端口占用

终端输入:lsof -i tcp:port 将port换成被占用的端口(如:8086、9998) 将会出现占用端口的进程信息。

  • 安装memcache

brew install memcached 安装完成后,使用如下命令启动memcached: memcached -m 32 -p 11211 -d

  • SSH转发原理

    很多情况下我们本地机和服务器之间的数据连接需要SSH来加密:比如翻墙,受限的服务器访问。这个时候我们可以通过端口转发,将TCP端口的数据通过SSH连接来转发,着放佛开了一条“隧道”。相信在应用Telnet,SMTP等服务的时候没少使用过,使用起来既安全又方便ssh隧道

    举个我最常用的例子:使用SSH搭建Jupyter notebook服务器了。我们在本地连接到远程服务器,使用本地端口转发

    ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
    
    1. 我们首先在服务器启动一个jupyter notebook服务。

      创建一个配置文件 jupyter_config.py. 内容如下:

      c.NotebookApp.ip = 'localhost' # 指定
      c.NotebookApp.open_browser = False # 关闭自动打开浏览器
      c.NotebookApp.port = 8888 # 端口随意指定
      c.NotebookApp.password = u'sha1:d8334*******' # 复制前一步生成的密钥
           
      作者:叶俊贤
      链接:https://www.jianshu.com/p/a9de7a089834
      來源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
      

      然后运行

      jupyter notebook --config=jupyter_config.py
      

    这样就启动了一个jupyter服务。

    1. 本地端口转发:

      我们在本地机器中执行:

      ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host
      

      这里,-N知名没有用命令要远程执行;-f是后台执行SSH(可以没有);-L是指定端口配置。

    2. 打开浏览器,输入地址: https://localhost:8888/就可以使用服务器端的jupyter notebook 了。

    参考: 实战SSH端口转发

  • 批量杀死某进程

       kill -9 `ps -ef |grep Task_name |awk '{print $2}' `
    

    其中 Task_name是要杀死的进程名

  • 终端(python输出)高亮显示  开头部分:\033[显示方式;前景色;背景色m 结尾部分:\033[0m
    完整格式: \033[显示方式;前景色;背景色m要打印的文字\033[0m    如果有空格,空格也会打印出来

       # 显示方式: 0(默认值)、1(高亮,即加粗)、4(下划线)、7(反显)、
       # 前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(梅色)、36(青色)、37(白色)
       # 背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(梅色)、46(青色)、47(白色)
       print("\033[1;31;40m您输入的帐号或密码错误!\033[0m")   标准写法   
    
  • fork: retry: 没有子进程、资源暂时不可用问题

    这是由于用户的线程满了导致的。通过ulimit -a命令查看可以看到该用户的max user processes值是1024或者4096。

    ulimit -u 10000
    

    或者 ```bash $ sudo vi /etc/security/limits.d/20-nproc.conf

  • soft nproc 4096 # 修改为需要的 root soft nproc unlimited ```

  • **GIT **

    git命令 作用 备注
    git config credential.helper store 为当前仓库记住密码,运行一次pull/push 就不用再输密码了  
    git reset –hard commit_id 回退到某个历史版本  
    git reflog 查看命令历史  
    git checkout – file 丢弃工作区某文件的修改  
    git reset HEAD 从暂存区放弃修改到工作区  
    git rm 手动删除文件后从git中删除  
    git branch 查看分支  
    git branch 创建分支  
    git checkout 或 git switch 切换分支  
    git checkout -b 或 git switch -c 创建 + 切换 分支  
    git merge 合并分支 到当前分支  
    git branch -d 删除分支  
    git merge –no-ff -m “info” 禁用Fast forward模式,合并分支  
    git stash/ git stash apply&drop 保存/恢复 工作现场  
    git cherry-pick 将某次“提交”复制到当前分支  
    git remote -v 查看远程库的详细信息  
    git remote add gitee git@gitee.comxx 关联gitee仓库  
    git branch –set-upstream-to dev=origin/dev dev 指定本地dev分支与远程origin/dev的链接  
    git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支  
    git rebase ?  
    git tag commit_id 为某次提交打标签  
    git show 查看标签信息  
    git tag -a -m "info" commit_id 为某次提交打标签并说明信息  
    git push origin –tags 将标签全部推送到远程  
  • Jupyter notebook设置
    Jupyter notebook作为强大的草稿纸,笔记本,绘图工具…实在太强大了,反正就是万能工具,默认主题太丑了。可以给它加上漂亮的主题,如果做教程或者其他需要添加目录的东西,那么外挂必不可少

  • MAC鼠标滚轮反向
    MAC的鼠标与触摸板都是采用的自然滑滚,这对于频繁切换windows/mac的人简直要崩溃:鼠标滚轮不一样啊。那么推荐可以单独对MAC的鼠标与触摸板进行滑滚设置的插件

  • MAC安装MysqlClinet
    conda install mysqlclient
    
  • Dash helper
    Dash for MacOS太强大了,没时间多少了,赶紧上船吧。

  • Home brew设置中科大(或coding)源
    替换brew.git:
    cd "$(brew --repo)"
    git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
    替换homebrew-core.git:
    cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
    git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
    

    coding的更新速度貌似比中科大还快,节点也更多。

    $ cd /usr/local/Homebrew && git remote set-url origin https://git.coding.net/homebrew/homebrew.git
    $ cd $home && brew update
    

    人生不如意之事十之八九,倘若中科大也被和谐了,那么可以切换回官方,直接brew doctor,按照提示来,或者手动设置:

    重置brew.git:
    cd "$(brew --repo)"
    git remote set-url origin https://github.com/Homebrew/brew.git
    重置homebrew-core.git:
    cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
    git remote set-url origin https://github.com/Homebrew/homebrew-core.git
    
  • ubuntu pip 出错

    #ValueError: Unable to determine SOCKS version from socks://127.0.0.1:1080
    unset all_proxy && unset ALL_PROXY
    export all_proxy="socks5://127.0.0.1:1080"
    
  • docker常用服务

    docker image pull hello-world # 拉取 hello-world 镜像
    docker image ls  # 查看本机有哪些镜像
    docker container run hello-world --name test_container  # 运行这个image(hello-world),生成一个运行的容器实例
    docker container ls # 列出本机正在运行的容器
    docker container ls --all # 列出本机所有容器,包括已经终止运行的
    docker container kill [containerID] # 终止正在运行的容器
    docker container rm [containerID]  # 终止运行的容器依然会占据硬盘空间,可使用rm删除
    docker container start [containerID]或[containerName] # 启动容器
    docker attach container_id
    或
    docker container exec container_id /bin/bash # 进入容器终端
    docker commit 容器名 镜像名 # 将容器保存为镜像
    docker save -o 保存的文件路径以及文件名 镜像名
    docker load -i 镜像名 # 加载镜像 docker load -i ./Downloads/nnUNet.tar.gz
    docker image build -t test:0.0.1  # 创建命令test的image文件,冒号指定标签
    docker rmi -f $(docker images -qa) # 删除所有镜像
      
    docker stop $(docker ps -a -q)   # 先停止运行的容器
    docker rm $(docker ps -a -q)     # 关闭所有容器
      
    sudo systemctl restart docker  # 重启docker服务
    docker login  # 登录 docker hub
    

    构建自己的docker image。我们新建一个文本文件 Dockerfile, 写入如下内容:

    FROM nvidia/cuda:11.0-base-ubuntu20.04 # 该image文件继承自官方nvidia/cuda,冒号表示标签
    COPY . /app # 将当前目录下所有文件都拷贝入 image 的/app目录中
    WORKDIR /app # 设置 image 的工作路径为 /app
    RUN npm install --registry=https://registry.npm.taobao.org # 在/app目录下执行 npm install 命令,安装后的所有依赖都将打包进入 image文件
    EXPOSE 3000 # 将容器的 3000端口暴漏出来,允许外部连接这个端口
    

之后就可以使用命令 docker image build -t test . 来创建image 文件了。

生成容器:

docker container run -p 8888:3000 --name first -it test /bin/bash -c "sh run.sh"

各个参数意义:

-p : 容器的3000端口映射到本机的8888端口
-i : “交互模式”运行容器,
-t : 容器启动后进入命令行
--name : 为创建的容器命名
-d : 创建守护式容器在后台运行
-e : 为容器设置环境变量
--rm : 运行完后删除 
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell
  • docker-compose 常用命令

    docker-compose build # 构建项目中的服务容器
    docker-compose kill  # 通过发送 SIGKILL信号来强制停止容器
    docker-compose config # 验证并查看compose文件配置
    docker-compose create # 为服务创建容器(只是单纯的创建,还需start启动)
    docker-compose down  #停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络,可以通过指定 rmi 、volumes参数删除镜像和卷
    docker-compose exec # 与docker exec命令功能相同,可以通过service name登陆到容器中。
    docker-compose logs # -f 指定服务
    docker-compose ps  # 列出项目中目前的所有容器
    docker-compose pull # 拉取服务依赖的镜像
    docker-compose rm [options] [SERVICE...] # 删除所有(停止状态的)服务容器。
    docker-compose up [options] [SERVICE...] # 自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一些列操作 
    
  • vim 插件

    vim中浏览目录 nerdtree vim中文输入法切换[fcitx-vim-osx](https://github.com/xcodebuild/fcitx-vim-osx

  • bash 快捷键

    ctrl+a: 光标移动到行首
    ctrl+e: 光标移动到行尾
    ctrl+u: 从光标处删除至命令行首
    ctrl+k: 从光标处删除至命令行尾
    Ctrl+y: 粘贴至光标后
    !!:   执行上一条命令
    !blah:执行最近的以 blah 开头的命令,如 !ls
    
  • docker login issue:

    docker login https://hub.infervision.com
    Username: axingle
    Password:
    Error response from daemon: Get https://hub.infervision.com/v2/: unauthorized: authentication required
    解决方案:
      
    1.打开终端,su root 输入密码
    2.打开 vim /etc/docker/daemon.json(若没有自行创建)
    3.写入:
      
    {
    "registry-mirrors":["https://hub.docker.com"] # 视情况而定
    }
    4.重启一下docker:
    systemctl daemon-reload
    systemctl restart docker
    


-_-below can discuss!-_-