https://www.jqhtml.com/30047.html

我的Linux手册

服务器

浏览数:72

2019-1-30

原文链接

基础安装

# 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://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题的更多相关文章

  1. 一条命令解决: sql server 2008 安装提示重启计算机

    0.将安装的iso文件解压 1. 使用管理员账户打开 cmd命令行 2.将命令行的路径切换到解压路径下,你应该可以看到setup.exe 3.执行命令  一条命令解决:setup.exe /SkipR ...

  2. Ubuntu常用200条命令

       查看软件xxx安装内容:dpkg -L xxx 查找软件库中的软件:apt-cache search 正则表达式 查找软件库中的软件:aptitude search 软件包 查找文件属于哪个包: ...

  3. 【命令】htop命令

    一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...

  4. SS命令和Netstat命令比较

    在早期运维工作中,查看服务器连接数一般都会用netstat命令.其实,有一个命令比netstat更高效,那就是ss(Socket Statistics)命令!ss命令可以用来获取socket统计信息, ...

  5. 每天一个linux命令(44)--ss命令

    ss 是 socket statistics 的缩写.顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容.但 ss 的优势在于它能够显示更多更详细的有关TC ...

  6. npm 一条命令更换淘宝源

    一条命令更换淘宝源 npm config set registry https://registry.npm.taobao.org

  7. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  8. Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法【转】

    在日常运维工作中, 经常会碰到以秒为单位去定时执行某些命令或监控脚本的需求. 说到定时任务就要用到crontab,通常来说,crontab的最小单位是分钟级别,要想实现秒级别的定时任务,就要进行特殊设 ...

  9. linux下安装jdk 详细步骤(一条命令即可安装)

    转载:https://blog.csdn.net/luochangchen/article/details/72804426 作为Java开发人员,在Linux下安装一些开发工具是必备技能,本文以安装 ...

随机推荐

  1. 第24 章 : Kubernetes API 编程利器:Operator 和 Operator Framework

    Kubernetes API 编程利器:Operator 和 Operator Framework 本节课程主要分享以下三方面的内容: operator 概述 operator framework 实 ...

  2. 你真的了解Innodb存储引擎?

    前言 前几篇记录了如何查看SQL执行计划.数据库事务相关的知识点 除了这两个,数据库还有两个是非常重要的,必须要考的 就是存储引擎和索引 今天先记录以下InnoDB存储引擎相关的知识点 MySQL存储 ...

  3. 201871030102-崔红梅 实验二 个人项目—— D{0-1}KP 项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 实验二作业链接 我的课程学习目标 1.熟练掌握将本地代码保存至GitHub中2.掌握折扣背包问题3.回顾动态规划算法和回溯算法4.对java语 ...

  4. 【算法学习笔记】组合数与 Lucas 定理

    卢卡斯定理是一个与组合数有关的数论定理,在算法竞赛中用于求组合数对某质数的模. 第一部分是博主的个人理解,第二部分为 Pecco 学长的介绍 第一部分 一般情况下,我们计算大组合数取模问题是用递推公式 ...

  5. UnitTwoSummary

    目录 一.设计策略与程序分析 第一次作业 第二次作业 第三次作业 二.可扩展性检查与分析 三.bug 四.总结与反思 一.设计策略与程序分析 第一次作业 设计思路 输入,调度器,电梯分别设置成三个线程 ...

  6. Unity 渲染流水线 :CPU与GPU合作创造的艺术wfd

    前言 对于Unity渲染流程的理解可以帮助我们更好对Unity场景进行性能消耗的分析,进而更好的提升场景渲染的效率,最后提升游戏整体的性能表现 Unity的游戏画面的最终的呈现是由CPU与GPU相互配 ...

  7. Dynamic Programming 动态规划入门笔记

    算法导论笔记 programming 指的是一种表格法,并非编写计算机程序 动态规划与分治方法相似,都是通过组合子问题的解来求解原问题.但是分治法将问题划分为互不相交的子问题.而动态规划是应用与子问题 ...

  8. [Skill]从零掌握80%的业务查询SQL语句

    前言 本篇文章的主要目的是帮助初学者快速入门SQL查询,从而解决实际业务中80%的SQL查询问题. 本文主要框架如下: 上篇:介绍SQL的语法顺序和执行顺序 中篇:介绍条件子句.分组查询和排序的细节 ...

  9. 2020北航OO第二单元总结

    2020北航OO第二单元总结 前言 本单元考察基于多线程的电梯调度问题,成功让我从一个多线程小白到了基本掌握了使用锁来控制线程安全的能力,收获颇多(充分体验了迷茫地de一个又一个死锁bug的痛苦). ...

  10. hdu4941 map交换行列

    题意:      有一个大矩阵,某些格子上有数字,然后有三种操作, 1 交换行 2 交换列 3 询问当前坐标数值 思路:      直接用map去映射行列,用二维的map去存数字就行了,水题,想不通的 ...