常用linux命令

常用linux命令

命令帮助:

man显示详细的系统手册页中的内容
man ls
使用/ -a来搜索关键词
help显示简要的 shell 命令
ls --help
info显示比man还详细的命令说明
info ls

查看进程id:
ps -ef | grep tomcat // 搜索进程
ps aux | grep tomcat

分别显示:
UID    PID   PPID   C   STIME     TTY      TIME        CMD
root  18887 18828   0  08:09     pts/0    00:00:00    grep ApacheJetspeed
UID 程序被该user所拥有
PID 程序的 ID 
PPID 上级父程序的ID
C CPU 使用的资源百分比
STIME 系统启动时间
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何

ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。

kill pid杀死进程 kill -9 pid
ps 9879 //根据进程id显示
pidstat -p 5472 //根据进程id显示

# 利用ps批量kill
ps aux|grep server|grep -v grep | awk '{print $2}'|xargs kill -9

查看文件被哪个进程占用:

lsof filename
lsof -p pid | grep log

查看进程启动路径

ls -l /proc/1062410      //1062410为进程pid

lsof神器

lsof  -i :22   22端口信息
lsof  -u daniel   用户打开文件信息
lsof  -c syslog-ng   指定命令正在打开的文件和网络
lsof  -p 10075   进程打开的文件
lsof  /home/daniel/firewall_whitelist.txt   指定文件当前交互的进程

查看端口:
netstat -tupln | grep 4399 //根据进程id显示,也可搜索端口号
netstat -anp | grep 4399 //根据进程id显示
lsof -i:8080 //根据端口显示
查看当前文件夹下文件和文件夹:
find . -type d -maxdepth 1 显示当前目录下文件夹
ls –a 目前该目录下的所有文件及文件夹(包括隐藏文件)
ls –all 或 ls -l 目前该目录下的所有文件及文件夹(包括隐藏文件),而且还显示了每一个文件及文件夹的属性、所有者、创建时间、大小等等信息。
查看当前目录下文件夹大小:

sudo du -sh * | sort -n

查看文件大小:

ls -l --block-size=M

创建文件夹:
mkdir dirname
mkdir /home/dirname
mkdir -p train/dog #建多层文件夹
删除文件,夹:
rm -rf /home/dirname (r向下递归,f强制删除)
rm -rf /home/dirname/* (文件夹下所有文件)
修改文件,夹:
mv /home/dirname /home/anothername
mv /home/dirname/* /home/anothername
mv /home/dirname/a.html /home/anothername/b.html
修改文件夹名:
mv ./camera-openpose-keras-master ./keras
复制文件、文件夹:
cp -rf /home/dirname/* /home/anothername #dirname下所有文件
cp -R models …/caltech/models #将models文件夹及其以下文件复制
仅复制文件夹结构而不复制文件:
{}代表find查找到文件夹名,注意格式一定要正确

find . -type d -exec mkdir -p "../train/{}" \;

文件解压:
zip命令
   解压:unzip FileName.zip -d files
   压缩:zip -r FileName.zip DirName
tar命令
   解包:tar zxvf FileName.tar
   打包:tar czvf FileName.tar DirName
tar包压缩的时候用cvf参数,解压的时候用xvf参数
或压缩的时候用czvf参数,解压的时候用xzvf参数
不解压查看内部文件:
tar tvf my_file.tar.gz

Linux压缩保留源文件的方法:
gzip –c filename > filename.gz
Linux解压缩保留源文件的方法:
gunzip –c filename.gz > filename

1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e filename解压
9、*.zip 用 unzip 解压
批量解压:
for tar in *.tar; do tar xvf $tar; done
合并文件解压:
cat part*.tar | tar -zxv
tar

-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

查找文件:
find /var -name tmp.txt
nohup后台 重定向:
nohup python app.py >/dev/null 2>&1 & (0、1和2分别表示标准输入、标准输出和标准错误信息输出)
查看ip:
外网:curl ifconfig.me
内网:ifconfig
一行执行多条命令:

a && b   //a执行成功才执行b
a || b	 //a执行不成功才执行b
a ; b    //a,b顺序执行

空间、内存、CPU使用

top cpu运行情况
df -m 以mb形式查看磁盘空间
free 查看内存使用情况

查看程序有几个版本:
都可以修改默认的版本

alternatives --config java
update-alternatives --display java

查看命令路径

which java // PATH路径中第一个JAVA的位置,也就是JAVA命令默认执行的位置
whereis java  // 所有包含java(不管是文件还是文件夹)的路径都列了出来。

screen 后台的一种方式
建立screen:

screen
screen vi test.c

不中断程序,暂时断开会话,关闭ssh:

C-a d 即Ctrl键+a键,之后再按下d键
C-a ?来查看所有的键绑定

当前存在screen:

screen -ls

链接到已存在screen:

screen -r 16582 或者 自定义的name

如果shell突然断开而screen还是attached状态是时,使用

screen -D  -r <session-id>

如果由于某种原因其中一个会话死掉了,使用screen -ls会显示该会话为dead状态。

使用screen -wipe命令清除该会话。

使用C-a A给窗口起名字。使用C-a w可以看到这些窗口名字。注意此处窗口指的是一个screen内部的多个tab。如果想为每个screen自定义name,从而避免每次找id的情况,可以使用

新建screen: screen -S name 
或者对已存在screen使用: ctrl+a :sessionname 自定义name

再次登入时只能显示部分历史日志,此时可以进入选择模式来翻页查看:

Ctrl-a <Esc> 进入选择模式
<PageUp> 或 Ctrl-u 光标上移一页
<PageDown> 或 Ctrl-d 光标下移一页
<Left> 或 h 光标左移一格
<Down> 或 j 光标下移一行
<Up> 或 k 光标上移一行
<Right> 或 l 光标右移一格
<Space> 选择开始,选择结束
<Esc> 退出选择模式
Ctrl-a ] 粘贴选择的内容

更多命令
查看磁盘,文件夹大小:

df -h
du -h --max-depth=1
查看当前目录下每个子目录的文件数量
find . -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l); echo "$dir : $count"; done

显示当前绝对路径

pwd

查看添加环境变量:

查看
export
或
echo $PATH

查看所有设置的变量
set | grep nccl
永久添加(影响当前用户):
vim ~/.bashrc
export PATH="/data/anaconda3/bin:$PATH"
source ~/.bashrc
永久添加(影响所有用户):
vim /etc/profile
文档最后添加:
export PATH="/data/anaconda3/bin:$PATH"
source /etc/profile

必须source

暂时添加。终端关闭后失效
export PATH=/data/anaconda3/bin:$PATH

查找并统计文件数量:
f为普通文本,wc进行数量统计

find . -type f -name 'cat*' | wc -l # 12500

统计文件夹数量:

find . -type d -name 'ZJL*' | wc -l

find、grep、wc使用方法简单总结
Xargs用法详解(原创)
查找文件,随机选取,再移动到特定文件夹:
-n11250表示选取11250个文件,xargs -I file表示将每个文件名逐一赋值给file,然后执行mv file train/cat/

find . -name "cat*" -type f | shuf -n11250 | xargs -I file mv file train/cat/
find . -maxdepth 1 -type f -name 'cat*'| xargs -I file mv file val/cat/

添加linux用户

# 添加用户文件夹和用户名
sudo useradd -d /home/username -m username
sudo adduser username
# 添加用户登录bash环境
sudo vim  /etc/passwd 用户后加:/bin/bash
修改(初始化)密码:sudo passwd name
删除用户:sudo userdel name
提高用户权限:sudo vim /etc/sudoers
查看所有用户:cat /etc/passwd
一句命令行将用户添加sudo权限:sudo adduser <username> sudo(下次登陆才生效)

kill用户所有进程

killall --user name1
pkill -u username

批量修改文件后缀:
awk -F 表示将文件名使用"."拆分

find . -name '*.JPEG' | awk -F "." '{print $2}' | xargs -i -t mv ./{}.JPEG ./{}.jpeg

AWK:
awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
详细

使用空格或者逗号分割每一行,$0表示整行,$1表示分割的第一个: 
awk -F '[ ,]+' '{print $3" "$7}' test.txt
BEGIN、END提前、之后的操作
ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'

根据第一列是否为1,提取数据。默认空格分隔:
awk '$1==1{print $0}' tr.libsvm4 > tr_pos

修改文件夹,文件权限,linux的-bash: ./xx: Permission denied:
权限说明

修改读写权限:
chmod 777 xx.sh
chmod 777 olddata/ -R

查看文件权限:
ls    -l      filename   

查看文件夹权限:
ls -ld    directoy
文件所属用户组:chgrp -R user smb.conf 或  chgrp username username/
文件所属拥有者:chown -R root /etc/config.cfg 或  chown username username/
chown -R root:root /home  #-R递归文件夹子文件夹,root:root用户组,用户名

查看文件占用者:

#备注: 如果命令是在普通用户下开启,是没有结果的,需切换管理员权限
fuser xxx
fuser -km /datatmp

逐行读取文件路径,后复制文件:
awk对每行数据差分, $2==0过滤数据,注意如果你在windows编辑的map.sh,因为换行\r\n与unix下\n不同,会失败。需使用dos2unix转换一下。

cat map.sh | while read line; do awk -F "," '$2==0 {print $4}' | xargs -i cp ./images/{} ../test/{} ;  done

两台linux的文件/文件夹传输:

上传:
scp /path/filename   username@serverip:/path/
scp -r local_dir username@serverip:remote_dir

下载:
scp username@serverip:/path/filename /var/www/local_dir
scp -r username@serverip:/var/www/remote_dir/  /var/www/local_dir

清除GPU的内存占用:

查看哪些进程占用GPU
sudo fuser -v /dev/nvidia*
kill进程
kill -9 12345
2号 SIGINT:中断信号
9号 SIGKILL:杀死信号
11号 SIGSEGV:段错误信号
19号 SIGSTOP:暂停信号(如使用control + z操作)
18号 SIGCONT:继续信号(对应19号暂停信号)

搜索目录下所有文件中是否包含某字符串:

grep -r "test"  /var/log/

CPU问题排查

top
iotop
sar
 ps aux | grep 进程ID 来获取CPU与内存占用率

CPU问题排查

查看文件前几行并保存文件:
情景linux–一张图搞懂head -n和tail -n

head -n 10 /etc/profile
tail  -n 5 /etc/profile
head -n 10 /etc/profile >>/home/save #保存文件
cat /home/save

cat filename | tail -n +3000 | head -n 1000 #从第3000行开始,显示1000行
cat filename| head -n 3000 | tail -n +1000 #显示1000行到3000行
sed -n '5,10p' filename #查看文件的第5行到第10行
less {文件}	

/字符串	向下搜索“字符串”的功能
?字符串	向上搜索“字符串”的功能
n	重复前一个搜索(与 / 或 ? 有关)
N	反向重复前一个搜索(与 / 或 ? 有关)
b	向前翻一页
d	向后翻半页
q	退出 less 命令
空格键	向后翻一页
向上键	向上翻动一行
向下键	向下翻动一行
随机选取行数保存:
shuf -n 916891 te.libsvm > te.libsvm10

如果选取行数超过文件行数,使用r重复采样
shuf -r -n 15791434 tr_pos > samp_pos

CPU核数统计:
一个物理封装的CPU(通过physical id区分判断)可以有多个核(通过core id区分判断)。
而每个核可以有多个逻辑cpu(通过processor区分判断)。
一个核通过多个逻辑cpu实现这个核自己的超线程技术。
也就是一个物理核包含多个逻辑CPU

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看内 存信息
cat /proc/meminfo

ubuntu查看安装软件:

# 查看安装
dpkg -l | grep docker
#删除软件
apt-get purge  docker

sudo无法提升cd权限:

#默认缺省为获取root 用户
sudo su 或者sudo -sH

逐行比较文本差异:

diff file1 file2

合并文件:

将file1.txt和file2.txt合并到file.txt
cat file1.txt file2.txt > file.txt

将file1.txt追加到file2.txt的末尾
cat file1.txt >> file2.txt

随机从文件中固定行,分割文件
shuf可以随机从文件中提取多少行数据,但是要实现不重复分割就不行了。

# 首先打乱数据:
shuf train.txt > train_shuf.txt
# 再使用tail head分割:
head -n3079051 train_shuf.txt > va.libsvm0  #使用head提取3079051行
tail -n+3079052 train_shuf.txt > tr.libsvm0 # 使用tail提取剩余行数,注意+1

批量添加文件后缀:

将 abcd.jpg 重命名为 abcd_efg.jpg:
for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done

回收buffer、cache内存:

cat /proc/sys/vm/drop_caches #0
sync   #强迫将未写入的缓存写入硬盘
echo 3 > /proc/sys/vm/drop_caches  #改成3
cat /proc/sys/vm/drop_caches
free -h

linux查看占用内存最多的程序:

1.linux查看占用内存最多的程序

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

2.查看占用cpu最多的程序

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

挂载共享文件夹:

showmount --exports nas-server-IP   显示服务器上共享了那些目录。
mount nas-server-IP:share-dir your-local-dir 然后mount命令

查看当前用户安装的软件

comm -23 <(apt-mark showmanual | sort -u) \
         <(gzip -dc /var/log/installer/initial-status.gz |
           sed -n 's/^Package: //p' | sort -u)

删除文件夹中大量文件
Linux下删除大量文件

mkdir empty_dir
rsync -a --delete empty_dir/    yourdirectory/
cd yourdirectory
perl -e 'for(<*>){((stat)[9]<(unlink))}'

快速解压:

pigz -dc target.tar.gz | tar xf -

ctr-c ctr-z

ctr-c 终止程序
ctr-z 后台挂起程序,可使用fg重新启动

jobs -l 显示后台工作
kill %1 kill编号为1的后台工作

Ctrl+C - SIGINT
Ctrl+\ - SIGQUIT
Ctrl+Z - SIGTSTP
SIGINT 
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
SIGQUIT 
和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
SIGTERM 
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
SIGSTOP 
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略

cd切换回上一操作所在路径

cd -

alias:

alias ll='ls -l'
ll /opt/cores/

core dump:
gdb调试常用实用命令和core dump文件的生成

# 启动
gdb7.12 /opt/cores/embedding_server.1565355483.2829246 /opt/cores/core.embedding_server.1565355483.2829246
# 列出程序崩溃时的堆栈信息
bt
# 退出
q
gdb EXEFILE COREFILE

#或
gdb -c | --core COREFILE EXEFILE

#或
gdb COREFILE
file EXEFILE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值