添加可执行文件路径到环境变量
export PATH=$PATH:/要添加的路径
添加共享库路径到环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_lib_path
也可以在 /etc/ld.so.conf 文件中添加库的搜索路径,然后执行ldconfig
ldconfig
可以加载该ld_lib_path路径到库链接路径,即执行该命令后,ld_lib_path路径下得库文件可以被找到并链接。
执行命令时自动输入‘y’
echo y | cmd
利用ssh远程执行服务器命令
fuction expect_server()
{
expect <
来判断$arg有没有被赋值,条件成立则没有被赋值。**
shell if[X$arg = X];then
打开ssh服务:
问题:ssh: connect to host xxx port 22: Connection refused解决
问题原因可能是:ssh-server未安装或者未启动。
ubuntu 11.10 默认安装openssh-client,但是木有安装server。
运行 ps -e | grep ssh
,查看是否有sshd进程。
如果没有,说明server没启动,通过 service sshd start (或 /etc/init.d/ssh -start)
启动server进程,如果提示ssh不存在 那么就是没安装server。
通过 sudo apt-get install openssh-server
命令安装即可。
netstat -tnlp
查看端口号的占用信息,可以打印出占用程序及程序ID
ps -ejHf | grep 441
查看进程执行信息
查看ssh端口开放状态
netstat -anp |grep 22
netstat -anp |grep ssh
lsof -i :22
kill命令不止用来结束进程,也可以给指定进程发送对应的信号
kill -l 可查看系统的信号的缩写及对应号,如11) SIGSEGV
ps未显示进程被报仍在运行进程,可能是/var/run下还有对应的xxx.pid文件,删除即可
/var/run下存放xxx.pid是关于进程的pid信息
/var/log下存放xxx.log是关于进程的log信息
service & systemctl
service命令其实是去/etc/init.d目录下,去执行相关程序
usage:
service --status-all
列出管理应用
service name option
option: [start\stop\restart]
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl
usage:
systemctl options name.service
option: [start\stop\restart\status]
pkg-config opencv --modversion
dpkg -i packagename
安装软件包
dpkg -r packagename
移除软件包
dpkg -S packagename
查看插件属于哪个软件包
dpkg -l packagename
查看软件包信息
查看已安装得软件包版本,也可使用dpkg -l packagename
sudo apt-get install apt-show-versions
apt-show-versions
查看所有安装包版本
apt-show-versions –p
查看指定安装包的版本
apt-show-versions –u
查看可更新包
apt-cache madison pacname
查询仓库中软件的所有版本
apt-cache show pacname | grep -i version
查看版本信息
apt-get -y install pacname
免去回答yes安装pacname
apt-get -y install pacname=version
安装指定版本
apt-get install -s pacname
模拟安装软件
apt-cache search packagename
搜索软件包
apt install packagename
安装软件包
apt install --reinstall packagename
重新安装软件包
apt remove packagename
卸载软件包
apt list pacname
列出软件清单
apt show pacname
显示软件包信息
apt search pacname
搜索相关软件包
apt list|gerp pacname
查看pacname相关的安装情况
apt autoremove
卸载所有自动安装且不再使用的软件包
apt purge pacname
卸载并清除软件包的配置
dpkg --get-selections |grep linux-image
update-alternatives命令的几个主要选项为:display、install、remove、config、list。
以python为例:
安装多版本python
#查看python文件位置
whereis python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /home/lxp3/anaconda36/bin/python python /home/lxp3/anaconda36/bin/python3.6 2
sudo update-alternatives --install /home/lxp3/anaconda3/bin/python python /home/lxp3/anaconda3/bin/python3.5 3
#查看当前python安装表:
update-alternatives --list python
#切换当前python:
sudo update-alternatives --config python
删除指定包:
sudo update-alternatives --remove python /usr/bin/python2.7 1
/var/lib/dpkg下的文件存放所有安装包信息,info下存放包的校验值等,status存放安装信息,请不要暴力删除,会出现整体安装的刷新及重新配置
Q1:files list file for package ‘xxx’ missing; assuming package has no files currently installed
R1:sudo apt install --reinstall pcname
, 根据情况添加-f,–fix-missing。
Q2:以上重装不行,报trying to overwrite ‘xxx’, which is also in package xxx
R2:
sudo dpkg-i --force-overwrite /var/cache/apt/archives/sysvinit_2.88dsf-41+deb7u1_amd64.deb #手动在缓存里面安装 sysvinit_2.88dsf-41+deb7u1_amd64.deb
sudo apt full-upgrade
nautilus
nautilus是GNOME桌面下的一个文件管理工具。 通过这个命令我们可以在终端下非常方便的打开指定目录的文件。
grep字符搜索
grep ‘^…$’ 是指, 匹配整个这个行中, 以什么开头, 以什么结尾. 指的是整行, 不是某个单词.
grep -w (word) 指的是匹配整个单词, 而不能是单词的一部分
grep -rn “xxx” --exclude-dir=dirname,在dirname之外的目录查找
patch -R 是反打patch,就是将打完patch的文件恢复到打patch之前。
ls -lh
以K、M、G显示文件大小
rm -fr !(file1)
#指定GBK GB18030编码也是可以的
unzip -O GBK 资料.zip
mount -rw /dev/xxx path
:将/dev/xxx 挂载到path下
umount path
:卸载path对应的设备
举例:将U盘挂载到/mnt/tmp下
sudo fdisk -l
: 查看分区情况,找到U盘对应的设备名(对应大小和文件系统FAT32),这里为/dev/sda1sudo mount -rw /dev/sda1 /mnt/tmp
挂载Linux系统挂载存储只读改成读写
/dev/cciss/c0d0p2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/dm-0 on /home/book/upload/BookFile1 type ext3 (rw)
/dev/dm-1 on /home/book/upload/BookFile2 type ext3 (rw)
/dev/dm-2 on /backup type ext3 (rw)
/dev/dm-3 on /home/book/upload/BookFile3 type ext3 (ro)
df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
du可以查看文件及文件夹的大小。
du
max-depth参数表示指定深入目录的层数,很重要,不指定的话,会显示所有层次目录
du -h --max-depth=1 /usr
1.8G /usr/share
614M /usr/lib
8.0K /usr/etc
2.1M /usr/kerberos
24K /usr/X11R6
14G /usr/local
37M /usr/libexec
35M /usr/sbin
224M /usr/include
[root@localhost /]# du -h --max-depth=1 /usr
rsync
https://blog.csdn.net/jiangyu1013/article/details/79754060
rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
由此语法可知,rsync有三种工作方式:
(1).本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
(1).将/etc/fstab拷贝到/tmp目录下。
[root@xuexi ~]# rsync /etc/fstab /tmp
(2).将/etc/cron.d目录拷贝到/tmp下。
[root@xuexi ~]# rsync -r /etc/cron.d /tmp
"–existing"选项使得只更新目标端已存在的文件。
"–remove-source-files"删除源端文件。
"–exclude"选项指定排除规则,排除那些不需要传输的文件。
“–delete"选项后,接收端的rsync会先删除目标目录下已经存在,但源端目录不存在的文件。也就是"多则删之,少则补之”。
find -name [filename],根据文件名查找文件
which [exec_tool],查看命令工具(python)使用的绝对路径
locate [filename],等同于find -name [filename],直接搜寻数据库,速度更快。
find忽略查找路径
find -path "./mnt" -prune -o -name "*eigin*"
""可以不加, -o不能省略
即find -path pathname -prune
用来指定忽略查找路径。
如果要忽略两个以上的路径如何处理?
find /findpath /( -path “ignorepath1” -o -path “ignorepath2” /) -prune …加上寻找条件
find /findpath /( -path “ignorepath1” -o -path “ignorepath2” /) -prune -o -name filename
find /findpath /( -path “ignorepath1” -o -path “ignorepath2” /) -prune -o -type f -name “*.conf” -print
注意/( 和/) 前后都有空格。
查找文件并删除
find / -name "*.mp3" |xargs rm -rf
修改文件夹及子文件拥有者及用户组
chown -Rh owner:owner dir
修改拥有者及组
chown -Rh owner dir
chgrp -Rh group dir
-R 递进操作(recursive),使操作生效于子目录及文件。
-h 使操作生效于链接文件。
chmod命令+s参数解释如下:
“为了方便普通用户执行一些特权命zd令,SUID/SGID程序回允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份。”
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。
原来只有某用户可以执行httpd这条命令, u+s后其他用户都可以使用httpd这个命令,都可享有指定+s的文件属主的权限。
chmod u+s file
就是给file程序的所有者以suid权限,答可以像root用户一样操作。
拷贝目录使用 -r
(星号* 配合 -r)
cp -r /tmp/src/* /tmp/dest
星号(*)对隐藏文件无效
需要隐藏文件时:(点号.配合-r)
cp -r /tmp/src/. /tmp/dest
cp的时候有重复的文件需要覆盖时会让不停的输入yes来确认,可以使用yes|
yes|cp -r /x y
想使用CP拷贝一个大目录(/home/study/test),但又不想拷贝其中的一个子目录(/home/study/test/test1),应该如何写命令行
cd /home/study/test
rsync -av --exclude test1/ --exlclude test2/ ../test/ /home/copydir
mkdir -p t/t1/t2
-p 会创建路径中的所有尚不存在的目录。若所有目录都存在,不报错,不创建。
需要在两个或多个不同目录频繁切换:
cd -
可以直接返回上一个目录
pushd 后加
pushd \
pushd 单独使用,能够调换栈顶目录和下一目录:
pushd
pushd使用介绍:push +2 返回栈顶下两层的目录;用于3个目录相互跳转;当前目录永远是栈顶目录。
pushd [-n] [+N | -N | 目录]
经常会遇到删除文件或者弹出U盘等设备时,提示设备占用,使用lsof可查看文件或设备(linux系统中设备即文件)占用情况(程序名,pid等信息)。
lsof [opts] [filename]
ls -l |wc
head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录。
使用-n可指定显示几行。
head -25
显示25行。
readelf可以查看二进制文件
readelf -h filename
查看二进制文件头,包括适用的系统版本及平台
readelf -d xxx.so
查看so共享库的依赖信息。
更改依赖:
patchelf --replace-needed libm.so.6 libm.so libcholmod.so
将libcholmod.so对 libm.so.6的依赖变为lib.so
更改soname:
patchelf --set-soname libnewname.so path/to/libmylibrary.so
参考:修改so库中的依赖名
ldd libindemind_module.so
readelf -d xxx.so
https://blog.csdn.net/baggio1006/article/details/17503113
分卷压缩:
tar cvzf - name | split -b 500m -d - name.tar.gz #分卷压缩name目录,并保持每个压缩包的大小不超过500m字节。命令执行后,会生成name.tar.gz00、name.tar.gz01等文件,注意此处name及name.tar.gz中的name要保持一致。
-表示默认处理。
关于split:
split -n 2 name.tar.gz name1.tar.gz
可以将name.tar.gz拆分成两个name1.tar.gz00及name1.tar.gz01,但是此命令不能用于还为生成的文件(不能使用管道tar cvzf - name | split -n 2 -d - name.tar.gz
不能执行)。
分卷解压:
cat name.tar.gz* | tar -zxvf -
#将各个分卷压缩包解压到当前目录
cat name.tar.gz* > name.tar.gz
#将各个分卷压缩包合成为一个name.tar.gz文件
sed -i 's/ori_str/new_str/' file
将file中每行第一个ori_str替换 为 new_str
sed -i 's/ori_str/new_str/'g file
将file中所有第一个ori_str替换 为 new_str
md5sum filename
可读取filename生成哈希值。
校验两个文本是否一致,可以对比哈希值是否一致。
切换root用户
sudo su 和 sudo -s都是切换到root用户,不同的是:
sudo su
环境用的是目标用户(root)的环境
sudo -s
环境用的是当前用户本身的环境
创建新用户并添加root权限
sudo adduser username
注意区分adduser与useradd
添加用户root权限
vim /etc/sudoers
# User privilege specification
root ALL=(ALL) ALL
username ALL=(ALL) AL
usermod -a -G sudo suveng //注意改成你自己的用户名
** adduser与useradd区别**
useradd:
“useradd +用户名” 不会在/home目录下创建同名文件夹,也没有创建密码;因此不能使用该用户登录。
使用 “useradd -m +用户名” 方式创建,可在/home目录下创建同名文件夹,然后利用 " passwd + 用户名" 为指定的用户名设置密码。
adduser:
“adduser +用户名” 直接在/home目录下会自动创建同名文件夹。
删除用户,只需使用一个简单的命令“userdel 用户名”即可。不过最好将它留在系统上的文件也删除掉,你可以使用“userdel -r 用户名”来实现这一目的。
sudo 免密用于脚本需使用sudo
https://blog.csdn.net/u011596455/article/details/76944065
sudo visudo
修改这一样,让所有sudo指令免密
xxx ALL=(ALL:ALL) NOPASSWD: ALL
[解决:Jenkins sudo:抱歉,您必须拥有一个终端来执行 sudo]
https://blog.csdn.net/fst438060684/article/details/80984233
那么第一个思路就是免密使用sudo了,假设我使用jenkins的账户是xdq,那么我用root账户 修改/etc/sudoers(或sudo visudo)的配置,添加如下两项:
xdq ALL=(ALL) NOPASSWD: ALL
Defalults:xdq requiretty
将任务放至后台运行
命令后加&
$ ./test.sh &
将已执行程序暂停/运行在后台
ctrl+z快捷键可直接将当前程序暂停在后台。
vi t.txt
ctrl+z后将vi暂停在后台,终端输入fg命令可直接重新调起。
jobs命令可以查看后台任务运行情况;
jobs -l 命令可显示执行任务的pid;
使用 fg 任务序号 可直接重新调起对应的后台任务;
使用bg 任务序号 可将后台暂停程序在后台运行。
command > out.file 2>&1 &
command > out.file &
将command输出重定向到out.file中 将错误信息输出到屏幕 &符号可将命令放于后台执行
使用nohup使进程执行时不被hup信号中断(在服务器上运行模型时用,放置ssh断开连接后,程序被退出)。
nohup command >out.file 2>&1 &
输出到文件logfile中,log信息不在屏幕显示
cmd > logfile
输出到文件logfile中,并在屏幕上显示:
cmd | tee logfile
cmd >&1 | tee logfile
将cmd的输出到终端,且将终端输出打印到log文件
追加输出到文件logfile中,并在屏幕上显示:
cmd >&1 | tee -a logfile
>后边加&表示后边跟的文件描述符,不是文件名,如>&1 重定向到标准输出(屏幕)
将命令正确执行和错误的输出结果都保存到文件log.log:
cmd 2>&1 | tee log.log -a
tee命令用于读取标准输入的数据,并将其内容输出成文件。
将终端的输出信息保存到log中:
sudo script screen.log
之后你在终端输入的相关命令,及终端的所有输出信息都被保存到screen.log文件中,然后执行以下命令,停止保存:
exit
在命令界面(esc不能编辑文本),在当前行任意位置,摁o键直接进入编辑页面并回车。
命令
:set nu 显示行号
:set hlsearch 高亮显示搜索结果
:vs xxx 竖栏显示xxx文件
ctrl+w x 交换左右栏显示,先同时嗯ctrl及w,然后放手,再摁下x,下同
:sp xxx 横栏显示xxx文件
使用ctrl+w 上下左右键切换文件栏目
:f 可以显示当前文件名
:!pwd 可以看当前的详细路径,这个用ctrl+z也可以将vi放后台查看。
:Ex 横排打开栏,当前文件所在的目录
:Ve 竖排打开栏,当前文件所在的目录
:se list
显示文件的空格。
dw 删除一个word
D 删除光标所在到行结束。
可用Esc-v-上下左右键选中字符
gu 转换选中为小写
gU 转换选中为大写
也可以Esc-gu/U-上下键会将选中变为小/大写
关于使用vi替换字符串:
:s/str1/str2/
替换当前行第一个 str1 为 str2
:s/str1/str2/g
替换当前行所有 str1 为 str2
:n,\$s/str1/str2/
替换第 n 行开始到最后一行中每一行的第一个 str1 为 str2
:n,$s/str1/str2/g
替换第 n 行开始到最后一行中每一行所有 str1 为 str2
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/str1/str2/
(等同于 :g/str1/s//str2/) 替换每一行的第一个 str1 为 str2
:%s/str1/str2/g
(等同于 :g/str1/s//str2/g) 替换每一行中所有 str1 为 str2
2. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#str1/#str2
/# 替换当前行第一个 str1/ 为 str2/
:%s+/str1/str10/+/str2/str20+
(使用+ 来 替换 / ): /str1/str10/替换成/str2/str20/
定位括号
"{"上按%,即可定位到对应的 “}”
#生成代码tag信息,用来追踪调用关系,-R表示文件夹下的代码进行递归创建
ctags –R
#变量名定义查找,直接用vi打开tagname定义代码处
vi –t tagname (请把tag替换为您欲查找的变量或函数名)
#####################以下是在vi中的tag相关使用,“:”开头的命令为VI中命令行模式命令
:ts(ts助记字:tagslist)
:tp(tp助记字:tagspreview)
:tn(tn助记字:tagsnext)
#直接跳到光标所在函数或参数的默认定义处
Ctrl+ ]:注意是按一下ctrl,再按]
#显示tag(光标所在函数/参数)所有定义的列表
g + ] :注意是按一下g,再按]
#跳转返回到上一个定义处查找,即Ctrl+ ]的反跳转
Ctrl+ T
解决关于ctags只能追踪本层目录下的代码
解决办法是在在vim的配置文件 ~/vimrc 添加如下内容:
set tags=tags
set autochdir
使如果源文件在当前文件夹下没有找到tags,可以到它的上层目录下继续寻找。
ctags使用参考
要使用更多tags文件,可以通过改变’tags’选项的设置来引入更多的tags文件。如:
vim下,(ex command) :set tags=./tags, ./…/tags, ./*/tags
python有调试器pdg,即python debug
adb 安卓调试
查看系统服务相关信息
adb shell dumpsys -l
adb shell service list
adb shell dumpsys media.camera |head
查看摄像头设备信息
usb转串口使用
minicom使用
安装:
sudo apt install minicom
使用:
sudo minicom
打开波特率端口配置界面
sudo minicom -s
配置好后保存退到首界面,便可以看到log信息。
默认的usb串口节点是/dev/ttyUSB0
repo stage 用于添加文件到暂存区
使用方法
repo stage -i
可以一步步与用户交替选择要添加到暂存区的文件。–interactive 交互式
repo sync -c
只下载当前分支的代码.
只下拉最新代码包,下拉速度快
git clone git仓库地址 --depth=1
清理修改或新增的文件:
如果没有add,则:
还原修改的文件:
git checkout .
单个文件/文件夹:
$ rm filename / rm dir -rf
所有文件/文件夹:
$ git clean -xdf
删除更改:
git clean -df
maven用来解决依赖关系的,通过pom.xml 来表明以来关系。