Linux

.sh脚本 #

shebang开头特殊行 #

这行告诉系统应该使用哪个解释器来执行脚本

#!/bin/bash

#! 是shebang的标识符,后面跟着解释器的路径

对于Python脚本#!/usr/bin/env python3.使用 /usr/bin/env 是为了确保系统能够在任何安装了Python的位置找到Python解释器,而不是硬编码路径。

设置参数 #

#!/bin/bash

verisim=/home/public/software/verisim/bin/verisim

if [ "$1" == "--case" ]; then
	if [ -n "$2" ]; then
		Case=$2;
	else
		echo "Error! No case at provided after --case"
		exit 1
	fi
else
	echo "run without appoint testcase"
	#Case=../testcase/gate_2000_2000_100.v
	#Case=../testcase/gate_1000_1000_50.v
	#Case=../testcase/gate_500_500_50.v
	#Case=../testcase/gate_200_200_20.v
	#Case=../testcase/gate_100_100_20.v
	#Case=../testcase/gate_40_40_10.v
	#Case=../testcase/gate_30_30_10.v
	#Case=../testcase/gate_20_20_10.v
	Case=../testcase/gate_20_20_5.v
fi

export Case
#设为环境变量,这样就可以在代码里面获得,eg: char *env_name = getenv("Case");  //get case from env_var



#以下是关于这个项目的编译的相关指令,无关
CFile=setUpSystemFunc_verisim.cpp
PliMap=../code/systf.tab


rm -rf verisim_history.db verisim.env verisim.db verisim_work verisim.log

${verisim} +acc+c ${Case} -P ${PliMap} ${CFile}  -no-mold

rm -rf verisim_history.zdb verisim.env verisim.zdb verisim_work verisim.log

#eg:
./run.sh --case ../testcase/gate_100_100_20.v 

输出重定向 #

循环 #

#!/bin/bash

export PATH=IVERILOG_PATH/bin:${PATH}
VPI=myvpi

# 定义一个包含所有测试案例的数组
cases=(
    "../testcase/test.v"
    "../testcase/gate_20_20_5.v"
    "../testcase/gate_20_20_10.v"
    "../testcase/gate_30_30_10.v"
    "../testcase/gate_40_40_10.v"
    "../testcase/gate_100_100_20.v"
    "../testcase/gate_200_200_20.v"
    "../testcase/gate_500_500_50.v"
    "../testcase/gate_1000_1000_50.v"
)

# 循环遍历所有的测试案例
for Case in "${cases[@]}"; do
    echo "Running case: $Case"
    
    # 清理之前的文件
    rm -rf *.vvp *.vpi obj_dir *.o myvpi.c
    
    # 触摸VPI的C文件
    touch ${VPI}.c
    
    # 编译Verilog文件和VPI文件
    iverilog "$Case" -o testcase.vvp
    iverilog-vpi -L. ${VPI}.c ./setUpSystemFunc_iverilog.cpp ./loopchecker.h -o testcase.vvp
    
    # 运行模拟
    vvp -M. -m ${VPI} testcase.vvp
    
    # 清理生成的文件
    rm -rf *.vvp *.vpi obj_dir *.o ${VPI}.c
done

echo "All cases have been run."

提升权限直接运行 #

#查看脚本权限
ls -l yourscript.sh

#改变权限
chmod +x yourscript.sh
chmod 755 yourscript.sh

7 代表 rwx(读、写、执行) 6 代表 rw-(读、写) 5 代表 r-x(读、执行) 4 代表 r–(读)

环境变量 #

程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的

种类 #

系统环境变量:公共的,对全部的用户都生效。

用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。

临时环境变量:使用时在Shell中临时定义,退出Shell后失效

查看环境变量 #

env	#查看所有环境变量
env|grep relate_name #用grep筛选和relate_name相关的环境变量
#常用的
echo $LD_LIBRARY_PATH #C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要
echo $LANG #Linux系统的语言、地区、字符集
echo $SHELL#用户当前使用的Shell解析器。通常为/bin/bash
echo $HOSTNAME#106服务器是 user_super_server
echo $HISTSIZE#保存历史命令的数目
echo $USER
echo $PWD#当前工作目录
echo $CLASSPATH#JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要

设置环境变量 #

export var
var='值' 
#或export var='值'

#在.bashrc等文件中写了后,需要source再能生效

如果环境变量的值没有空格等特殊符号,可以不用单引号包含。

采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。

变量名='值' 

export 变量名
或export 变量名='值'

设置系统环境变量 #

在/etc/profile文件中设置 #

用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。

在/etc/profile.d目录下设置 #

可以对不同的项目用.sh/.csh文件设置环境变量

这是Linux推荐的方法,不想要什么变量直接删除 /etc/profile.d下对应的 shell 脚本即可

在/etc/bashrc文件中设置环境变量 #

该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。

设置用户环境变量 #

  • .bash_profile
    • 当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
    • 但是现在没了?
  • .bashrc
    • 当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
    • 但是现在都这么做0.0

PATH #

  • 可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录。
  • PATH环境变量存放的是目录列表,目录之间用冒号:分隔
  • 最后的圆点.表示当前目录(加入了当前补录到PATH),如果PATH变量中没有包含圆点.,执行当前目录下的程序需要加./或使用绝对路径
  • PATH缺省包含了Linux系统命令所在的目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)
    • image-20240912114400865
    • /usr/bin里面有很多可执行文件
  • 在用户的.bashrc文件中,会对PATH进行扩充
    • 比如:export PATH=$PATH:$HOME/bin

LD_LIBRARY_PATH #

C/C++语言动态链接库文件搜索的目录

与PATH的格式相同

参考 #

linux环境变量 - a龙 - 博客园 (cnblogs.com)

安装方式的不同 #

  1. 使用apt

    更新软件包列表:sudo apt update

    安装软件包:sudo apt install package_name

    卸载软件包:sudo apt remove package_name

    查看安装过的包:apt list --installed

  2. 使用apt-get(较旧的Ubuntu版本中常用):

    更新软件包列表:sudo apt-get update

    安装软件包:sudo apt-get install package_name

    卸载软件包:sudo apt-get remove package_name

  3. 使用dpkg(直接操作.deb包):

    安装.deb文件:sudo dpkg -i package_name.deb

    卸载软件包:sudo dpkg -r package_name

  4. 使用pip(Python包管理工具):

    安装Python包:sudo pip install package_name

    卸载Python包:sudo pip uninstall package_name

  5. 使用make和源代码(用于安装从源代码编译的软件):

    通常需要先./configure,然后make,最后sudo make install

pip和pip3 #

pip install [package-name]              # 安装名为[package-name]的包
pip install [package-name]==X.X         # 安装名为[package-name]的包并指定版本X.X
pip install [package-name] --proxy=代理服务器IP:端口号         # 使用代理服务器安装
pip install [package-name] --upgrade    # 更新名为[package-name]的包
pip uninstall [package-name]            # 删除名为[package-name]的包
pip list                                # 列出当前环境下已安装的所有包

远程方法 #

xrdp #

利用xrdp实现Windows远程连接Kali Linux桌面-百度开发者中心 (baidu.com)

日志输出在 /var/log/xrdp.log 和 /var/log/xrdp-sesman.log。

sudo ufw allow from your_ip/24 to any port 3389

vnc #

windows环境安装VNC及远程连接linux(centos7) - 银河星光 - 博客园 (cnblogs.com)

vnc和ssh的区别 #

主要区别:VNC服务器和SSH服务器有一些显著的区别。 首先,VNC服务器提供图形界面的远程访问和控制,可以让用户直观地操作计算机。 而SSH服务器主要用于远程命令行访问和文件传输,对于不需要图形界面的操作更为适用。 其次,VNC服务器在传输图形界面时消耗较多的网络带宽,因为它需要传输图像数据。 相比之下,SSH服务器的传输开销较小,因为它主要传输文本和命令。 此外,SSH服务器采用了加密和身份验证机制,提供了更高的安全性,而VNC服务器的安全性相对较弱,需要通过额外的措施来增强其安全性。 使用场景:VNC服务器适合需要通过图形界面进行远程操作的场景,例如远程协助、远程教学和讲座、远程演示等

mobaxterm启用X server #

WSL #

MobaXterm上默认设置就好,根据提示在设置中开启一个东西。。

MobaXterm的Xserver是在win上的,而WSL的ip和win不一样,所以不能通过直接设置DISPLAY=0.0或者DISPLAY=localhost:0.0来指定Xserver

#bashrc
export windows_host=`ipconfig.exe | grep -n4 WSL  | tail -n 1 | awk -F":" '{ print $2 }' | sed 's/^[ \r\n\t]*//;s/[ \r\n\t]*$//'`
export DISPLAY=$windows_host:0
#也可以直接export DISPLAY=${window_ip}:0
#比如export DISPALY=192.168.1.28:0.0 # 192.168.1.28为windows当前ip,下次重连网络可能会变动

#还看到以下这个,没验证过
#export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
#export LIBGL_ALWAYS_INDIRECT=1

pycharm设置DISPLAY #

image-20241022194814099

image-20241022194903224

将本地文件复制到另一台服务器 #

【教程】通过SFTP将本地文件复制到另一台服务器

bsub #

bsub 是一个在许多 Unix-like 系统中用于提交作业到批处理系统(如 LSF、PBS 或 Slurm)的命令。它允许用户在后台运行程序,而不会占用终端。

bsub < job_script.sh #提交任务
bsub -n 4 < job_script.sh	#指定使用的节点数
bsub -R "span[hosts=1]" < job_script.sh #指定使用的CPU核心数

bkill <job_id> #终止

bjobs 	#查看作业状态
bjobs -l	#详细信息
bqueues #查看队列状态
bhosts	#查看系统资源

bsub -W 01:00 < job_script.sh #设置作业的运行时间限制