对于Scientific Linux以及CentOS非必要不要升级任何文件

  • 特别是“应用程序”中的“软件”与“软件更新”;
  • 最好不用“yum -y update”(明白的人除外);
  • 系统提示的更新一定要忍住,不要更新;

不要更新!不要更新!不要更新!

常用命令

cd

  • cd
  • cd ..
  • cd 目录

ls

  • ls -a
  • ls -lhrt

cp

  • cp -r /A/file1 /B/file2
  • 拷贝A处file1,并在B处生成file2
  • scp -r usrname1@IP1:/path1/dir1/file1 usrname2@IP2:/path2/dir2/file2

mv

  • mv /A/file1 /B/file2
  • 将A处的file1移动到B处并该名为file2

rm

  • rm -rf file1
  • 删除file1
    • -r:包括子目录
    • -f:强制

mkdir

  • mkdir /A/dir
  • 创建文件夹

touch

  • touch /A/file1
  • 创建文件

find

  • find ./ -name "." | xargs grep "Hello"

grep

  • 搜索关键字
    • grep -r "目标字符"

tar

  • 将'tele2_tracking'压缩,其压缩后文件名为'tele2_tracking.tar.gz'
    • tar -czvf tele2_tracking.tar.gz tele2_tracking
  • 解压'tele2_tracking.tar.gz'
    • tar -zvxf tele2_tracking.tar.gz

软链接

  • 创建:ln -s source_dir alias_name
  • 删除:unlink alias_name

批量重命名

  • 方法一:mv配合for循环方式进行修改
    • for name in `ls *.html`;do echo $name ${name%.html}.jpg;done
    • for name in `ls *.html`;do mv $name ${name%.html}.jpg;done
  • 方法二:sed命令
    • ls jpg|sed -r 's#(.).jpg#mv & \1.mp4#'|bash
  • 方法三:rename命令(格式:rename 原名 替换名 要改的文件)
    • rename txt jpg *

安装软件(库)

yum方式

  • 安装:yum -y install software(lib)_name
    • -y:对于询问内容自动yes;
    • 查询:provides software(lib)_name

rpm安装

  • 安装:rpm -ivh software.name
  • 更新:rpm -Uvh software.name
    • -i:表示安装
    • -v:表示显示安装过程
    • -h:表示显示进度
    • -U:表示更新
    • ps:安装软件会提示缺少库,可用yum中的查询方法找到对应的文件,再利用yum安装库文件;然后再安装(更新)软件;
  • 查询:rpm -qa | grep [google]
  • 卸载:rpm -e --nodeps [google-chrome-stable]

权限更改

更改文件所有人

  • 文件本身:chown username file/dir
  • 文件及内容:chown -R username file/dir

更改文件所有组

  • 文件本身:chgrp groupname file/dir
  • 文件及内容:chgrp -R groupname file/dir

更改文件权限

  • chmod [-R] <u|g|o><+|-|=><r|w|x> file|dir
  • file1拥有者去掉x权限:chmod u-x file1
  • file1拥有组添加w权限:chmod g+w file1
  • file1拥有者去掉x权,file1拥有组添加w权限:chmod u-x,g+w file1
  • file2的用户组其他人去掉r权限:chmod ugo-r file2
  • file3用户和组添加x权限,其他人去掉r权限:chmod ug+x,o-r file3

光盘挂载

  • 查看挂载、分区目录
    • df -lh
    • fdisk -l
  • 手动挂载
    • mount -a
    • mount 设备文件名 挂载点目录
  • 卸载
    • umount 分区目录
  • 自动挂载
    • 编辑:vim /etc/fstab
    • 写入: |盘符位置(分区)| 挂载目录 | 文件系统 | defaults | 0 | 0 | |:---:|:---:|:---:|:---:|:---:| :---: | |UUID,路径| 路径 | ext4, FAT32, nfts| | | 开机不检|
    • 保存

查看磁盘UUID

  • 先用mount挂载到某一文件夹下;
  • 用命令ls -l /dev/disk/by-uuid

history(历史命令)

  • ctrl+r:连续关键字搜索;
  • ![num]:history中第[num]个命令;
  • ![字符串]:匹配输入过的最近的命令;
  • 上下按键;

文件查看

  • cat /path/file:一次显示所有;
  • more /path/file:分页显示所有,回车刷一行,空格刷一页;
  • less /path/file:分页显示所有,回车刷一行,空格刷一页,pageup向前;
  • head /path/file:显示文件开头内容;
    • -n [行数] :前[行数]行;
  • tail /path/file:显示文件尾部内容;
    • -n [行数]:后[行数]行;
    • -f:动态显示数据(不关闭),常用于查看日志;

进程管理

  • 查看端口占用
    • lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000
      • netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000
  • 查看进程
    • ps -ef
    • ps -aux
  • 杀掉进程

Vim编辑器

进入编辑模式

  • i:光标前插入;
  • I:行首插入;
  • a:光标后插入;
  • A:行尾插入;
  • o:下一行插入;
  • O:上一行插入;
  • x:向后删一个字符;
  • X:向前删一个字符;
  • u:撤销一步;
  • r:替换光标所在;

编辑模式

  • ny, yy, nyy:字符、单行、多行复制;
  • x, dd, ndd:字符、单行、多行删除;
    • dd:也是剪切;
  • p:粘贴;
  • D:从光标到行尾删除;
  • ctrl+r:回复撤销;
  • ctrl+v:可视化模块;
  • ctrl+V:可视化行模块;

    • 多行插入:
      • ctrl+v选择块;
      • I:输入“#”或“//”;
      • Esc:退出;
  • ctrl+s:阻止之后的输入

  • ctrl+o:解除ctrl+s

命令行模式(“:”进入)

  • :w:保存;
  • :w!:强制保存;
  • :q:不存退出;
  • :q!:强制不存退出;
  • : wq!:强制保存退出;
  • 替换
    • %s/旧内容/新内容/gi
    • 1,3s/旧内容/新内容/gi
      • %:全部;
      • 1,3 :1~3行;
      • g:全部;
      • i:不区分大小写;
  • 查找
    • /内容
    • n:找下一个;
    • N:找上一个;

定制环境

  • 临时设置
    • :set nu:行号;
    • :set nonu:不显示行号;
    • :set list:显示控制符;
    • :set ai:自动缩进;
  • 永久设置
    • vim ~/.vimrc
    • 写入上述内容并保存;

同时处理两个文件

  • vim file1 file2
  • vim -o file1 file2:同窗上下分屏显示;
  • vim -O file1 file2:同窗左右分屏显示;
    • ctrl+w:两文件切换;
    • :qa:关闭退出俩文件;
  • diff file1 file2:对比两文件不同,仅输出不同部分;
  • vimdiff file1 file2:同窗左右分屏打开两文件,并比较不同部分;

vim插件管理

依靠git,网络不稳定;

手动设置软件自启动(针对远程桌面工具)

  • Scientific Linux 7.4
    • 应用程序-》工具-》优化工具-》开机启动程序
  • CentOS 7
    • 应用程序-》附件-》优化-》开机启动程序

Linux修改SSH登录欢迎语

  • 只需修改配置文件:/etc/motd (root权限下)
  • 无此文件创建一个即可;

Ubuntu安装低版本gcc和g++

本说明以ubuntu20.04为例

安装与配置

  • 使用命令安装gcc和g++

    • sudo apt-get install gcc-4.9
    • sudo apt-get install g++-4.9
  • 查看已经安装的gcc和g++版本

    • ls /usr/bin/gcc*
    • ls /usr/bin/g++*
  • 查看当前应用的gcc版本

    • gcc -v
    • g++ -v
  • 需要设置优先级(由于ubuntu20.04中已经存在gcc9.3,以便选取对应版本的gcc)

    • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40
    • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
    • sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40
    • sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
  • 选择gcc/g++版本

    • sudo update-alternatives --config gcc
    • sudo update-alternatives --config g++

    根据提示选择对应的gcc/g++版本

如果提示找不到新源

删除或添加系统引导项

  • 修改配置文件:/etc/grub2.cfg;

VS code 安装与配置

VS code 安装(参照官网

  • sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
  • sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

Methed 1-new

  • dnf check-update
  • sudo dnf install code

Methed 2-old

  • yum check-update
  • sudo yum install code

VS code 配置ROOT与Geant4库函数

  • 参考网站:

  • 方法简介:

    • 用vs code打开代码文件夹;
    • 在扩展选项中安装“C/C++”,“C++ intellisense”,“CMake Tools”;
    • 打开vs code控制台(ctrl+shift+p),找到“C/C++ :Edit Configurations(JSON)”点击,这时候会自动生成了一个隐形文件“c_cpp_properties.json”;
    • 对应添加如下信息
    "configurations": [
          {
              "name": "Linux",
              "browse": 
              {
                  "path": [
                        "${workspaceFolder}/sim/src",
                        "${workspaceFolder}/sim/include",
                        "${workspaceFolder}/yblib/src",
                        "${workspaceFolder}/yblib/include",
                        "/opt/root61600/include",
                        "/opt/Geant4/geant41004/include/Geant4"
                  ],
                  "limitSymbolsToIncludedHeaders": true
              },
              "includePath": [
                  "${workspaceFolder}/sim/src",
                  "${workspaceFolder}/sim/include",
                  "${workspaceFolder}/yblib/src",
                  "${workspaceFolder}/yblib/include",
                  "/opt/root61600/include",
                  "/opt/Geant4/geant41004/include/Geant4"
              ],
              "defines": [],
              "compilerPath": "/usr/bin/gcc",
              "cStandard": "c89",
              "cppStandard": "gnu++98",
              "intelliSenseMode": "linux-gcc-x64"
          }
      ],
      "version": 4
    }
    

Shell脚本

example1-检查复制进度

#!/bin/bash
 path="/mnt/backup/c2rootfile/"
 while [ 0 -le 1 ]
 do 
 message1=$(/usr/bin/ls -lhrt $path | tail -n 1)
 echo $message1
 sleep 10 
 message2=$(/usr/bin/ls -lhrt $path | tail -n 1)
 echo $message2
 sleep 10
 echo $(/usr/bin/ls -hrt $path | wc -l)
 echo "尚须拷贝文件数量:$[1087-$(/usr/bin/ls -hrt $path | wc -l)]"
 if [ "$message1" = "$message2" ]
 then
 exit 1
 fi
 sleep 10
 done

example2-find变形

#!/bin/bash
path=$1
name=$2
find $path -name "*.*" | xargs grep $name

example3-if中多个条件的逻辑

#!/usr/bin/bash

#for i in $(seq ${1} ${2})
for i in $(seq 207 458)
do
  {
    #if [ ${i} -gt 261 -a ${i} -lt 275 -o ${i} -gt 306 -a ${i} -lt 330 ]
    #if [ ${i} -gt 261 -a ${i} -lt 275 -o ${i} -gt 306 -a ${i} -lt 330 -o ${i} -gt 362 -a ${i} -lt 365 -o ${i} -gt 367 -a ${i} -lt 371 -o ${i} -eq 389 ]
    if [ ${i} -ge 262 -a ${i} -le 274 -o ${i} -ge 307 -a ${i} -le 329 -o ${i} -ge 363 -a ${i} -le 364 -o ${i} -ge 368 -a ${i} -le 370 -o ${i} -eq 389 ]
    then
      echo "In:the number ${i}!"
    else
      echo "Out:the number ${i}!"
    fi
  }
done

注意:在[ ]中不能用“&&“和” ||”!

example4-并行脚本

#!/usr/bin/env bash

# 获取脚本开始时间
start_ns=$(date +%s%N)
start_us=${start_ns:0:16}
# 王东玺所用数据:207--458
# 束流刻度数据:  1030-1048
# 源刻度数据:    1065-1129
# 调束等无效数据:262-274,307-329,363,364,368-370,389
runlist=(207 220 225 248 300 350 400 450 458)

# ============= 脚本主体 =========================
trap "exec 1000>&-;exec 1000<&-;exit 0" 2
thread=20
tmpfifo=$$.fifo
mkfifo $tmpfifo
exec 1000<>$tmpfifo
rm -rf $tmpfifo

for ((i=1;i<=$thread;i++))
do
  echo >&1000
done                

# 从任务队列中依次读取任务
for i in $(seq 207 458)
#for i in $(seq ${1} ${2})
#for i in ${runlist[@]}
do
  read -u1000
  {
    if [ ${i} -le 206 -o ${i} -ge 262 -a ${i} -le 274 -o ${i} -ge 307 -a ${i} -le 329 -o ${i} -ge 363 -a ${i} -le 364 -o ${i} -ge 368 -a ${i} -le 370 -o ${i} -eq 389 -o ${i} -ge 459 -a ${i} -le 1029 -o ${i} -ge 1049 -a ${i} -le 1064 -o ${i} -eq 1074 -o ${i} -eq 1077 -o ${i} -eq 1082 -o ${i} -eq 1093 -o ${i} -eq 1094 -o ${i} -eq 1103 -o ${i} -eq 1104 -o ${i} -eq 1107 -o ${i} -eq 1112 -o ${i} -eq 1115 -o ${i} -eq 1123 -o ${i} -ge 1130 ]
    then
      echo "the run of ${i} is bad!"
      echo >&1000
    else
      echo ${i}
     ./tele ${i} &> ./log/${i}
     echo >&1000
    fi
  } &
done
wait
exec 1000>&-
# ================================================


# 获取脚本结束时间,计算脚本运行时间
end_ns=$(date +%s%N)
end_us=${end_ns:0:16}
echo "==============================="
echo -n "cost time(s): "
echo "scale=3;($end_us-$start_us)/1000000" | bc

exit 0

北大网关断网后terminal登陆方法

本说明在北京大学网关掉线,而恰巧本人无法接触到自己主机无法手动登陆北大账户

  • 从北大官网下载北大网关客户端Linux版
  • 下载对应版本的客户端后,解压缩
    • tar .tar //for.tar文件
    • tar -zxvf .tar.gz //for .tar.gz
  • ./connect -u [usernumber] -p [password]
In [2]:
!jupyter nbconvert Linuxtips_xi.ipynb --template toc2
!jupyter nbconvert Linuxtips_xi.ipynb --to html
[NbConvertApp] Converting notebook Linuxtips_xi.ipynb to html

[NbConvertApp] Writing 320142 bytes to Linuxtips_xi.html

[NbConvertApp] Converting notebook Linuxtips_xi.ipynb to html

[NbConvertApp] Writing 318921 bytes to Linuxtips_xi.html

In [ ]: