linux
linux属性
# 查看linux版本
lsb_release -a
# 查看nvidia显卡
lspci | grep -i nvidia
# 换源
/etc/apt/sources.list
# 查看服务器配置
lscpu
# 查看硬盘编号
ls /dev/disk/by-id -al
用户权限
# 查看所有用户
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 用户组名 用户名
# 将用户从一个组中删除
gpasswd -d userName groupName
# 添加环境变量
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"
关机
sudo shutdown now
日志
# 查看系统重启日志
last |grep reboot
# 查看系统日志
dmesg
# 自定义dmesg输出
dmesg |grep [keyword]
进程管理
# 查看进程
ps -ef |grep vsftpd
# 查看服务
service vsftpd
# list stystem opened files, 列出系统中打开的所有文件, 因为linux上一切都是文件
# 查看端口
lsof -i:80
# 查看端口占用
netstat -tunlp | grep 端口号
# 查看程序打开了那些文件
lsof -p 7876
# 查看进程占用端口
ps -ef | grep 进程名
netstat -nltp | grep 进程号
# 查看哪些服务占用
sudo lsof | grep nvidia
# 查看内存占用
free
# 以合理单位显示内存占用
free -h
# 查看硬盘读写io
iostat
# 查看单个进程内存cpu占用情况
top -p ppid
# top 以内存占用排名
top -o %MEM
# 查看特定用户的进程
top -u josep
# VIRT代表进程当前时刻有多少内存可以访问
# ES 意味驻留内存大小, 是当前进程真正占用物理内存的精确反映.
# 查看内存占用前10的进程
ps aux | sort -k4,4nr | head -n 10
# 查看系统日志
sudo cat syslog
# 停止gdm服务
sudo systemctl stop gdm3
# glances 进程监控
apt install glances
热键
a 自动排序
c 按CPU使用率排序
m 按内存占用排序
i 按io速率排序进程
n 显示网络流量统计
# fuser 报告进程使用的文件和网络套接字
# 列出使用/etc/filesystems文件的进程的进程号和用户登录名
fuser -u /etc/filesystems
# 查看那些程序使用tcp的80端口
fuser -v 80/tcp
# 杀死访问指定文件的所有进程
fuser -k 443/tcp
# 查看哪个用户哪个进程占用着此设备
fuser -m -v /dev/sdb1
标准输入输出
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
&
系统设置
环境变量
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
字体配置
# /usr/share/fonts/下新建winFonts目录
sudo mkdir -p /usr/share/fonts/winFonts
# 然后将字体文件拷贝到此文件夹下
sudo cp ~/Desktop/font/*.ttf /usr/share/fonts/winFonts/
# 修改权限
sudo chmod 755 /usr/share/fonts/winFonts/*.ttf
# 生成核心字体信息
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
# matplotlib报错问题
sudo apt install msttcorefonts -qq
rm ~/.cache/matplotlib -rf
systemctl
# 立即启动一个服务
sudo systemctl start apache.service
# 立即停止一个服务
sudo systemctl stop apache.service
# 重启一个服务
sudo systemctl restart apache.service
# 查看服务状态
sudo systemctl status apache.service
系统休眠
# 查看是否开启自动休眠
sudo systemctl status sleep.target
# 关闭自动休眠
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# 查看自动休眠是否关闭
systemctl status sleep.target
rc.local开机启动
# 开机启动
创建/etc/rc.local文件
# rc.local文件第一行添加
#!/bin/sh -e
# 确保/etc/rc.local可执行
sudo chown root /etc/rc.local
sudo chmod 755 /etc/rc.local
# 验证rc.local工作正常
sudo systemctl status rc.local.service
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
添加虚拟内存
# 创建swap文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
库的软链接指令速查
# 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
命令工具
grep
find . -name "*.php" | xargs grep
# 只输出文件中匹配到的部分 -o
grep -o 'matchcontent=[]'
# 取反
grep -v 'matchcontent'
# 查看当前目录文件名中含有nout4的文件
ls | grep nout4
# 从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行:
find . -name "*.in" | xargs grep "thermcontact"
# 查找当前目录中不含有algo_name文本的文本文件,并将文件名列出来
find . -name "arima*.json" -exec grep -lv "algo_name" /dev/null {} +
# 查找当前目录中不含有algo_name文本的文本文件,并将计算文件的个数
find . -name "arima*.json" -exec grep -lv "algo_name" /dev/null {} + | wc -l
sort & uniq
# 正排序
sort -n file
# 逆排序
sort -rn file
# 所有字符只显示一次
sort -nr file | uniq
# 所有字符显示一遍,并计算重复个数
sort -nr file | uniq -c
查看文件大小并排序
du -sh /usr/* |sort -nr | head
统计每个文件的行数,并根据行数对文件进行排序
wc -l * | sort -n
查看开头是NN的文件名的行数,并根据每个文件的行数进行排序
wc -l NN* | sort -n
Find Linux Files by Name or Extension
find . -name "*.err"
finding out where a program is located
which firefox
xargs
# 使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉
# 将上一个程序的标准输出传给下一个程序的命令行
echo xx | xargs -I {} command {}
ls
# 列出所有文件名前缀是predict的文件
ls predict*
# 列出所有文件名前缀是predict的文件,并计算个数
ls predict* | wc -l
dd
dd if=<source file name> of=<target file name> [Options]
vsftpd
# /etc/vsftpd.conf
# 增加匿名访问目录
anon_root=/var/ftp
ftp
# connect ftp
ftp 192.168.4.25
# 匿名用户
anonymous
# 下载文件
get file_name
修改文件名编码
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
查看文件
cat file.txt
# 查看前几行
head -n 10 file.txt
# 查看后几行
tail -n 10 file.txt
# 查看特定的行数
sed -n '1000,2000p' filename.csv
nohup
# nohup 确保这个进程在断开 ssh 连接后依旧运行,& 让进程在后台运行
nohup jupyter notebook 2>&1 &
# 后台文件写入log
command >& file.txt(或者file.log) &
使用图形界面打开文件
# 配置
# vim /etc/ssh/sshd_config
AllowTcpForwarding yes
X11Forwarding yes
# opens a file or URL in the user's preferred application
xdg-open $file
# 后台打开pycharm
./pycharm &
网络
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.comsudo
# 手动获取ip
sudo dhclient
# 修改查看本地路由表
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
curl
curl baidu.com
# curl 代理
curl -x http://172.18.10.204:8119 baidu.com
ufw
# 关闭ufw
sudo ufw disable
# 查看状态
sudo ufw status
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
.bashrc 配置
alias vim='nvim'
alias ls='ls -ahG'
文件
文件挂载
#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
# 查看UUID
sudo blkid
# 添加UUID到/etc/fstab
# 添加到/etc/fstab 其中UUID后面跟sdb1的UUID 重启
UUID=63295b70-daec-4253-b659-821f51200be9 /home/data ext4 defaults,errors=remount-ro 0 1
文件管理
# 统计挂载磁盘的整体情况
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 -r FileName.zip DirName
# gz
gzip -dk file.gz
文件本地上传和下载
# 安装
sudo apt install lrzsz
# 上传
rz
# 下载
sz
# md5 校验
md5sum file
tree
#Tee command is used to store and view (both at the same time) the output of any other command.
ls | tee file
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代表周日)
修改管道系统的管道缓冲区大小
# 查看管道系统的管道缓冲区大小
sysctl fs.pipe-max-size
# 增加管道系统的管道缓冲区大小
sudo sysctl -w fs.pipe-max-size=536870912
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
常用工具
翻译软件
# 安装
sudo apt-get install translate-shell
# 翻译为中文
trans :zh-CN test
# 查看语言代码
trans -T
文件同步
rsync -r source destination
# 多目录同步
rsync -r source1 source2 destination
# 同步元信息(比如修改时间、权限等)
rsync -a source destination
# 镜像副本(确保两目录完全相同)
rsync -av --delete source/ destination
# 排除文件
rsync -av --exclude='*.txt' source/ destination
# 指定必须同步文件
rsync -av --include="*.txt" --exclude='*' source/ destination
# 远程同步
rsync -av source/ username@remote_host:destination
SSH
# 安装ssh
sudo apt install openssh-server
# 查看ssh是否启动
sudo systemctl status ssh
# 本地端口转发
# 假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
# 本地端口:目标主机:目标主机端口
# 指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口
# ssh -L [收听接口:]收听端口:目标主机:目标端口 username@hostname
ssh -L 2121:host2:21 host3name@host3
ssh -NL 6067:47.101.193.148:6076 pi@172.18.10.204
# 远程端口转发
# host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了。
# 既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
# host3执行命令
ssh -R 2121:host2:21 host1
# R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
wol
# 检查网卡是否支持wol
ethtool eth0
# Supports Wake-on
d -- 禁用
p -- 物理活动唤醒
u -- 单播消息唤醒
m -- 多播(组播)消息唤醒
b -- 广播消息唤醒
a -- ARP 唤醒
g -- 特定数据包magic packet唤醒
s -- 设有密码的特定数据包magic packet唤醒
# Wake-on
g -- 网卡已开启远程唤醒功能
d -- 输入命令开启
# 开启远程唤醒
ethtool -s eth0 wol g
# 安装wakeonlan
sudo apt-get install wakeonlan
# 网络唤醒
wakeonlan xx:xx:xx:xx:xx:xx