Linux常用命令

 

查看指定端口被哪个进程占用的情况

lsof -i:端口号

netstat -tunlp|grep 端口号

 

 文本替换

sed -i 's/abc/ABC/g' ./*.log  //搜索替换
sed -i 's/abc//g' ./*.log  //替换成空串
sed  '/root/d' //搜索并删除行
sed -n '/root/p'  //打印包含模板的行 -n带行号

VI中替换

s/vivian/sky/ 替换当前行第一个 vivian 为 sky
s/vivian/sky/g 替换当前行所有 vivian 为 sky
n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
%s/vivian/sky/(等同于:g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky
%s/vivian/sky/g(等同于:g/vivian/s//sky/g)替换每一行中所有 vivian 为 sky 

删除Docker未使用的image

# 先删除Docker已退出的容器container
$ docker ps -a | grep Exit | awk '{print $1}'  | xargs docker rm
# 删除images
$ docker images -a | grep none | awk '{print $3}' | xargs docker rmi

 

find命令

find -type d -empty 查找空目录

find ./ -atime +7 查找7天前访问过的文件 还有-mtime -ctime

find ./ -atime +7 | xargs rm -f 删除7天前访问过的文件

find -type d -empty  | xargs rm -fr 删除空目录

find -user root 查找root用户的文件

 

 GIT操作

签出远程分支到本地

 git checkout -b develop origin/develop 

 查看远程分支状态

git remote show origin

删除本地跟踪的已不存在的远程分支

git remote prune origin

  找出两个commit之间修改的文件列表

  git diff b727664861d..ace377ae --name-only

  git打增量包

  git archive -o name.zip HEAD $( git diff b727664861d..ace377ae --name-only )

  git找出某个commit修改的文件列表

 

  git diff-tree -r --no-commit-id --name-only commit-id

#查看修改
git diff

#取消对文件的修改。还原到最近的版本,废弃本地做的修改。 git checkout
-- <filename> #取消已经暂存的文件。即,撤销先前"git add"的操作 git reset HEAD <file>... #修改最后一次提交。用于修改上一次的提交信息,或漏提交文件等情况。 git commit --amend #回退所有内容到上一个版本 git reset HEAD^ #回退a.py这个文件的版本到上一个版本 git reset HEAD^ a.py #向前回退到第3个版本 git reset --soft HEAD~3 #将本地的状态回退到和远程的一样
git fetch origin
develop
git reset --hard origin/develop

#回退到某个版本
git reset 057d

#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)
git revert HEAD

 VI操作

在全部内容的行首添加//号注释

:% s/^/\/\//g

在全部内容的行首添加#号注释

:% s/^/#/g

在2~50行首添加//号注释

:2,50 s/^/\/\//g

在2~50行首删除//号

:2,50 s/^\/\///g

 

centos手工安装vboxsf并挂载virtualbox共享windows文件夹

从VBoxLinuxAdditions.iso中提取出VBoxLinuxAdditions.run
放到虚拟机中执行 sh ./VBoxLinuxAdditions.run

查看有没有vboxsf模块
lsmod | grep vboxsf
如果没有结果返回,说明 vboxsf没有载入,执行
modprobe vboxsf

挂载共享文件夹
mkdir /hostdata
mount -t vboxsf winshare /hostdata

  

查看系统版本 centos 7 需要先安装

#yum install -y redhat-lsb
#lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.1.1503 (Core) Release: 7.1.1503 Codename: Core

 

查看Linux内核版本

uname -a

cat /etc/redhat-release,这种方法只适合Redhat系的Linux

 

 

安装git 提示Require libcurl.so.3错误

yum install git --disablerepo=rpmforge

 

安装crond计划任务

yum install  vixie-cron crontabs -y

 

安装php posix系列函数

yum -y install php-process

 

安装 sz rz 上传下载工具

yum install lrzsz

 

释放内存

sync && echo 1 > /proc/sys/vm/drop_caches # to free pagecache
sync && echo 2 > /proc/sys/vm/drop_caches # to free dentries and inodes
sync && echo 3 > /proc/sys/vm/drop_caches # to free pagecache, dentries and inodes

安装 phpize

yum install php-devel

crontab计划任务

crontab -e
每10秒 *:10 * * * * cmd
每1分钟 */1 * * * * cmd

mysql赋权限

grant all privileges on `dbname`.* to 'user'@'localhost' identified by 'password';
FLUSH PRIVILEGES;

mysql导入导出

导出一个库
mysqldump -uroot -p1234 dbname > file.sql
导出一个表
mysqldump -uroot -p1234 数据库名 表名 > /root/tb.sql

导出一个数据库结构
mysqldump -uroot -p1234 -d --add-drop-table 数据库名 > /root/struct.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

 crontab自动备份mysql脚本

# /bin/bash
DB_NAME="***"
DB_USER="***"
DB_PASS="***"
BIN_DIR="/usr/local/mysql/bin"
BACK_DIR="/data/backup"
DATE="$DB_NAME-`date +'%Y%m%d-%H:%M:%S'`"
LogFile="$BACK_DIR"/dbbakup.log
DeleteFile="$BACK_DIR"/deleted.txt
BackNewFile=$DATE.sql

 
  

$BIN_DIR/mysqldump --opt --force -u$DB_USER -p$DB_PASS $DB_NAME > $BACK_DIR/$DATE.sql

echo -----------------------"$(date +"%y-%m-%d %H:%M:%S")"----------------------- >> $LogFile

echo createFile:"$BackNewFile" >> $LogFile

#删除7天前的备份文件

find "$BACK_DIR" -ctime +7 -type f -name "*.sql" -print > $DeleteFile

 
  

echo -e "delete files:" >> $LogFile

 
  

#循环删除匹配到的文件
cat $DeleteFile | while read LINE
do
rm -rf $LINE
echo $LINE >> $LogFile
done

 
  


echo "---------------------------------------------------------------" >> $LogFile

 

还原一个mysql库

方法一
mysql -u root -p dbname < file.sql
密码 方法二 mysql
-u root -p 密码 use dbname; source /root/file.sql

mysql查看所有表状态

show table status from dbname;

查看单个表

show create table db_name.table_name

更改mysql表的存储引擎

alter table table_name engine = innodb;

MySQL还原root密码

修改my.ini
[mysqld]
skip-grant-tables
重启mysql服务

cd到mysql安装目录的bin目录下
$ mysql  (这里不再验证权限 直接登录)
$ use mysql
$ UPDATE user SET password=PASSWORD("new password") WHERE user='root';
$ flush privileges;
$ exit

去掉my.ini的skip-grant-tables
重启mysql服务
完成

 

 

硬盘空间 

du -sh ./* | sort
查看当前目录下的子文件夹空间占用情况
-s 仅显示总计
-h 以k、m、g为单位

df -ah
查看硬盘文件系统空间占用情况
-a 显示所有文件系统
-h 以k、m、g为单位

 CentOS注销其他登录

w 列出在线登录的用户

pkill注销其他用户的登录

pkill -kill -t pts/1

Shell不显示任何信息

shell中可能经常能看到:** > /dev/null 2>&1

命令的结果可以通过 > 的形式来定义输出

/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以" > /dev/null"等同于" 1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么本文标题的语句:
1 > /dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

 

mysql复制数据

 insert into tttt(title,image,lang) select title,image,'fr' as lang from tttt where lang='en';
MySQL导出指定数据到CSV (v5.6)

/usr/local/mysql/bin/mysql -uroot -p -hlocalhost --port=3306 --default-character-set=utf8 dotdotbuy -e "select * from gp_goods_product where status = 1" > /tmp/mall_product.csv

 

Mac OS安装PECL

cd /usr/lib/php 
sudo php install-pear-nozlib.phar

Edit:

/etc/php.ini and find the line: ; 
include_path = ".:/php/includes" 
修改为: 
include_path = ".:/usr/lib/php/pear" 
sudo pear channel-update pear.php.net 
sudo pecl channel-update pecl.php.net 
sudo pear upgrade-all

  

php.ini配置redis存储session

[PHP]
extension=redis.so

[Session]
session.save_handler = redis
;默认存储在database 0
session.save_path = "tcp://127.0.0.1:6379"
;指定存储到database 1
session.save_path = "tcp://127.0.0.1:6379?database=1"
;存储到多个redis 分权重
session.save_path = "tcp://host1:6379?weight=1&database=2, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"

 

SCP文件传输

将本机文件复制到远程服务器上

scp /root/news.txt root@192.168.0.10:/var/www

scp -P 2222 /root/news.txt root@192.168.0.10:/var/www

对拷文件夹 (包括文件夹本身)

scp -r   /home/www/tmp root@192.168.0.10:/home/www/scp

指定SSH端口

scp -r -P 2222  /home/www/tmp root@192.168.0.10:/home/www/scp

 

crontab 用不同的账号执行命令:修改 /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

* * * * * daemon echo 'hello'

  

 

 

你可能感兴趣的:(Linux常用命令)