使用Linux过程中的一些技巧(更新待补充)

已认证 随性且迷人 5天前 33


这是我经常用到整理下来的,如果还有请大家多多补充,造福大家  

Linux shell 中单引号的技巧

一般情况下双引号引用变量, 其实,两组单引号之间也可以直接引用变量。 示例如下:


Var=Hello
echo ''${Var}' World! '


注意:在某些情况下,变量中不能含有分割符.


利用sed在行首与行尾添加字符

sed 's/^/HEAD&/g' /path/to/file
sed 's/$/&TAIL/g' /path/to/file


利用sed在文件尾部添加行

sed '$a\ADDLINE' /path/to/file


利用sed替换大小写


将所有字符替换为小写:

echo -n "$TEXT"|sed -r 's/(.*)/\L\1/'


将所有字符替换为大写

echo -n "$text"|sed -r 's/(.*)/\U\1/'


wget的POST方法下载

wget --continue --no-check-certificate \
--header="Cookie: $cookie" \
--post-data="DATA" \
"https://domain.name/url" \
-O "/path/to/File.Name"


curl一般使用方法

curl -sS --insecure --create-dirs \
--retry 3 --retry-delay 10 \
-H 'Host: domain.name' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'Referer: https://domain.name' \
-H 'Cookie: $cookie' \
-H 'Connection: keep-alive' \
-b '/tmp/cookie' \
-c '/tmp/cookie' \
-X POST -d 'DATA' \
-L 'https://domain.name/url' |gzip -dc


Linux修改时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" >/etc/timezone


时间不对问题

apt-get install -y ntpdate
ntpdate pool.ntp.org
hwclock --systohc


修改PHP默认时间

sed -i 's/^;\?date.timezone.*/date.timezone = PRC/g' /etc/php5/cgi/php.ini


使Debian支持中文字符,解决乱码问题.

运行

dpkg-reconfigure locales


选择

en_US.UTF-8
zh_CN GB2312
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8


选择默认

en_US.UTF-8


安装字体

apt-get install -y xfonts-wqy ttf-wqy-zenhei ttf-wqy-microhei


重启

reboot


使用scp命令在Linux主机间传送文件

scp -P $SSHPort -r /Local/Path $RemoteUserName@$RemoteIP:/Remote/Path


检测IP有效性

IP=1.2.3.4
CHECKIP="$(echo "$IP" | grep -o '\(\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)')"
[ "$IP" == "$CHECKIP" ] && [ "$(echo "$IP" |awk -F '.' '{print NF}')" -eq '4' ] && echo "Ok! " || echo "Error! "


利用openssl给nginx添加账户密码

echo -n 'MoeClub.org:' >>/etc/nginx/password
openssl passwd Vicer >>/etc/nginx/password


非交互式更改Linux用户的密码

echo -ne "asd123\nasd123\n" |passwd root


于iptables相关

#添加名为[NAME]的Chain.
iptables -N [NAME]
#清空名为[NAME]的Chain下所有规则.
iptables -N [NAME]
#删除名为[NAME]的空Chain.
iptables -N [NAME]

iptables前面的规则会先生效,如果后面的规则与前面某条规则发生冲突,则后面的这条规则不会生效.


There is no public key available for the following key IDs

apt-get install -y debian-keyring debian-archive-keyring
apt-key update


使用nc命令检测端口

nc -z -v -w 1 127.0.0.1 443

可使用$?来获取返回参数,0:open,1:close.


使用sed调换两行的顺序

sed '/lineONE/{h;d;};/LineTWO/G'


修改Linux系统时间

cp -f /usr/share/zoneinfo/PRC /etc/localtime


ssh,scp无交互密码登录

sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no -q -p $PORT root@$IPADDR "COMMAND;"
sshpass -p $PASSWORD scp -P $PORT -o StrictHostKeyChecking=no -q -r $FilePath root@$IPADDR:$FilePath


申请live后缀邮箱

# 浏览器F12,粘贴即可使用
var sub = window.prompt('msn.com /live.com /live.cn /live.hk /live.jp /live.fr /live.ca /live.de /live.ie /live.in ...\n','live.cn');if(sub){document.getElementById("SingleDomain").value = sub;document.getElementById("idSingleDomain").innerText = "@"+sub;};


网易提供的检测是否为大陆IP接口

http://ipservice.163.com/isFromMainland



bilibili检测IP接口

https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr



sed多行合并

sed -n '1h;1!H;$g;s/\n/,/g;$p' /file/to/path


解决Nginx 413错误

server {
    ...
    client_max_body_size 0;
    ...
}



解决利用eval赋值后echo输出URLENCODE的暗坑

echo "$str" |sed 's/\+/%2B/g' |sed 's/\=/%3D/g' |sed 's/\//%2F/g' |xxd -ps |sed 's/0d0a$\|0d$//g' |xxd -r -ps


自定义批量修改文件时间(格式:世纪年份月份天数小时分钟.秒数)

Time="$(date +'%C%y%m%d%H%M.%S')"; find . -name "*" -exec touch -t $Time '{}' \;


重复内容交集和并集

#并集(重复的行只保留一份)
cat file0 |sort -t';' -k1 |uniq > file
#交集(只留下重复的行)
cat file0 |sort -t';' -k1 |uniq -d > file
#只留下非重复行
cat file0 |sort -t';' -k1 |uniq -u > file


MySQL数据库备份与恢复

#备份数据
mysqldump -h $host -P $port -u"$username" -p"$password" --databases $db_name >dump.sql
#还原数据
mysql -h $host -P $port -u"$username" -p"$password" --databases $db_name
CREATE DATABASE IF NOT EXISTS $db_name;
SOURCE dump.sql;
#赋予权限
grant all privileges on $db_name.* to $username@$host identified by "$password";
#刷新权限
flush privileges;
#设置密码
set password for $username@$host = password("$password");
#删除数据库
drop database if exists $db_name;
#创建用户
create user $username@$host;



文件描述符及简易通讯

#打开可读写的文件描述符7
exec 7<>/dev/tcp/127.0.0.1/22 2>/dev/null;
#发送数据到文件描述符7
echo -e "ok \n" >&7;
#从文件描述符7中获取返回的信息
cat <&7;
#关闭文件描述符7的输入和输出
exec 7<&-;
exec 7>&-;
#建立的socket链接在 /proc/self/fd 目录下
ls -l /proc/self/fd


Debian 快速换内核

apt-get install -y linux-image-3.16.0.4-amd
item="${1:-3.16.0-4}"
while [[ -n "$(dpkg -l |grep linux-image |grep -v "$item" |awk '{print $2}')" ]]; do
  for kernel in `dpkg -l |grep linux-image |grep -v "$item" |awk '{print $2}'`
    do
      if [ -f "/var/lib/dpkg/info/${kernel}.prerm" ]; then
        sed -i 's/uname -r/echo purge/' "/var/lib/dpkg/info/${kernel}.prerm"
      fi
      dpkg --purge "$kernel"
    done
  done


Redis关闭持久化

sed -i 's/^save/#&/g' /etc/redis/redis.conf
sed -i 's/^appendonly\ .*/appendonly\ no/g' /etc/redis/redis.conf
rm -rf /var/lib/redis/*


还没有人收藏过本帖~
访客记录
  • 随性且迷人
  • Joesmy
最新回复 (0)

你可以在 登录 or 注册 后,对此帖发表评论!

返回