基础安装
# CentOS
sudo
yum
install
epel-release
|
命令行Tips
进程及端口
# 查看端口占用情况
netstat
-ap |
grep
端口号
# 查看某一个端口
netstat
-ntlp
top
-p 进程ID:查看进程的实时情况,包括内存大小,内存占用率、CPU占用率,运行时间
cat
/proc/
进程ID
/status
:查看进程详细信息,包括线程数,线程名称,线程状态,占用内存大小
pstree -p 进程ID:查看线程的进程数以及进程ID
lsof
-i :端口号
# 查看端口占用情况,不仅能看到哪个进程开启的端口,还能查看谁在使用该端口
lsof
-i -n -P |
egrep
‘:8000.+ESTABLISHED‘
# 查看8000端口的连接列表
lsof
-i -n -P |
egrep
-c
‘:8000.+ESTABLISHED‘
# 查看8000端口的连接数字
# 结束进程
kill
-s 9 进程ID
|
查找与统计
ls
-lR |
grep
"^-"
|
wc
-l
# 递归统计文件夹下所有文件的个数
wc
-l: 统计行数
grep
-c
"词语"
# 统计出现的次数
grep
字符串 文件名
# 在文件中查找某个字符串
grep
^字符串 文件名
# 在文件中查找以某字符串开始的行
grep
[0-9] 文件名
# 在文件中查找包含数字的行
grep
字符串 -r 目录
# 在特定目录及其子目录中的文件查找str
fdupes:快速查找重复文件
find
/ -name filename
# 精确查找某个文件
find
/ -name
‘*.txt‘
# 模糊查找某个文件
find
/ -mmin -60
# 查找60分钟内修改的文章
find
/ -
type
d -mtime -1
# 查找1天内修改过的文件夹(好吧,我用了rm -rf / 命令才知道的)
|
文件操作
# 压缩
tar
-czvf 结果.
tar
.gz 目标/
# 打包并使用gzip压缩
tar
-cjvf 结果.
tar
.bz2 目标/
# 打包并使用bzip2压缩
zip *.zip
file
# 压缩file为zip格式
zip -r *.zip
file
dir
# 压缩文件或目录一起为zip格式
zip -e 结果.zip 目标
# 压缩并加密(OSX可用)
# 解压
xz -d *.
tar
.xz
tar
xvf *.
tar
tar
zxvf *.tgz
tar
-xjf
tar
.bz2
# 解压bz2文件
gunzip *.gz
# 解压gz文件
tar
-xzf *.
tar
.gz
# 复制
cp
文件1 文件2
cp
-r 目录1 目录2
# 递归复制
cp
-a 目录1 目录2
# 递归复制目录,同时将文件属性也复制过去
# 文件分割
split
-b 1024m
# 文件分隔-b表示按大小分隔,-l表示按行数分隔
# 查看文件内容
cat
filename |
more
# 表示分页查看文件内容
# 输出内容到文件
cat
.
/test
.conf >>
/etc/supervisord
.conf
sudo
bash
-c
‘cat ./test.conf >> /etc/supervisord.conf‘
# 上一句如果出现权限问题可以尝试使用这条命令
# 建立链接,最好都用绝对路径
软连接:
ln
-s 源 目的地
软连接可以给目录创建,如果删除了对源文件不会有影响
硬连接:
ln
-d 源 目的地
硬连接不能给目录创建,对连接做的更改会影响源文件,只能在同一文件系统中创建
# 文件创建
mkdir
-p path
/2
# 创建目录树
mkdir
-pv path/{path1,path2}
# 建立子目录
mkdir
-
v
a+wt path
# 创建一个粘滞模式的文件,其他用户可以修改,但是只有该文件的owner才能进行删除操作,这条命令即使把0755(rwxr-xr-x)改为1777(rwxrwxrwt)
# 找不同
diff
文件1 文件2
# 找出两个文件的不同
sdiff
文件1 文件2
# 以对比的方式找文件的不同
# 批量转换文件编码
find
*.txt -
exec
sh -c
"iconv -f GBK -t UTF8 {} > change.{}"
\;
# 这里将GBK转换为UTF8
|
远程ssh
# 配置免密码登录
ssh
-keygen -t dsa
# 生成自己的ssh,然后将~/.ssh/id_dsa.pub的内容添加到主机的~/.ssh/authorized_keys里面面去
# CentOS下的安装
yum
install
openssh-clients
# 传输文件
scp
用户名@地址:远程路径 本地路径
# 获取/下载远程服务器的文件,目录加-r参数
scp
本地路径 用户名@地址:远程路径
# 将本地文件上传到远程目录,目录加-r
# 仅允许SSH登录,vim /etc/ssh/sshd_conf
PubkeyAuthentication
yes
AuthorizedKeysFile .
ssh
/authorized_keys
PasswordAuthentication no
#保存,然后重启ssh服务
service sshd restart
# 进制特定IP登录,vim /etc/hosts.deny
sshd:IP
# 登录shell和非登录shell的区别: 加载的文件不同,登录式shell加载/etc/profile、/.bash_profile和~/.profile,而非登录式shell加载/etc/bashrc或者/etc/bash.bashrc、~/.bash_rc,所以在切换用户是最好加上-,即su - haofly就切换到那个心的地方了
|
包管理
dpkg -i *.deb
# 安装deb包,但是它不会自动解决依赖,安装完成后还要使用apt-get -f install这条命令来安装没有安装好的依赖
apt-cache show 包名
# 显示apt库里面的软件的版本号
sudo
apt-get clean
# 自动清理安装程序时缓存的deb包
sudo
apt-get autoclean
# 清理已卸载软件的无用的依赖包
rpm -ql 包名
# 查询已经安装的包的文件路径
|
磁盘管理
sudo
fdisk
-lu
# 显示硬盘及分区情况
sudo
fdisk
/dev/sdb
# 对某一硬盘进行分区(千万不要在当前硬盘进行分区)
sudo
mkfs -t ext4
/dev/sdb
# 将硬盘格式化为ext4文件系统
sudo
df
-lh
# 显示硬盘挂载情况
sudo
mount
-t ext4
/dev/sdb
/mydata
# 挂载某个分区文件为ext4
vim
/etc/fstab
中添加
UUID=硬盘的UUID /挂载位置 ext4 defaults 0 0
# 在系统启动时自动挂载硬盘blkid /dev/sda1 查看硬盘UUID用sudo blkid
sudo
du
-h -d 1
/path
# 获取指定目录下一级的各个目录的大小
|
用户管理
# 添加用户
sudo
useradd
-s
/bin/bash
-d
/home/username
-m username
# 修改用户密码
sudo
passwd
username
# 给用户添加sudo权限
vim
/etc/sudoers
修改如下内容
# User privilege specification
root ALL=(ALL:ALL) ALL
# 在这一行下面写
username1 ALL=(ALL:ALL) ALL
# 该用户可以执行所有sudo操作
username2 ALL=NOPASSWD:
/usr/bin/git
# 该用户可以执行‘sudo git‘的操作
# 查看所有用户
cat
/etc/passwd
|
系统相关
lsb_release -a
//
查看系统信息
echo
$HOSTTYPE
//
查看系统位数
cat
/proc/cpuinfo
# 查看CPU信息
cat
/etc/issue
//
Debian系列查看系统版本
cat
/etc/redhat-release
//
redhat系列查看系统版本
# 更新系统
sudo
apt-get
install
update-manager-core
sudo
do
-release-upgrade
# 系统开关
shutdown
-h now
# 关机
shutdown
-r now
# 重启
# 查看某个命令的系统调用
strace
+ 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题
# 增加虚拟内存
sudo
dd
if
=
/dev/zero
of=
/swapfile
bs=1024 count=500000
# 500MB,这两行是连在一起的,我日
sudo
mkswap
/swapfile
sudo
chown
root:root
/swapfile
sudo
chmod
0600
/swapfile
sudo
swapon
/swapfile
|
防火墙
service iptables status
# 查询防火墙状态
vim
/etc/sysconfig/iptables
# 新增端口
service iptables restart
# 重启防火墙
|
其它工具
supervisor
进程监控工具,apt-get install supervisor
进行安装,默认的监控配置都放在/etc/supervisor/conf.d
里面,配置文件语法如下:
[group:fenzu]
programs:一个进程名,另一个进程名
# 这样可以分组控制一批program
[program:去一个进程名称]
process_name=%(program_name)s_%(process_num)02d
# 当前进程的名称
directory=
/home/
...
# 工作目录,启动程序前会切换到这个地方
command
=python manage.py runserver ....
# 启动命令
autostart=
true
# 在supervisord启动的时候自动启动
autorestart=
true
# 程序异常退出后自动重启
startretries=3
# 启动失败自动重试次数,默认是3
user=root
# 用哪个用户启动
numprocs=8
# 进程数
redirect_stderr=
true
# 把stderr重定向到stdout,默认为false
stdout_logfile=
/var/log/
...
# 日志文件位置,若该目录不存在则无法正常启动,需要手动创建目录
|
常用操作
supervisord
# 启动所有监控
|
CURL
curl -o a.txt url
# 将文件下载到本地并命名为a.txt
curl -O url
# 将文件下载到本地用它本来的命名
|
FTP
Crontab定时任务
crontab
-e
# 直接打开定时任务文件进行编辑
格式如下:
第1列:分钟
第2列:小时
第3列:日
第4列:月
第5列:星期
第6列:命令
其中,每一列可以逗号和小横线表示特殊的意义,比如
3,15 8-11 * * * 命令
# 表示在上午8点到11点的第3和15分钟执行
* 23 * * * 命令
# 注意这个表示的是23点的每分钟都执行
0 *
/1
* * * 命令
# 每隔一小时
需要注意的是coontab是不会自动加载环境变量的哟,所以有时候发现命令没有被执行,可能是这个原因
# crontab日志,默认是关闭的,如果要打开可以在配置文件里面进行打开,vim /etc/rsyslog.d/50-defaullt.conf
cron
.*
/var/log/cron
.log
# 将cron前面的注释去掉
service rsyslog restart
# 重启rsyslog
|
其他命令
cd
-: 返回上一次的目录,真他妈实用
history
:查看历史命令,如果需要查看命令执行时间,需要先
export
HISTTIMEFORMAT=
‘\%F \%T ‘
tzselect:更改时区
# 命令命名,例如如果想通过python命令调用python3而不是默认的python2,那么可以这样子:
alias
python=python3
alias
pip=pip3
alias
run8000=
‘python manage.py runserver 0.0.0.0:8000‘
# yes命令:重复输出字符串,不带参数则默认输出y。例如 `yes | apt-get install xxx`会默认输出y
# 网络相关
ifdown eth0
# 禁用eth网卡
ifup eth0
# 随机数
echo
$RANDOM
# 除法
echo
$RANDOM / 28 |
bc
echo
$RANDOM % 28 |
bc
|
Shell Script
数据结构
VAR2=${VAR:-haofly}
# 如果变量VAR不存在,后面就是它的默认值
VAR2=${VAR/.
tar
.gz}
# 如果VAR的值为haofly.tar.gz,那么VAR2=haofly,一种替换
length=$(
#array[@]}或者length=$(#array[*]} # 获取数组长度
|
流程控制
if
语句:
-z:为空
-n:不为空
-gt:大于
# 判断文件是否存在
if
[ ! -f
"$filename"
];
then
touch
"$filename"
fi
# 判断文件是否为空
if
[[ ! -s filename ]];
then
echo
‘a‘
fi
|
特殊符号
[[]]:双中括号,之间的字符不会发生文件名扩展或者单词分割
(()):双小括号,整数扩展,其中的变量可以不适用$符号前缀
$?:上一条命令的退出码
|
日期处理
date
+
"%s"
# 按照时间戳来显示
date
+
"%m-%d-%y"
# mm-dd-yy格式
date
+
"%T"
# 仅显示时间,比如10:44:00
|
随机数
$RANDOM # 生成一个随机数特殊操作
. /etc/*.conf # 导入配置文件,这样配置文件里面的变量就可以直接使用了
find
./ -name
"*.log"
-mtime -1 |
which
read
line;
do
tail
-n 5
"$line"
> ~
/bak/
"$line"
;
done
# 查找,然后按行进行执行
while
read
line
do
语句
done
# 一行一行地进行处理,真正的处理
# awk:以行为单位将输入进行处理,貌似这里的处理智能进行print
-F 参数将行做分割,例如:
ps
|
awk
-F
‘ ‘
‘\{print $1\}‘
# 将ps的第二列输出
# sed:同样以行为单位将输入进行处理
-n 输出第几行,例如:
ps
|
sed
-n
‘1p‘
# 将ps的第一行输出
# xargs:将上一个管道的输出直接作为这个管道的输入
ps
|
grep
python |
awk
-F
‘ ‘
‘\{print $1\}‘
|
xargs
kill
date
+\%Y-\%m-\%d
# 获取今天的日期
|
原文地址:https://haofly.net/Linux/index.html
精彩评论