https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题

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.cnblogs.com/xuanbjut/p/11441865.html

时间: 2024-11-07 18:16:38

https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题的相关文章

python paramiko模块远程执行多条命令

最近一直在用python的paramiko执行远程命令,发现如果直接写的话在每条命令后加分号执行时会报错,如果不加分号,分一条命令一条命令地执行,起不到作用,如切换路径等,后面在网上找到了相关的方法,只要在exec_command(cmd,get_pty=True)在命令语句后加get_pty=True即可.代码如下: def exec_command(self,cmd): client = paramiko.SSHClient() try: client.set_missing_host_ke

Ubuntu常用200条命令

   查看软件xxx安装内容:dpkg -L xxx 查找软件库中的软件:apt-cache search 正则表达式 查找软件库中的软件:aptitude search 软件包 查找文件属于哪个包:dpkg -S filename 查找文件属于哪个包:apt-file search filename 查询软件xxx依赖哪些包:apt-cache depends xxx 查询软件xxx被哪些包依赖:apt-cache rdepends xxx 增加一个光盘源:sudo apt-cdrom add

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

ss 是 socket statistics 的缩写.顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容.但 ss 的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效. 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是 cat  /proc/net/tcp,执行速度都会很慢.可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用 netstat 等于浪费生命,而

linux 下ip命令对比ifconfig命令

原文:https://linux.cn/article-3144-1.html ------------------------------------------------------------------------------------------------------------------------------------------ 试试Linux下的ip命令,ifconfig已经过时了 linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip

Linux命令之ip命令

linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了.iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一. 要安装ip,请点击这里下载iproute2套装工具 .不过,大多数Linux发行版已经预装了iproute2工具. 你也可以使用git命令来下载最新源代码来编译: $ git clone https

7条命令在docker中部署Mesos集群

7条命令在docker中部署Mesos集群 所有使用的Docker容器构建文件是有也.您可以在本地构建每个容器或只使用位于Docker Hub预构建的容器.下面的命令会自动下载所需的预建的容器为您服务.ZooKeeper?-?https://registry.hub.docker.com/u/garland/zookeeper/Meso Master?-?https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-maste

(转)shell命令:echo命令详解

shell命令:echo命令详解 原文:https://www.cnblogs.com/xyz0601/archive/2015/04/23/4450736.html 功能说明:显示文字. 语 法:echo [-ne][字符串] / echo [--help][--version] 补充说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加上换行号. 参 数: -n 不要在最后自动换行 -e 打开反斜杠ESC转义. 若字符串中出现以下字符,则特别加以处理,而不会将

传奇检测命令大全(常用命令)

传奇检测命令大全------常用命令-----#IF ;如果#SAY ;输出字符串#ACT ;执行命令break ;结束命令close ;结束对话------条件命令-----CHECKITEM 物品名 数量 ;检测当前人物所带物品及数量CHECKGOLD 数量 ;检测当前人物所带金币数量CHECKLEVELEX (>,<,=) 等级数 ;检测当前人物等级CHECKCREDITPOINT (>,<,=) 声望数 ;检测当前人物声望CHECKJOB (Warrior,Wizard,T

Curl命令、Elinks命令、lynx命令、Wget命令、lftp命令

一.Curl命令 语法 curl(选项)(参数) 选项 -a/--append 上传文件时,附加到目标文件 -A/--user-agent <string> 设置用户代理发送给服务器 -anyauth 可以使用"任何"身份验证方法 -b/--cookie <name=string/file> cookie字符串或文件读取位置      --basic 使用HTTP基本验证 -B/--use-ascii 使用ASCII /文本传输 -c/--cookie-jar