Linux常用技巧


原文链接: Linux常用技巧

linux Tips wiki
目前的稳定版本为Debian Jessie,目前的测试版本为Debian Stretch,不稳定版本永远为Debian sid
Linux命令大全
命令行的艺术
command-line-cookbook
11个让你吃惊的 Linux 终端命令

按键绑定

  1. bindkey # 查看所有绑定的快捷键
  2. bindkey '^Z' fancy-ctrl-z # 绑定一个函数到快捷键上
  3. :先按下Ctrl+V,然后按下F12 .我们就可以得到F12的字符序列 ^\[\[24~
    【附】也可以使用showkey -a命令查看按键对应的字符序列。

echo '{"id":1,"1":"li"}'|jq '."1"'

快速开启http服务

python -m SimpleHTTPServer 4000
ruby -run -e httpd . -p 9090

python -m SimpleHTTPServer 8000

php -S 127.0.0.1:8088 router.php

##解码base64
echo 'Qml0ZSBtZSBpZiB5b3UgY2FuISEhISEhIQo=' | base64 --decode
##多线程下载axel
axel -q -n 10 -o /tmp/ http://soft.vpser.net/lnmp/lnmp0.7-full.tar.gz

格式转换

iconv -f UTF-8 -t ISO-8859-15 >

将命令的输出变成一个值来幅给变量

name=basename /usr/include/stdio.h
name=$(basename /usr/include/stdio.h)

按名称杀死进程

killall emacs24

查看某条命令具体用法

whatis 显示和word相关的命令

查找相关命令

如果遇到想完成某个功能,但具体命令忘了的时候怎么办
apropos sort :查找和sort相关的命令
man -k who

查看按键的keycode

showkey程序可以知道你的按键是否拥有一个keycode

字符串切割

name="chickensoup.tar.gz"
${NAME##*fo} 切割字符;
#   (单次匹配start)      # echo ${name#*.}   tar.gz
##  (贪婪匹配头)         # echo ${name##*.}  gz
%   (单词匹配end)       # echo ${name%.*}   chickensoup.tar
%%  (匹配尽量长end)     # echo ${name%%.*}  chickensoup
${NAME:0:3} 直接取子串  # echo ${name:0:3}  chi

截取文件名

basename /usr/include/stdio.h stdio.h
basename /usr/include/stdio.h .h stdio

获取路径

dirname /usr/include/stdio.h /usr/include/

以指定用户执行sudo -u www-data

sudo cp -r .ssh /var/www
sudo chown -R www-data:www-data /var/www/.ssh
sudo mkdir /var/www/html
sudo chown -R www-data:www-data /var/www/html
sudo -u www-data git clone git@git.oschina.net:keyixinxi/chengzhi.git

sudo mkdir /var/www/mysql
sudo chown -R mysql:mysql /var/www/mysql
sudo -u mysql mkdir chengzhi

sudo cat << EOF > File doesn't work, sudo su does

sudo bash -c 'cat > /etc/nginx/sites-enabled/chengzhi.conf <<EOF
server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    }
}
EOF'

查看所有用户创建的进程数,使用命令:

ps h -Led -o user | sort | uniq -c | sort -n

获取ip

dig baidu.com

添加环境变量

echo PATH="$HOME/bin:$PATH" >> ~/.bashrc
cksum
md5
shasum

echo "de974a05937e55001c6bcd9060b42583 Discuz_X3.2_SC_UTF8.zip" | md5sum -c && echo 校验成功

vim强制保存只读文件

:w !sudo tee %

Ctrl+R 执行history命令

查看操作系统ubuntu debain

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

十条命令在一分钟内检查 Linux 服务器性能

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
三张图看遍Linux 性能监控、测试、优化工具
监控
测试
优化

1、shutdown -r now 关机后重启
2、shutdown -h now 关机后不重启
3、shutdown -r +10 10分钟后重启
4、shutdown -r 10:00 10点钟重启
5、shutdown -h +10 10分钟后关机
6、shutdown -h 10:00 10点钟关机

## 基本信息
id
last 查看登录成功的用户记录
lastb 查看登录不成功的用户记录
lastattr
uname -r
unmae -a
cat /proc/cpuinfo
cat /proc/interrupts
cat /proc/version
cat /proc/filesystems
cat /etc/*release #查看安装版本
dmesg | less
lsmod #Show the kernel modules currently loaded.
history
hostname
##
获取进程对应的 PID

fuser -nv tcp 80
fuser -k -n tcp 80
lsof -i

查看设备占用

fuser -m /dev/vdb1

e2fsck -a /dev/mapper/VolGroup00-LogVol02
执行 e2fsck 或 fsck 前请先 umount partition,否则有机会令档案系统毁损。
分区忙的情况,需要将所有涉及该分区的进程杀掉,有个快速的方法是执行 fuser -k /home

查找未链接的文件

lsof +L1

获取进程打开端口的信息

lsof -i
sudo lsof -i:80

用户相关

sudoers的深入介绍与用户权限控制

设置用户 sudo免密码使用sudo

root用户执行: echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/ubuntu
普通用户执行: echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/ubuntu

有的时候你的将用户设了nopasswd,但是不起作用,原因是被后面的group的设置覆盖了,需要把group的设置也改为nopasswd。

设置用户组 sudo免密码使用sudo

  1. 设置admin组 sudo免密码使用 sudoers
    chmod 740 /etc/sudoers
    vim /etc/sudoers 后把%admin ALL=(ALL) ALL ==> %admin ALL=NOPASSWD:ALL
    chmod 440 /etc/sudoers

  2. 查看一下当前用户属于哪些组
    groups

  3. 将指定用户添加到admin组
    gpasswd -a ${USER} admin
    usermod -G admin your_user_name

vi /etc/pam.d/su
auth required pam_wheel.so group=wheel
# Uncomment this if you want wheel members to be able to
# su without a password.
auth sufficient pam_wheel.so trust use_uid

groups #查看当前用户属于哪些组。
groups ubuntu #查看用户所在的用户组

groupadd group #创建组
useradd user #创建用户
useradd -g group user #创建用户并添加到组

cat /etc/passwd |awk -F : '{print $1}' #查看所有用户
cut -f 1 -d : /etc/passwd

usermod 用户管理 | gpasswd 组管理

gpasswd -a user group 等于 usermod -G group user
sudo gpasswd -a ${USER} docker #将指定用户添加到docker组
sudo usermod -aG docker ${USER}

-h DIR		Home directory
-g GECOS	GECOS field 注释
-s SHELL	Login shell
-G GROUP		Add user to existing group
-S		Create a system user
-D		Don't assign a password
-H		Don't create home directory
-u UID		User id

xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
deluser xfs && delgroup xfs
addgroup -S -g 43 xfs && adduser -S -u 43 -G xfs -g "X Font Server" -h /etc/X11/fs -H -s /sbin/nologin xfs
alpine
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
addgroup -S -g 33 www-data && adduser -S -u 33 -G www-data -g "www-data" -h /var/www -s /sbin/nologin www-data

Debian
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
RUN groupmod -g 11 sudo && groupadd -r -g 27 mysql && useradd -r -u 27 -g mysql -c mysql -d /var/lib/mysql -s /sbin/nologin mysql
sudo groupadd -r -g 999 mysql && sudo useradd -r -u 999 -g mysql -c mysql -d /var/lib/mysql -s /sbin/nologin mysql
sudo groupadd -r -g 33 www-data && sudo useradd -r -u 33 -g www-data -c www-data -d /data/ -s /usr/sbin/nologin www-data
sudo groupadd -r -g 1000 ubuntu && sudo useradd -r -u 1000 -g ubuntu -c ubuntu -d /home/ubuntu -s /bin/bash ubuntu

groupmod -g 99 docker
groupadd -r -g 999 mysql && useradd -r -u 999 -g mysql -c mysql -d /var/lib/mysql -s /sbin/nologin mysql

find / -user 1005 -exec chown -h foo {} \;
find / -group 2000 -exec chgrp -h foo {} \;

ENV JENKINS_HOME /var/jenkins_home
ENV JENKINS_SLAVE_AGENT_PORT 50000

ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${gid} ${group} \
&& useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}

切换root

sudo su ##将当前用户的环境变量带过去
sudo su - #sudo -i ##切换到全新的root用户

权限管理

chmod perm filename
chmod a+r junk
chown -hR new_ownername filename
chown -hR new_ownername:new_groupname filename
chgrp -hR new_groupname filename #子目录一起更改

chmod u+s test_file #给文件增加SUID属性
chmod g+s test_dir #给目录增加SGID属性
chmod o+t test_dir #给目录增加Sticky属性

磁盘相关

du -hd1 #统计当前目录大小
du -had1 #统计当前目录下所有文件大小
df -hT #查看磁盘分区格式

fdisk
mknod /dev/fd0 b 2 0
mkfs -c -t ext2
badblocks /dev/fd01440 1440
fsck -t ext2 /dev/hda2
dd if=/dev/fd0H1440 of=floppy_image
dd if=floppy_image of=/dev/fd0H1440

tar

tar zxvf file.tar.gz -C . #解包gz -x, --extract -P 覆盖 -C 目录
tar zcvpf file.tar.gz #打包gz -c, --create
tar zcvf fd.tar.gz * --exclude=file1 --exclude=dir1 #tar打包排除某个目录

zip

zip test.zip test.txt
unzip test.zip -d /root/
unzip discuz.zip "upload/*" -d Discuz # 解压压缩包内的特定文件夹到指定目录

war

jar -cvfM0 game.war ./ #打包成game.war -0 只打包不压缩的意思
jar -xvf game.war #解压game.war

网络相关

sudo netstat -anptu | grep ssh
-a, --all, --listening display all sockets (default: connected)

-n, --numeric            don't resolve names
-p, --programs           display PID/Program name for sockets
-l, --listening          display listening server sockets

route -n
ifup eth0
traceroute host_to_trace
dig

Network (网络)

$ ulimit    -n                                       // 查看最大连接数(socket描述符、文件描述符)
$ ifconfig  -a                                       // 查看IP
$ netstat   -apn                                     // 查看网络状态
$ netstat   -nr                                      // 查看默认网关
$ lsof      -i:10000                                 // 查看端口
$ route     -n                                       // 查看默认网关
$ fuser     -n tcp 8800                              // 查看TCP网络状态
$ ifconfig                                           // 查看网卡
$ ntpdate ntp.ubuntu.com                            // 同步时间服务器

Process (进程)

$ top                                                // 查看进程内存CPU消耗
$ ps        -aux | grep  mysqld                      // 查找进程(管道过滤)
$ ps        -ef                                      // 进程清单
$ kill      -9[2]  1102                              // 强制关闭进程
$ pkill     -9     -U    username                    // 强制关闭用户进程

System (系统参数)

$ env                                                // 查看系统环境变量
$ pwd                                                // 查看当前目录
$ who       -r                                       // 查看服务器运行级别
$ runlevel                                           // 查看服务器运行级别

$ whereis   nodejs
$ whatis    nodejs

File System (文件管理)

$ mkdir   /opt/mydir                                 // 创建目录
$ cd      /opt/mydir                                 // 进入目录
$ vi      /opt/mydir/test                            // 创建文件
$ gedit   /opt/mydir/test                            // 创建文件
$ cat     /opt/mydir/test                            // 查看文件
$ head    /opt/mydir/test                            // 查看文件,只有头部
$ tail    /opt/mydir/test                            // 查看文件,只有尾部
$ cp      /opt/mydir/test  /opt/mydir/test2  -R      // 复制
$ mv      /opt/mydir/test  /opt/mydir/test2          // 转移
$ rename  /opt/mydir/test  /opt/mydir/test2          // 重命名
$ rm      /opt/mydir/test  -rf                       // 删除 (递归,强制)

$ ln      /home/king/test  /bin/test                 // 创建硬连接
$ ln      /home/king/test  /bin/test  -s             // 创建软连接

$ find    /usr   -size   +10M                        // 在/usr目录下找出大小超过10MB的文件
$ find    /home  -mtime  +120                        // 在/home目录下找出120天之前被修改过的文件
$ find    /var   \!  -atime  -90                     // 在/var目录下找出90天之内未被访问过的文件
$ find    /      -name  core  -exec  rm  {}  \       // 在整个目录树下查找文件“core”,
                                                     // 如发现则无需提示直接删除它们

User (用户权限)

$ adduser lili                                       // 创建用户
          --home-dir /home/king
          --group root
$ chmod   -R  755    /home/king/test                 // 修改文件,目录权限 (递归)
$ chown   lili:root /home/king                      // 修改文件,目录用户组

Manager (管理员)

$ su                                                 // 切换管理员
$ su king                                            // 切换用户
$ passwd                                             // 重设密码
$ shutdown now                                       // 关机
$ reboot   now                                       // 重启

Configuation (系统配置)

$ vi      /etc/profile                               // 修改系统配置,针对所有用户
$ vi      ~/.bashrc                                  // 修改系统配置,针对当前用户
$ source  /etc/profile                               // 使配置生效

 export NAME=/home/king/name                         // 提供NAME系统变量
 export PATH=${PATH}:${NAME}/bin                     // 提供并修改PATH系统变量

Important (重要文件)

  1. 用户安全

    /etc/profile // 用户配置文件
    /etc/shadow // 用户密码数据文件
    /etc/passwd // 用户伪密码数据文件
    /etc/group // 用户组数据文件

  2. 系统硬件信息

       /proc/cpuinfo                                    // CPU信息
       /proc/meminfo                                    // 内存信息
       /proc/*info                                      // 所有硬件信息
    
  3. 系统程序入口

    /bin
    /usr/bin
    /usr/local/bin
    ...

Vi

i                                                    // 光标前插入字符
a                                                    // 光标后插入字符
u                                                    // ctrl+r 撤销、还原
q                                                    // 退出
x                                                    // 删除光标后字符
d                                                    // 删除当前行
q!                                                   // 强制退出
w                                                    // 保存

shell

#!/usr/bin/env node

OTHER

$ man hier 显示文件系统分层的描述信息

################################################################################
ctrl+alt 小键盘 控制窗口位置
Ctrl+shift+q 关闭终端窗口

命令& #让命令后台运行

ctrl+z #将前台放入后台(暂停)
jobs #查看后台运行程序
bg 1 #运行后台暂停进程
fg 1 #调出后台进程

ctrl+p 重复上一次命令
ctrl+x 同上但再按一次会从新回到原位置

ctrl+r: 向前查找用过的命令*
ctrl+a: 光标移到行首。
ctrl+e: 光标移到行尾。

ctrl+b: 光标左移一个字母 <-
ctrl+f: 光标右移 ->

Alt + b :往回(左)移动一个单词 ctrl + <-
Alt + f :往后(右)移动一个单词 ctrl + ->

ctrl+d: 退出当前 Shell。
ctrl+d: 删除光标所在字母
注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符
ctrl+h: 删除光标前一个字符,同 backspace 键相同。

ctrl+w: 移除光标前的一个单词
Alt – d :由光标位置开始,往右删除单词。往行尾删

ctrl+u: 清除光标前至行首间的所有内容。
ctrl+k: 清除光标后至行尾的内容。
ctrl+y: 粘贴或者恢复上次的删除
ctrl+l: 清屏,相当于clear。
ctrl+t: 交换光标位置前的两个字符
ctrl+c: 杀死当前进程。

ctrl+shift+v:

  1. 在KDE/Gnome下:

安装右键从终端启动

sudo apt-get install nautilus-open-terminal

复制文件到远程目录

scp filename xiezf@192.168.248.124:/home/push

如果是复制文件夹,使用

scp -r filename xiezf@192.168.248.124:/home/push
scp -P2222 -r video root@deedbeef.com:/

清理dns cache

sudo /etc/init.d/dns-clean start

查看域名解析

nslookup api.jpush.cn
  1. 在终端下:
    复制命令:Ctrl + Shift + C 组合键.
    粘贴命令:Ctrl + Shift + V 组合键.

  2. 在控制台下:
    复制命令:Ctrl + Insert 组合键  或  用鼠标选中即是复制。
    粘贴命令:Shift + Insert 组合键  或  单击鼠标滚轮即为粘贴。

ctrl+s: 锁住PuTTY锁屏
ctrl+q: 解锁
screen -S name 创建sesstion
screen -la 查看sesstion
screen -rd name 恢复sesstion

screen -r //查看所有的screen,并且可以恢复detach的进程;
screen -d //并且可以恢复detach的进程;
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window

其他

ldd -r /usr/bin/ffmpeg #查看链接库
添加修改动态库路径
vim /etc/ld.so.conf
sudo ldconfig #生效

环境变量

sudo gedit /etc/profile
sudo gedit /etc/environment

set|more #Show the current user environment.
export
export -p

echo $PATH

##linux中的.bash_profile、profile、bashrc详解
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的

开机启动脚本顺序

1.系统级
/etc/profile #第一个文件
/etc/bash.bashrc
/etc/profile.d/* .sh
/etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
2.用户级
~/.profile
PATH="$HOME/bin:$PATH"
~/.bashrc
~/.bash_profile #当这个文件存在时,在登录shell时会读取./bash_profile文件,而不是.profile文件

内存虚拟硬盘

sudo mkdir /mnt/ramdisk
sudo mount -t tmpfs tmpfs /mnt/ramdisk -o size=2G,defaults,noatime,mode=777

sudo mount -t ntfs-3g /dev/sdb2 /media/ubuntu/software/
/dev/sdb2 on /media/ubuntu/software type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)

alias ls="ls --color=tty"

网络配置

  1. 设置IP(设置网卡eth0的IP地址和子网掩码)
    sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0
    设置网关
    sudo route add default gw 192.168.2.254

  2. vi /etc/network/interfaces
    auto eth0
    iface eth0 inet dhcp

    iface eth0 inet static
    address 192.168.2.1
    gateway 192.168.2.254
    netmask 255.255.255.0
    #network 192.168.2.0
    #broadcast 192.168.2.255

设置DNS

vim /etc/resolv.conf 在其中加入nameserver DNS的地址1 和 nameserver DNS的地址2 完成。
//重启网络服务
sudo /etc/init.d/networking restart

dpkg -l 查看已安装软件

apt-

apt-get update
apt-get upgrade
sudo apt-cache search nfs-
apt-get purge #apt-get --purge remove
sudo update-alternatives --config java

sudo apt-get install software-properties-common
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java #添加PPA
sudo add-apt-repository -r ppa:webupd8team/java #删除PPA
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF0E1940624A220 #导入密钥

3.配置自启动服务

查看当前运行的级别 runlevel

方法一:
sysv-rc-conf chkconfig的替代 图形化
sysv-rc-conf --list | grep ssh
sysv-rc-conf ssh on //系统自动启动SSH服务
sysv-rc-conf ssh off // 关闭系统自动启动SSH服务
sysv-rc-conf --level 35 apache on
方法二:
update-rc.d ssh enable //系统自动启动SSH服务
update-rc.d ssh disable // 关闭系统自动启动SSH服务
update-rc.d -f ssh remove // 移除自动启动SSH服务
方法三:
systemctl list-unit-files --type=service |grep enabled
sudo systemctl stop bluetooth.service # 终止一个服务
sudo systemctl disable bluetooth.service # 禁止开机启动

Find
find /usr /home /tmp -iname ".jar" (1.多个目录 2.不区分大小写)
find /usr/bin -type l -name "z
" -ls (1.类型 2.执行操作,-ls同 -exec ls -l {} \; 还有-delete)
find / -name ".txt" -mount 只在本文件系统查找(-mount or -xdev )
find . -name "flick
.png" |xargs tar czf flick.rar
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f 太长的分段(-print0 与 -0 匹配,以NULL代替回车换行)
find . -type f -atime +10 -print0 | xargs -0 -l1 -t rm -f (-l1 表示 一次处理一行,-t表示看到)

Grep
grep -c/-o/-n/-i/-l/-w/-v/-h count/only-match/num/ignore/list-name/word/invert-match /不显示文件名
grep -B/A/C n (before/after/context)显示匹配行周围行 (posix 未说明)

egrep --color 'cat|dog' test cat or dog
grep -E --color 'cat|dog' test (同上一行)
grep -l -e 'string.h' -e 'stdlib.h' /usr/include/*.h
#查看日志的错误信息
grep -irwE 'error|failed|failure' /var/log |less

echo "--shit"|grep -- --shit
echo '--shit' | grep -e '--shit'

Rsync
rsync -e "ssh -p 31415" suse@mreald.com:/home/suse/extensions/ /srv/www/htdocs/extensions/ -avz
(-p 表示端口,rsync 不会覆盖第二个内容 要是都有的话)

节点不够的情况下:
rsync -r -u -v --delete-before -e 'ssh -p 31415' /home/uploader/logistics_system/ test@mreald.com:/share/www/vhosts/make_up/

快速删除多级目录
mkdir blank
rsync --delete-before -a -H -v --progress --stats blank/ aa/

快速删除大文件
touch mreald.txt
rsync --delete-before -a -H -v --progress --stats mreald.txt /aniya/usr.tar.gz

同步并删除原文件(不删除原空目录)
rsync IP:/home/*.jpg /share/www/ -avz --remove-sent-files

同名目录同步覆盖方法:
1.cp -rp dir1/* dir2/
同名不覆盖不提示:
yes no| cp -rp dir1/* dir2/
同名覆盖不提示:
\cp -rp dir1/* dir2/
2.rsync -avz dir1/ dir2/
or rsync -avz dir1/* dir2/

rsync -azv --partial --exclude "dir1" --exclude "dir2" --exclude "dir3" /source/ $HOST:/dest/

Screen (后端开启虚拟终端,退出后仍在后台)
screen -S name (开启一个名为name 的后台)
^a + c/^a/n/p/0-9/d 常用快捷键
screen -ls (列出打开的虚拟后台 )
screen -r name

iptables

iptables -L -n #查看本机关于IPTABLES的设置情况
sudo vim /etc/sysconfig/iptables

#portmapper
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j CCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT

内建三个表:nat mangle 和filter
filter 预设规则表,有INPUT、FORWARD 和OUTPUT 三个规则链
INPUT 进入
FORWARD 转发
OUTPUT 出去
ACCEPT 将封包放行
REJECT 拦阻该封包
DROP 丢弃封包不予处理
-A 在所选择的链(INPUT 等)末添加一条或更多规则
-D 删除一条
-E 修改
-p tcp、udp、icmp 0 相当于所有all !取反
-P 设置缺省策略(与所有链都不匹配强制使用此策略)
-s IP/掩码(IP/24) 主机名、网络名和清楚的IP 地址!取反
-j 目标跳转,立即决定包的命运的专用内建目标
-i 进入的(网络)接口[名称] eth0
-o 输出接口[名称]
-m 模块
--sport 源端口
--dport 目标端口

NFS服务端配置 --- Linux和Linux 之间共享

apt-get install nfs-kernel-server
sudo service portmap start
sudo service nfs-kernel-server start
添加共享目录
sudo vim /etc/exports
/home/work/rootfs *(insecure,rw,sync,no_subtree_check)
/usr/src/Android *(insecure,rw,sync,no_subtree_check,no_root_squash)
/media/ubuntu/sdb2/Android *(insecure,rw,sync,no_subtree_check,no_root_squash)

sudo exportfs -av
sudo mount -t nfs localhost:/usr/src/Android /mnt
sudo mount -t nfs 192.168.0.110:/media/ubuntu/sdb2/Android /mnt
NFS客户端配置
apt-get install nfs-common
sudo mount -t nfs 192.168.0.112:/usr/src/Android /mnt

Samba 服务器配置 ---Windows 和Linux 之间共享

sudo iptables -A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT #nmbd
sudo iptables -A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT #nmbd
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT #smbd

sudo apt-get install samba
配置共享目录
sudo vim /etc/samba/smb.conf

[Android]
comment = Shared Folder with username and password
path = /media/ubuntu/sdb2/Android
;path = /usr/src/Android
public = yes
writable = yes
available = yes
browseable = yes
create mask = 0755
directory mask = 0755
;valid users = root
;force user = nobody
force user = root
force group = root
;force group = nogroup
;guest ok = yes

service smb restart
查看共享
sudo apt-get install smbclient
smbclient -L localhost

挂载window共享

mount #查看所有挂载的目录
sudo mount -t cifs -o username=administrator,password=123456,dir_mode=0777,file_mode=0777 //192.168.31.225/ISO /media/iso/
sudo [mount -t cifs -o username=administrator,password=123456,dir_mode=0777,file_mode=0777,iocharset=cp936 //192.168.31.225/ISO /media/iso/ ]
fuser -km /datatmp #解除文件占用
mount -t vboxsf -o gid=999,rw D_DRIVE /media/sf_D_DRIVE

TIME_WAIT:表示主动关闭,通过优化系统内核参数可容易解决。
CLOSE_WAIT:表示被动关闭,需要从程序本身出发。就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着.
ESTABLISHED:表示正在通信

################################################################################

常用alias

以下bash中别名设置我还并没有完全使用,也是个人觉得非常有用的(多了记起来也麻烦),所以收集在一起,习惯就好。
/etc/profile.d/alias.sh:
1
alias wl='ll | wc -l'
alias l='ls -l'
alias lh='ls -lh'
alias grep='grep -i --color' #用颜色标识,更醒目;忽略大小写
alias vi=vim
alias c='clear'  # 快速清屏
alias p='pwd'

# 进入目录并列出文件,如 cdl ../conf.d/
cdl() { cd "$@" && pwd ; ls -alF; }

alias ..="cdl .."
alias ...="cd ../.."   # 快速进入上上层目录
alias .3="cd ../../.."
alias cd..='cdl ..'

# alias cp="cp -iv"      # interactive, verbose
alias rm="rm -i"      # interactive
# alias mv="mv -iv"       # interactive, verbose

alias psg='\ps aux | grep -v grep | grep --color' # 查看进程信息

alias hg='history|grep'

alias netp='netstat -tulanp'  # 查看服务器端口连接信息

alias lvim="vim -c \"normal '0\""  # 编辑vim最近打开的文件

alias tf='tail -f '  # 快速查看文件末尾输出

# 自动在文件末尾加上 .bak-日期 来备份文件,如 bu nginx.conf
bak() { cp "$@" "$@.bak"-`date +%y%m%d`; echo "`date +%Y-%m-%d` backed up $PWD/$@"; }

# 级联创建目录并进入,如 mcd a/b/c
mcd() { mkdir -p $1 && cd $1 && pwd ; }

# 查看去掉#注释和空行的配置文件,如 nocomm /etc/squid/squid.conf
alias nocomm='grep -Ev '\''^(#|$)'\'''

# 快速根据进程号pid杀死进程,如 psid tomcat, 然后 kill9 两个tab键提示要kill的进程号
alias kill9='kill -9';
psid() {
  [[ ! -n ${1} ]] && return;   # bail if no argument
  pro="[${1:0:1}]${1:1}";      # process-name –> [p]rocess-name (makes grep better)
  ps axo pid,user,command | grep -v grep |grep -i --color ${pro};   # show matching processes
  pids="$(ps axo pid,user,command | grep -v grep | grep -i ${pro} | awk '{print $1}')";   # get pids
  complete -W "${pids}" kill9     # make a completion list for kk
}

# 解压所有归档文件工具
function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
 else
    if [ -f $1 ] ; then
        # NAME=${1%.*}
        # mkdir $NAME && cd $NAME
        case $1 in
          *.tar.bz2)   tar xvjf $1    ;;
          *.tar.gz)    tar xvzf $1    ;;
          *.tar.xz)    tar xvJf $1    ;;
          *.lzma)      unlzma $1      ;;
          *.bz2)       bunzip2 $1     ;;
          *.rar)       unrar x -ad $1 ;;
          *.gz)        gunzip $1      ;;
          *.tar)       tar xvf $1     ;;
          *.tbz2)      tar xvjf $1    ;;
          *.tgz)       tar xvzf $1    ;;
          *.zip)       unzip $1       ;;
          *.Z)         uncompress $1  ;;
          *.7z)        7z x $1        ;;
          *.xz)        unxz $1        ;;
          *.exe)       cabextract $1  ;;
          *)           echo "extract: '$1' - unknown archive method" ;;
        esac
    else
        echo "$1 - file does not exist"
    fi
fi
}

# 其它你自己的命令
alias nginxreload='sudo /usr/local/nginx/sbin/nginx -s reload'
要去掉别名,请用unalias aliasname,或者临时执行不用别名,执行原始命令\alias 。

但是需要将ssh服务器上的代码映射到本地进行编辑。所以需要安装sshfs

映射命令:sshfs username@192.168.1.100:path local_path

                 username:ssh服务器的用户名

                 192.168.1.100:ssh服务器地址

                  path: android 源码地址

                  local_path:本地地址
  1. 为root账户修改一个密码;

    在终端下输入”sudo passwd root”命令,终端会提示输入当前账户密码,正确输入后,再输

入两次你想要为root账户赋予的密码即可。

  1. 设置root账户自动登录;
    (a) 查看/etc/gdm/目录下是否存在custom.conf文件,如果存在,则直接跳到下一步,如果不存在

,则依次打开”SystemàAdministrationàLogin Screen”,点击“Unlock”后,修改Login Screen

Settings的某一项设置,比如Enable或者Disable一下“Log in as automatically”,然后关闭该

窗口,再查看一下/etc/gdm/目录下,custom.conf文件应该就会存在了。

s

(b) 编辑/etc/gdm/custom.conf文件,修改其中的AutomaticLoginEnable,AutomaticLogin,

TimedLogin三项,具体如下所示:

[daemon]
AutomaticLoginEnable=true 这个修改为true
AutomaticLogin=root 这个修改为root
TimedLoginEnable=false
TimedLogin=root 这个修改为root
TimedLoginDelay=10
DefaultSession=gnome

`