- VM startup
- tmp dir
- source and sh
- fpm
- cpu and mem
- find and grep
- netcat
- touch
- output redirection
- cmake
- qmake
- screen and virtualenv
- anaconda
- git
- ssh-server
- others
Linux has become a popular choice for servers, embedded systems, and a wide range of computing devices, offering a powerful and customizable environment for users and developers. Considering many commands are used in Linux, in this post, I mainly make some notes when I use the Linux system.
VM startup
vmrun start "/home/myrespect/vmware/Ubuntu 64-bit (2)/Ubuntu 64-bit (2).vmx"
Script setup reference. Configure vm to start automatically:
sudo update-rc.d vmware-autostarts defaults //script file vmware-autostarts
update-rc.d -f <basename> remove // update-rc.d is a script used to update system startup items. The corresponding script is located in the /etc/init.d/ directory
tmp dir
Prevent the files saved in the tmp directory from disappearing after restarting the system in Ubuntu system:
-
Open the terminal
-
The cd command enters /etc/default in sequence.
-
Modify rcS with root permission: sudo chmod 0666 rcS;
-
Select E in vim/vi to enter rcS, edit rcS, and change TMPTIME=0 to =-1;
source and sh
source filepath使得当前shell读入路径为filepath的shell文件,并依次执行文件中的语句,使之立即生效.
sh filepath会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export.
fpm
fpm打包工具
gem install fpm
fpm -s dir -t deb -v 1.0 -n slurm-17.02.6 --prefix=/usr -C /tmp/slurm-build .
-s 指定源类型(支持的源类型包,dir, rpm, gem, python) -t 指定目标类型(指定目标类型rpm, deb, solaris, puppet) -v 指定包的版本号 -C指定打包的相对路径 -n 指定包的名字
cpu and mem
查看cpu: lscpu
查看usb: lsusb
查看内存: free
查看内存: htop
系统内核: uname -a
每秒显示nvidia-gpu的使用: watch -n 1 nvidia-smi
清空当前登录终端的历史命令: history -c
读取存放记录的文件, history -r ~/.bash_history
ubuntu查看cuda版本, cat /usr/local/cuda/version.txt nvcc -V
CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
内存消耗最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
MEM 进程的内存占用率, VSZ 进程所使用的虚存的大小, RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the “resident set size” meaning physical memory used), TTY 与进程关联的终端.
find and grep
在使用linux时进行文件查找, 主要由find和grep命令:
- find命令是根据文件的属性进行查找, 比如文件名(-name), 文件大小(-size), 所有者(-user), 所属组(-group), 是否为空(-empty),访问时间(-atime), 修改时间(-mtime);
find / -name httpd.conf #从根目录下查找文件httpd.conf find / -user Jason #查找系统中属于Jason这个用户的文件
- grep 是根据文件的内容进行查找, 会对文件的每一行按照给定的模式进行正则匹配查找:
正则表达式主要参数:
. 匹配所有的单个字符 [A-Z] 指定范围 \ 转义字符,忽略正则表达式中特殊字符的原有含义 * 匹配任意长度字符,长度可以为0
grep文件内容查找:
grep expression -i #-i 不区分大小写, -n显示匹配行和行号, -c显示匹配的文本行总数 grep ‘test’ d* #显示所有以d开头的文件中包含test的行 grep magic /usr/src #显示/usr/src/目录下的文件(不包含子目录)包含magic 的行 grep -nr magic /usr/src #包含子目录, 且显示匹配行和行号
ps和grep搭配查看系统进程:
ps -aux | grep "test.sh" #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分 ps -fA | grep python #A:显示所有进程 f:显示UID, PPIP栏位 ps -ef | grep mysqld #看看是否有mysqld_safe 和mysqld进程
netcat
nc: netcat是linux下的一个用于调试和检查网络工具包,可用于创建TCP/IP连接,最大的用途就是用来处理TCP/UDP套接字,netcat工具用于服务器模式,可以监听指定端口,nc -l 2389 然后可以用客户端模式连接到2389端口,nc localhost 2389, 如果你现在你输入一些文本,它将发送到服务器端.
端口扫描: nc -v -w 3 10.1.50.58 -z 23-28
-v 表示详细输出,-w seconds timeout的时间,-z 将输入输出关掉,用于扫描时,其中端口号可以指定一个范围.-k参数控制让服务器不会因为客户端的断开连接而退出
文件拷贝 启动监听:nc -l 9999 >tmp.txt 传送文件:nc localhost 9999 < .bashrc 查看文件:cat tmp.txt
touch
touch 命令:用于把已存在的文件的时间标签更新为系统当前的时间, 数据不会被修改; 还可以用来创建新文件;touch -d <时间日期> 使用指定的日期时间, 而非现在的时间;时间日期>
output redirection
bin/run-example SparkPi 2>&1 | grep “Pi is” #命令中的 2>&1 可以将所有的信息都输出到 stdout 中,否则由于输出日志的性质,还是会输出到屏幕中;
/dev/null 表示空设备文件 0 表示stdin标准输入 1 表示stdout标准输出 2 表示stderr标准错误
command 1>a 2>&1: &1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a
cmake
cmake 是一种跨平台编译工具, 主要是编写CMakeList.txt文件, 然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件, 最后用make命令编译源码生成可执行程序或共享库. cmake 指向CMakeLists.txt所在的目录,一般建议新建一个新的目录,专门用来编译:
mkdir build
cd build
cmake ..
make
qmake
Linux 下的hello.pro文件的写法:
#指定源文件,指定头文件,指定目标文件名
SOURCES = hello.cpp /
main.cpp
HEADERS += hello.h
TARGET = filename
CONFIG用来告诉qmake关于应用程序的配置信息
平台相关性处理,如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中,否则忽略;
win32 {
SOURCES += hello_win.cpp
}
有了hello.pro文件后生成Makefile
qmake -o Makefile hello.pro
screen and virtualenv
screen -S yourname 新建一个yourname的会话,
screen -r yourname 返回一个yourname的会话
screen -ls 列出所有会话
screen -d 执行detach 在保证里面的程序正常运行的情况下让screen 挂起
virtualenv virtual
source virtual/bin/activate
deactivate
pip freeze -> requirement.txt
pip install -r requirement.txt
pip list 查看环境下的pip包
anaconda
conda install -c jjhelmus tensorflow-base
conda create -n (name)
source activate basename
source deactivate basename
conda remove -n (name) –all
conda info -e # check the installed environment
git
sudo apt-get install git
sudo apt-get install openssh-server openssh-client //然后可以ssh-keygen避免每次输入密码
sudo useradd git //useradd 和 adduser有区别,其实推荐adduser
sudo passwd git
sudo mkdir /home/git/repositories //创建git仓库存储目录和权限
sudo chown git:git /home/git/repositories
sudo chmod 755 /home/git/repositories
su git
cd /home/git/repositories
git init --bare gitName.git
git status
git add -A # Add all new and changed files to the staging area
git commit -m "[commit message]" # Commit changes
git push -u origin [branch name] # Push changes to remote repository (and remember the branch)
git diff file # Preview changes before merging
git checkout # Switch to a branch and discard the changes
git reset HEAD file # Discard changes in staging area
Git submodule允许将一个Git仓库当作另外一个Git仓库的子目录。这允许克隆另外一个仓库到你的项目中并保持你的提交相对独立。 首先你要把外部的仓库克隆到子目录中。你通过git submodule add将外部项目加为子模块;
ssh-server
sudo apt-get install openssh-server
sudo service ssh start
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub name@192.168.1.100
others
-
可以用hostname 进行DNS解析,对/etc/hosts文件进行ip地址和hostname映射
-
GID: 组ID,用来标识用户组的唯一标识符; UID:用户ID,用来标识每个用户的唯一标识符
-
Linxu下的ldd命令用于打印程序或者库文件所依赖的共享库列表
-
gnupg是加密软件的集合, gpg -c file.txt 加密文件, rm file.txt 删除文件, gpg file.txt.gpg解密文件
-
bash script
This_DIR=$(cd $(dirname $0); pwd)
DATA_DIR=${THIS_DIR}/../data
mkdir -p “$DATA_DIR”
tar -zxf file.tar.gz -C /usr/local/ #-C: 指定解压到的文件路径