linux属性

# 查看linux版本
lsb_release -a

# 查看nvidia显卡
lspci | grep -i nvidia

# 换源
/etc/apt/sources.list

用户权限

# 查看所有用户
cat /etc/passwd

# 查看用户组
cat /etc/group

# user添加到groupA用户组
usermod -aG groupA user

# 锁定newuser1
usermod -L newuser1

# 解除对newuser1的锁定
usermod -U newuser1

# 踢掉用户
pkill -kill -t tty

# 停用用户所有进程
pkill -u user

# 显示文件最后5行内容
tail -n 5 test.log

# 循环查看文件内容
tail -f test.log

# 查看特定行内容
sed -n 5p output.txt

# 添加用户
sudo adduser user1

# 删除用户
sudo userdel -r username

# 添加用户到sudo组
adduser username sudo

# 追加用户到sudo组
sudo  usermod -aG sudo username

# 将用户从sudo组删除,并添加到其他组
sudo usermod -G 用户组名  用户名

# 添加环境变量
export PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:$PATH"

# 改变文件拥有者和群组
chown root: log2012.log
chown -R joseph:joseph dir

# 查看用户所在组
groups user1

# 查看用户信息
id user1

# 修改密码
sudo passwd user

# 查看用户在线情况
who

# 查看自己是哪个终端
who am i

# 单向发送消息
write root pts/20
Hello, World!
Ctrl+d #发送并退出

# 群发消息
wall "hello, world!"

# 添加软件权限
sudo chmod u+s `which ping`

# 更改文件夹权限
chmod 775 -R dir

修改时间

date -R

#修改时间
date --set="2017-01-22 16:16:23"

查看日志文件

# 查看系统重启日志
last |grep reboot

进程管理

# 查看进程
ps -ef |grep vsftpd

# 查看服务
service vsftpd

# list stystem opened files,列出系统中打开的所有文件,因为linux上一切都是文件
# 查看端口
lsof -i:80
# 查看程序打开了那些文件
lsof -p 7876

# 查看进程占用端口
ps -ef | grep 进程名
netstat -nltp | grep  进程号

# 查看哪些服务占用
sudo lsof | grep nvidia

# 查看内存占用
free

# 以合理单位显示内存占用
free -h

# 查看单个进程内存cpu占用情况
top -p ppid

# top 以内存占用排名
top -o %MEM

# 查看内存占用前10的进程
ps aux | sort -k4,4nr | head -n 10

# 停止gdm服务
sudo systemctl stop gdm3

# glances 进程监控
apt install glances
热键
a 自动排序
c 按CPU使用率排序
m 按内存占用排序
i 按io速率排序进程
n 显示或吟唱网络流量统计


标准输入输出

echo log > /dev/null 2>&1

代表空设备文件
/dev/null 
# 代表重定向到哪里,例如:echo "123" > /home/123.txt
>
# 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
1
# 表示stderr标准错误
2
# 表示等同于的意思,2>&1,表示2的输出重定向等同于1
&

ubuntu apt

# list the installed software packages on your machine 
sudo apt list --installed | grep -i gnome

# 清理安装gnome时候留下的缓存程序软件包
apt-get clean

# 删除gnome的相关配置文件
apt-get purge gnome

# 卸载掉gnome
sudo apt-get remove gnome

# 使用代理安装
sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8118/" update

update-alternatives

# display 参数列出一个命令的所有可选命令
update-alternatives --display java

# config参数用于给某个命令选择一个link值
update-alternatives --config java

# install参数用于添加一个命令的link值,slave 创建的链接从属某一个主链接。
update-alternatives --install /usr/bin/java java /usr/local/java/jdk-9/bin/java 1702

# remove参数用于删除一个命令的link值,其附带的slave也将一起删除。
update-alternatives –remove java /usr/local/jre1.6.0_20/bin/java

grep

find . -name "*.php" | xargs grep

# 只输出文件中匹配到的部分 -o
grep -o 'matchcontent=[]'

# 取反
grep -v 'matchcontent'

# 查看当前目录文件名中含有nout4的文件
ls | grep nout4

sort & uniq

# 正排序
sort -n file

# 逆排序
sort -rn file

# 所有字符只显示一次
sort -nr file | uniq

# 所有字符显示一遍,并计算重复个数
sort -nr file | uniq -c

Find Linux Files by Name or Extension

find . -name "*.err"

finding out where a program is located

which firefox

networking

# 启动以太网卡
ifconfig eth0 up
sudo /etc/init.d/networking restart

# 网络重启
sudo /etc/init.d/networking restart
sudo systemctl restart NetworkManager.service

# 查看所有路由
route -n

# 查看网络地址
ip a

# 查看无线网络连接情况
iwconfig

# 查看以太网接口
lspci |grep -i 'eth'

# 去除IP地址
ifconfig eh0 0.0.0.0

# 添加ip
ip addr add 目的/网关 dev eth0

# 添加路由
sudo ip route add 目的ip/netmask via 192.168.1.1

# ping4次
ping -c 4 google.com

# 修改查看本地路由表
route

# 添加一条路由信息
route add -net 10.10.10.0/24 gw 192.168.0.1

# 删除一条路由信息
route del -net 10.10.10.0/24 gw 192.168.0.1

# 添加默认网关
route add default gw 192.168.0.1

# 查看路由表
netstat -r

# 查看tcp链接
netstat -t

# 查看udp链接
netstat -u

# 查看对应进程信息
netstat -ltp

# 每隔5秒展示tcp监听信息
netstat -tl -c 5

# 展示网卡信息
netstat -i

# 统计TCP链接状态
netstat -nat | awk '{print  $6}' | sort | uniq -c | sort -n

tcpdump

# FILTERING BY SOURCE AND DESTINATION
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

# FIND TRAFFIC BY IP
tcpdump host 1.2.3.4

# SHOW TRAFFIC RELATED TO A SPECIFIC PORT
tcpdump port 3389
tcpdump src port 1025

nc

# 将本地文件发送到远程服务器的80端口
nc 192.168.1.199 80 < data.txt

# 本地端口,将接收的数据重定向到本地文件
nc -l 8080 > data.txt

xargs

# 使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉
# 将上一个程序的标准输出传给下一个程序的命令行
echo xx | xargs -I {} command {}

# 列出所有文件名前缀是predict的文件
ls predict*

dd

dd if=<source file name> of=<target file name> [Options]

文件本地上传和下载

# 安装
sudo apt install lrzsz

# 上传
rz

# 下载
sz

# md5 校验
md5sum file

.bashrc 配置

alias vim='nvim'
alias ls='ls -ahG'

文件管理

# 统计挂载磁盘的整体情况
df -h

# 查看当前目录每个文件夹的情况
du --max-depth=1 -h
du -sh *

# 查看硬盘情况
fdisk -l

# Size of a directory
du -sh /tmp

# Size of a file
du -h /tmp/xyz

# 查询设备类型和文件系统
blkid

解压压缩

#extract
tar -x
#if the tar file also compressed with .tar.gz or tgz extension
tar -z
tar -xvf file.tar
tar -zxvf data.tar.gz

#unzip
unzip file.zip -d destination_folder

# 打包
tar czvf FileName.tar DirName
zip FileName.zip DirName

tree

#Tee command is used to store and view (both at the same time) the output of any other command.
ls | tee file

环境变量

vim .profile
export PATH=$PATH:/home/jeremie/Downloads/pycharm-community-2016.3.2/bin
source .profile

# 设置环境变量
export http_proxy="http://172.18.10.216:1080"

# 查看环境变量
echo $http_proxy

# 删除环境变量
unset http_proxy

crontab

sudo vim /etc/crontab
#每隔两分钟执行一次脚本
2 *   * * * root   /usr/bin/python3.5 /home/edgar/auto.py > /home/edgar/auto.log
# 分 时 日 月 周 用户 命令
* * * * * user command
# 每分钟执行一次
* * * * * user command
# 每隔2小时执行一次
* */2 * * * user command (/表示频率)
# 每天8:30分执行一次
30 8 * * * user command
# 每小时的30和50分各执行一次
30,50 * * * * user command(,表示并列)
# 每个月的3号到6号的8:30执行一次
30 8 3-6 * * user command (-表示范围)
# 每个星期一的8:30执行一次
30 8 * * 1 user command (周的范围为0-7,0和7代表周日)

nohup

# nohup 确保这个进程在断开 ssh 连接后依旧运行,& 让进程在后台运行
nohup jupyter notebook 2>&1 &

# 后台文件写入log
command >& file.txt(或者file.log) &

库的软链接指令速查

# locate 定位库的信息  
locate libcurl.so.4  

# ls -l  查看链接  
ls -l /usr/local/lib/libcurl.so.4  

# sudo rm -rf 删除软连接  
sudo rm -rf /usr/lib/x86_64-linux-gnu/libcurl.so.4  

# sudo ln -s 重建软连接  
sudo ln -s /home/anaconda2/lib/libcurl.so.4.4.0 /home/anaconda2/lib/libcurl.so.4  

# 文件夹软连接
ln -s /opt/linux/rootfs_dir  /home/jyg/rootfs_dir

# cmake --version 使用cmake时的链接库,如果有冲突则会报错。没有冲突,会输出版本信息  
cmake --version  

文件挂载

#Type this command to list the devices that are accessible on the computer:
fdisk -l

#格式化ext4
sudo mkfs.ext4 /dev/sdb1

# 创建目录并挂载文件
mount /dev/cdrom /mnt/cdrom

# 取消挂载
umount /mnt/cdrom

# 开机自动挂载
sudo blkid
# 添加UUID到/etc/fstab 添加UUID=63295b70-daec-4253-b659-821f51200be9 /home/data ext4 defaults,errors=remount-ro 0 1到/etc/fstab 其中UUID后面跟sdb1的UUID 重启

使用图形界面打开文件

# opens a file or URL in the user's preferred application
xdg-open $file

# 后台打开pycharm
./pycharm &

ss

# apt
apt-get install shadowsocks

#pip
pip install shadowsocks

# 服务启动
ssserver -c /etc/shadowsocks.json --log-file=/tmp/shadowsocks.log

# 本地启动
sslocal -c /home/mudao/shadowsocks.json

# 配置文件
{
"server":"::",  ##填写服务器外网ip地址,ip也可以写内网地址,只要能转发出来即可。
"server_port":8000,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"",
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false
}

# 后台运行
nohup ssserver -c /etc/shadowsocks.json > /dev/null 2>&1 & 

Privoxy

# install
sudo apt install privoxy

# 修改配置文件 
vim /etc/privoxy/config
#listen-address 127.0.0.1:8118 #取消注释
listen-address 0.0.0.0:8118 #取消注释
forward-socks5t / 127.0.0.1:1080 #取消注释

# 启动privoxy
systemctl start privoxy

# 添加socks5代理
export ALL_PROXY=socks5://127.0.0.1:1080

# 配置/etc/profile 添加http代理
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
export ftp_proxy=http://127.0.0.1:8118

systemctl

# 立即启动一个服务
sudo systemctl start apache.service

# 立即停止一个服务
sudo systemctl stop apache.service

# 重启一个服务
sudo systemctl restart apache.service

# 查看服务状态
sudo systemctl status apache.service

vsftpd

# /etc/vsftpd.conf

# 增加匿名访问目录
anon_root=/var/ftp

修改文件名编码

apt-get install convmv

gbk->utf-8
convmv -f gbk -t UTF-8 --notest -r 目录
convmv -f gbk -t UTF-8 --notest 测试.txt

#-f 参数是指出转换前的编码;
#-t 是转换后的编码;
#-r 递归处理子文件夹;
#--notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验;

jpg转text

sudo apt install caca-utils
cacaview 1.jpg

pdf转text

apt-get install poppler-utils
pdftotext php-manual.pdf php-manual.txt

格式化json

apt install jq
cat json.txt | jq '.'

统计文件行数

# c 统计字节数 l 统计行数 w 统计字数
wc -clw file