我的Linux手册

linux.jpg

原文链接

基础安装

# 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   # 获取今天的日期
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,113评论 2 34
  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 2,235评论 0 11
  • supervisor 是由python语言编写、基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,...
    每次哭都笑着奔跑阅读 6,265评论 6 14
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,049评论 9 467
  • 一、用户帐号和环境……………………………………………………………. 2 二、系统访问认证和授权…………………………...
    大福技术阅读 5,930评论 0 5