linux-常用命令

系统版本

cat /proc/version
uname -a

删除软件

apt-get remove 会删除软件包而保留软件的配置文件
apt-get purge 会同时清除软件包和软件的配置文件

# 彻底删除软件及其配置文件
apt-get --purge remove <package>
# 删除没用的依赖包
apt-get autoremove <package>
# 此时dpkg的列表中有“rc”状态的软件包,可以执行如下命令做最后清理:
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

重启系统

关机命令:
shutdown -h now(立刻进行关机)
halt(立刻进行关机)
poweroff(立刻进行关机)

重启命令:
shutdown -r now(现在重新启动计算机)
reboot(现在重新启动计算机)

查找文件

find < path > < expression > < cmd >
find / -name 'libpython3.6m.so.1.0'
// 通配符
find /etc -name '*srm*'
which gunicorn
whereis

复制依赖库到指定目录

替换参数 $1 应用名 $2 保存目录

deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
cp $deplist $2

查看应用启动参数

ps aux|grep primecoind

命令行脚本参数

$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"

$ ./myscript hello world
First arg: hello
Second arg: world

自动复位软件

until bitcoind; do echo "closed with exit code $?. Respawning..."; sleep 5; done

查找大文件

find . -type f -size +800M  -print0 | xargs -0 du -h | sort -nr

通过 PID 查找文件

readlink -f /proc/<pid>/exe

查看启动时间和运行时间

ps -p PID -o lstart,etime

设置系统时间

// 为啥这么变态的格式
// 通用的设置格式
date 月日时分年.秒
date 090811182020.00

date -s "01:01:01 2012-05-23" //这样可以设置全部时间
date -s "01:01:01 20120523" //这样可以设置全部时间
date -s "2012-05-23 01:01:01" //这样可以设置全部时间
date -s "20120523 01:01:01" //这样可以设置全部时间

unzip

将压缩文件 test.zip 在指定目录/tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令覆盖原先的文件。

unzip -o test.zip -d tmp/

所有的信息都输出到同一个文件中:

make xxx > build_output_all.txt 2>&1
其中的 2>&1 表示错误信息输出到 &1 中,而 &1,指的是前面的那个文件:build_output_all.txt 。
注意:上面所有的 1,2 等数字,后面紧跟着大于号’>’ ,中间不能有空格

查看引用库

  • 查看动态库
    ldd /usr/local/bin/bitcoind
  • 查看静态库
    nm ./libQt5Network.a -C |grep q_EC_curve_nist2nid

nm 列出的符号有很多, 常见的有三种:
T 类:是在库中定义的函数,用 T 表示,这是最常见的;
U 类:是在库中被调用,但并没有在库中定义(表明需要其他库支持),用 U 表示;
W 类:是所谓的“弱态”符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用 W 表示。

sed 流编辑器

RUN sed -i "s/archive.ubuntu./mirrors.aliyun./g" /etc/apt/sources.list

s 表示替换命令,/archive.ubuntu./ 表示匹配 archive.ubuntu./mirrors.aliyun./ 表示把匹配替换成 /mirrors.aliyun.//g 表示一行上的替换所有的匹配

sed 命令:

a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。
W file 写并追加模板块的第一行到file末尾。
! 表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。
# 把注释扩展到下一个换行符以前。

权限规则

drwxrwxrwx

第一个字母:代表文件类型
第2~4字符:表示当前用户的权限
第5~7字符:表示当前用户组权限
第8~10字符:表示其他用户的权限

d:目录
r[4]:读权限 w[2]:写权限
x[1]:可执行权限

chmod命令

a:所有权限/所有用户
u:用户
g:用户组
o:其他用户

+:加上权限
-:减去权限
=:等于权限

eg:给文件file.txt加上可执行权限

chmod a+x file.txt

八进制的数据表示权限 0 1 2 3 4 5 6 7

0:没有任何权限
1:x
2:w
3:xw
4:r
5:rx
6:rw
7:rwx

eg: 给文件一个755权限
chmod 755 file.txt

查看 boost 版本

dpkg -s libboost-dev | grep 'Version'
or
cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION"

删除非空目录

rm -rf 目录名

后台运行

两种方式:标准输出和标准错误缺省会被重定向到 nohup.out 文件中

command & : 后台运行,你关掉终端会停止运行
nohup command & : 后台运行,你关掉终端也会继续运行

压缩

tar czvf my.tar.gz dir1

tar czvf planet.tar.gz /etc/boa/*.* /etc/init.d/S04telnet /usr/lib/libcry*.* /usr/lib/libssl*.* /usr/bin/ftp.sh /usr/app/updatesql /usr/app/newVersion /usr/app/wwx/aaaArmInstaller_1208/boa_1203_arm /usr/app/wwx/www/cgi/a.cgi /usr/app/iplist.sql /usr/app/wwx/www/my.css /usr/app/wwx/www/HtmlJS.js

解压

tar -zxvf fileName.tar.gz
tar -jxf filename.tar.bz2

// 指定目录,目录需要存在
tar -zxvf fileName.tar.gz -C /folderPath

压缩

// 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –czf jpg.tar.gz *.jpg

添加用户

useradd -m 用户名
passwd 用户名

查看用户、用户组

查看所有用户
cut -d : -f 1 /etc/passwd

查看所有用户组
cat /etc/group
如果没有group文件使用下面的命令查看
cat /etc/passwd |awk -F [:] '{print $4}' |sort|uniq | getent group |awk -F [:] '{print $1}'

添加用户到用户组
sudo usermod -aG nginx tyler

修改用户

修改文件的所属用户
chown userName file

修改目录下所有文件、所有子文件、文件夹的所有用户
chown -R userName folder

修改用户组

修改文件的所属用户组
chgrp groupName file

修改目录下所有文件、所有子文件、文件夹的所有用户组
chgrp -R userName folder

查看文件后几行

tail ./debug.log

查看硬盘

df -h

挂载硬盘

先通过查看硬盘找到对应的描述符,这里是 sdb2。

sudo mount /dev/sdb2 /mnt/blocks/
取消
sudo umount /mnt/blocks

ps 进程查看

列出目前所有的正在内存中的程序
ps aux

显示所有进程
ps -A

ps 与 grep 组合使用,查找特定进程
ps -ef|grep ssh

-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
–lines<行数> 每页显示的行数
–width<字符数> 每页显示的字符数
–help 显示帮助信息
–version 显示版本显示

各列的含义:

F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 进程的ID
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何

环境变量

暂时生效
export PATH=$PATH:/usr/local/xxx/

只对当前登陆用户生效,永久生效
nano ~/.bash_profile
在下面字样后面添加
PATH=$PATH:$HOME/bin

对所有系统用户生效,永久生效

nano /etc/profile

PATH=$PATH:/usr/local/MATLAB/R2013a/bin
export PATH

使修改生效
source /etc/profile

查看环境变量

查看所有环境变量
env

查看指定环境变量
echo $PATH

开机自启动

修改 /etc/rc.d/rc.local 这个文件,添加想要自启动的程序命令即可。