系统迁移,虚拟机系统向host机迁移的实现如下:
虚拟机迁移到实体机工具准备:
usb 3.0硬盘盒 x1
2T 128 cache x1
usb 3.0 接口 x1
虚拟机迁移到虚拟磁盘的工具准备:
2T vmdk分割 x1
第一部分 制作引导分区
1.grub-install /dev/sdx #将boot安装到/dev/sdx磁盘
2.首先划分100M 为boot分区, fdisk /dev/sdx 新建一个100M分区;分区工具可以选择cfdisk[.distrib] /dev/sdx (注意:这里划分的主分区 boot标记.)
3.2 /dev/sdx1
4.修改uuid,tune2fs -U xx /dev/sdx1 #xx 为需要迁移的DEBIAN/dev/sda1的UUID
注意:查看UUID的几种方式
>uuidgen | xargs tune2fs /dev/sdx -U
or
>blkid /dev/sdx
or
>ls -l /dev/disk/by-uuid
-----------------------------------------------------
到此为止启动部分已经制作完成.
第二部分 制作文件系统
1.新建一个lvm分区,划分足够大的空间(注意:磁盘大小不要超过2T);fdisk /dev/sdx 或者 cfdisk[.distrib] /dev/sdx,类型选择8E;完成后查看/dev/会出现/dev/sdx5逻辑分区.(注意:这里划分的逻辑分区.)
2.lvm 操作:
>pvcreate /dev/sdx5 #pv
>vgcreate xx /dev/sdx5 #(xx 是临时的vg名称后面将会把它更改为:DEBIAN) #vg
>lvcreate -n swap_1 -L xG xx #创建交互分区的大小,lv 查看lv使用lvs -v
> /dev/xx/swap_1 #or mkswap
>lvcreate -n root -L xG xx #lv 查看lv使用lvs -v
>4 /dev/xx/root #创建根文件系统
lvm分区建立完成后,需要拷贝文件分区.
>mkdir /t1
>mkdir /t2
>mount /dev/sdx1 /t2
>mount /dev/sda1 /t1
>cd /t1
>cp -a * /t2
>umount /t1
>umount /t2
>mount /dev/xx/root /t2
>cp -a /.. /.. /t2 #注意:这里是需要拷贝当前运行系统的根分区下的文件到/t2,/proc,/sys 这两个目录在这里不能包含在内.
>mount /dev/DEBIAN/root /t1
>cd /t1
>cp -a proc sys /t2 #注意:转移到实体机上时还需要注释掉boot的配置文件中的软驱UUID.
>vgs -v
>vgrename UUID xxxx #这里是将原有的/dev/sda5的vg改名为xxxx UUID是/dev/sda5的UUID
>mv /dev/DEBIAN xxx
>vgrename UUID DEBIAN #这里是将/dev/sdx5 的vg改名为DEBIAN UUID是/dev/sdx5的UUID,注意这里的UUID是需要通过命令lvs查看的 vgs -v
>rsync -aHvP / --exclude /proc --exclude /sys --exclude /t1 --exclude /t2 /t2
>rsync --delete-before -aHvP / --exclude /proc --exclude /sys root@:/dir #将磁盘挂载到HOST:/dir
>mkdir proc sys
>chmod -R 777 var/log/clamav
>chmod g+s var/log/clamav
>chmod o+t var/log/clamav
>rsync -avzP / --exclude /proc --exclude /sys --exclude /home --exclude /etc/network --exclude /tmp --exclude /run --exclude /dev root@dst-addr:/ #这里必须排除/etc/network,因为这里需要使用ip地址进行传输.
>rsync -avzP / --exclude /proc --exclude /sys --exclude /home/vsftpd/web/nginx-1.2.1/apt --exclude /home/vsftpd/web/nginx-1.2.1/bootstrap --exclude /home/backup --exclude /home/vsftpd/bootstrap --exclude /home/vsftpd/eclipse root@192.168.10.1:/mnt/lfs/ #适合小硬盘.
-----------------------------------------------------
到此为止系统迁移工作已完成,需要注意的地方是制作完成的磁盘不能使用usb启动;正确做法是使用sata方式.制作过程还有一些需要注意的地方是virtualbox 5.0 需要安装扩展包而且需要将当前用户添加到vboxuser组才能识别usb硬盘.
不使用硬盘盒安装grub
----------------
1.使用Debian-wheezy_11.iso系统光盘进入还原模式.
2.$>mount /dev/DEBIAN/root /mnt #挂载根<ROOT>文件系统.
$>chroot /mnt #切换到根<ROOT>文件系统.
$>mount /dev/sda1 /boot/ #挂载<BOOT>分区.
$>grub-install /dev/sda #安装<GRUB>.
$>exit
裁剪Wheezy
----------------
$>rsync -aHvP / --exclude /proc --exclude /sys --exclude /home/vsftpd/web/nginx-1.2.1 --exclude /home/vsftpd/bootstrap --exclude /home/vsftpd/macosx --exclude /home/vsftpd/eclipse --exclude /home/vsftpd/KMouse --exclude /home/vsftpd/cxx --exclude /home/vsftpd/cross-tools --exclude /home/vsftpd/crossover --exclude /home/vsftpd/cherry --exclude /home/vsftpd/build-essential --exclude /home/vsftpd/boost_1_61_0 --exclude /home/vsftpd/bochs --exclude /home/vsftpd/gparted --exclude /home/vsftpd/j2EE --exclude /home/vsftpd/guessnet --exclude /home/vsftpd/gtk --exclude /home/vsftpd/gtk --exclude /home/vsftpd/gtk --exclude /home/vsftpd/gtk --exclude /home/vsftpd/gradle --exclude /home/vsftpd/lfs --exclude /home/vsftpd/lfs-systemd --exclude /home/vsftpd/Modules --exclude /home/vsftpd/nvidia --exclude /home/vsftpd/rdesktop --exclude /home/vsftpd/scrt --exclude /home/vsftpd/se --exclude /home/vsftpd/shared --exclude /home/vsftpd/srv --exclude /home/vsftpd/systems --exclude /home/vsftpd/teamviewer --exclude /home/vsftpd/vmboxes --exclude /home/vsftpd/vhd --exclude /home/vsftpd/vlc --exclude /home/vsftpd/vmware --exclude /home/vsftpd/vncserver --exclude /home/vsftpd/websrv --exclude /home/vsftpd/Workings --exclude /home/vsftpd/wtools --exclude /application/vmboxes --exclude /application/vms --exclude /home/backup --exclude /altera --exclude /MATLAB --exclude /home/vsftpd/unlocker207 --exclude /home/vsftpd/unlocker212 ...
解压gz文件
----------------
$>gunzip -d
将img转换成vdi/vmdk
----------------
$>VBoxManage convertfromraw --format VDI/VMDK /.vmdk
将"DEBIAN"卷组修改"xx"
----------------
$>vi /etc/fstab #将"DEBIAN"更改为"xx"即可,都需要/dev/sda1和/boot/中grub/文件.
$>vi /boot/grub/ #将"DEBIAN"更改为"xx"即可.
$>cd /path #注意根据具体需求修改这里的"/path"路径.
$>cp /boot/-3.2.0-4-amd64 /path/
$>gunzip
$>mkdir initrd && mv initrd
$>cd initrd
$>cpio -ivdum < #解压完之后需要修改"initrd/conf//resume",将"DEBIAN"更改为"xx"即可.
$>rm -rf
$>find . | cpio -o -H newc | gzip > /boot/-3.2.0-4-amd64
$>vgs -v
$>vgrename DEBIAN xx #将"DEBIAN"卷组修改为"xx".
$>update-grub
注意:将"DEBIAN"卷组修改为"xx",重启后实测成功了.
ctdb,apparmor启动出错,以将/etc//ctdb,apparmor 命令注释掉了.
vi批量注释:
进入vi/vim编辑器,按下CTRL+V 进入可视化模式(visual block).
移动光标上移或下移,选中多行开头;选中完毕后,按大写的I键,此时下方会提示进入"insert"模式,插入你要插入的注释符号.eg.#
最后按ESC,你就会发现多行代码已经被注释掉了.
ltsp 默认桌面启动管理器是gdm3,这里需要修改它:
gnome3 回到经典模式,使用命令:
第一种方式:
update-alternatives --config x-session-manager
-----------------------------------------------------
0 /usr/bin/gnome-session #0 是默认值
1 /usr/bin/gnome-session-fallback #fallback 这是经典模式
2 /usr/bin/gnome-session
输入1,表示使用经典模式
第二种方式:
设置 gsettings set session-name 'gnome-fallback'
查看 gsettings get session-name
两种取值方式:gnome #gdm3,gnome-fallback #gnome2
恢复gnome模式 gsettings set session-name 'gnome'
经过实践证明:gsettings 方式可以针对单个用户生效,测试在使用命令设置时随便取个'xx',注销使用gnome 提示:"failed to laod session 'xx' ",因此我们可以修改gnome 为gnome-fallback
/etc/alternatives 目录中包含 x-session-manager
/opt/ltsp/i386/etc/alternatives 中并不包含 x-session-manager 所以试着修改/etc/alternatives 已到达修改ltsp或者使用gsettings.
debian 自动登录,修改gdm3的登录pam文件
1.vi /etc//gdm3 #将auth required pam_succeed_if.so user!=root quiet_success 注释掉
2.修改gdm3的设定文件
vi /etc/gdm3/
AutomaticLogin=false #改为true
AutomaticLogin=root #以root自动登录
如果想等几秒再登录,操作如下所示:
TimedLoginEnable=true
TimedLogin=root
TimedLoginDelay=5 #延迟5秒登录,最后修改gdm3的自动登录pam文件.
vi /etc//gdm3-autologin
将 auth required pam_succeed_if.so_user!=root quiet_success 注释掉.
有关gnome配置问题可以查看:man 5
gnome新建用户
useradd -g test -d /home/xxx -s /bin/bash -m xxx #有种情况是hy用户已经配置好了文件,其他用户也需要使用同样配置时;拷贝hy用户下的所有配置到其他用户的主目录时登录会出现问题.
chown -R user1:user1 dir #修改属主
chmod -R 644 dir #修改权限
usermod -a -G group_a,group_b,user #将用户添加到组
####################经过验证####################
>useradd -g USR -d /home/USR -s /bin/bash -m USR #创建用户帐号.
>passwd USR #更改密码,否则无法登录.
>mv .ICEauthority ICEauthority
>cd /home/hy
>rsync -av . /home/USR #--exclude dir 排除某个目录.
>chown -R USR:USR /home/USR
>rm -rf .ICEauthority
>mv ICEauthority .ICEauthority
>usermod -G root USR
>locale #显示当前环境的字符编码,这样做完之后不用更改字符编码;经过查看,打开其他用户的包含有中文的文件会显示乱码.
#!/bin/bash
useradd -g hy -d /home/$1 -s /bin/bash -m $1
rsync -avP . --exclude .ICEauthority /home/$1
chown -R $1:hy /home/$1
chmod 2777 /home/$1
usermod -G dialout,cdrom,floppy,audio,dip,video,plugdev,scanner,bluetooth,netdev,wireshark -a $1
passwd $1
破解Linux系统超级root密码
1.在Grub的引导程序菜单上,选择你要进入的条目,键入"e"来进入编辑模式.
2.可以删除一部分内容,然后在适当位置加上"init=/bin/bash",
3.编辑完成后使用CTRL+X 即可进入Linux系统.
4.将文件系统重新挂在为可读写状态: mount -o remount rw -t ext4 /
5.最后使用"passwd xx"更新密码即可.
boot命令行的基本使用,这种情况适合于系统崩溃;但是又有很重要的东西在硬盘里的情况而写.
在大多数系统上,GRUB2配置文件是/boot/grub/或者/boot/grub2/. 但是,一些基于EFI的系统将它放在ESP上的一个目录中.这个目录可能是/boot/efi/EFI/grub/或者其他位置.在大多数情况下,不能直文件进行编辑;他是由脚本拼凑起来的.你可以在/etc/目录中找到一些组成片段.如果需要更你标准grub2配置,那么可以编辑这些文件.
引导Linux的实例GRUB2代码节
'Ubuntu,with Linux 3.20-24-generic-pae'{
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_gpt
insmod reiserfs
set root='(hd0,gpt6)'
search --no-floppy --fs-uuid --set=root uuid
linux /vmlinuz-3.2.0-23-generic-pae root=/dev/sda7 ro quiet splash $vt_handoff
}
关键地方介绍:
insmod 命令加载驱动程序模块.
set root 识别从中读取内核和初始化RAM磁盘的分区,但search行随后会改写此值,并根据它包含的文件系统的通用唯一识别码(UUID)编号查找该分区.
linux 行标识一个Linux内核,并设置传递给他的选项
initrd 行标识一个传递给内核的初始RAM磁盘文件.
在引导时与GRUB2 交互,为了能够修复问题,首先需要了解正常引导过程和可调整它的方式.通常,你可以使用GRUB2的内置编辑器调整引导选项来修复较小的问题.有时可使用GRUB2的内置shell从更严重的问题中恢复.
了解正常引导过程,在传统上,GRUB显示了一个文本模式菜单来显示你的引导选项;在正常引导过程中,可使用上下箭头导航该菜单,然后按下ENTER键选择想要的选项.在LINUX系统上,GRUB随后会加载内核和初始化RAM磁盘,并将计算机的控制权转交给内核.要更改引导选项,可在GRUB菜单中选择最接近你想要的实现的目标的选项,然后按下“e”键.
eg.在文本编辑器中编辑的引导代码节通常是为了执行一次引导更改.比如:希望引导单用户模式来执行低级维护,但GRUB中没有单用户选项.要实现此目的,可编辑引导代码节,并将signal添加到linux 行尾。完成上述操作后,按下CTRL+x或F10来进行引导.
使用GRUB2 shell,GRUB包含它自己内置的shell,你可在其中键入与bash或者其他Linux文本模式shell中键入的命令类似的命令.要从GRUB主菜单进入该shell,可按下c.要从grub编辑器进入该shell,可按下CTRL+C或者F2.
命令 选项 解释
boot 无 引导一个已经定义好的了内核或者链式装载程序.
cat filename 显示指定文件的内容
configfile filename 加载指定的配置文件
help [command] 显示帮助
initrd filename 加载指定的初始化ram磁盘文件
insmod module_name 加载指定的模块(驱动程序)
linux filename 加载指定的linux内核
ls [arg] 列出设备或一个设备上的文件
reboot 无 重新引导计算机
set envar=alue 将一个环境变量设置为等于某个值
识别要安装的GRUB的分区,这一点可助ls命令来完成.如果使用该命令不带任何选项,ls会显示GRUB可检测的磁盘和分区.然后你可以指定设备名和一个结尾斜杠(/),以查看它特定分区内容。
识别GRUB配置文件所在位置后,可设置prefix和root环境变量,告诉GRUB在何处找到配置文件.
> set prefix=[hd0,gpt5]/grub
grub> set root=[hd0,gpt5]
加载normal模块并启动它来调出Grub菜单
> insmod normal
grub> normal
执行永久修复,尽管可以直接编辑类修改你的设置,但此方法不可取,因为只要升级你的发行版本提供的内核,自动化脚本就可以从其他文件重新构建该文件.相反你需要编辑/etc/中的文件和/etc/default/grub中的默认全局设置.然后可以使用grub-mkconfig,从linux命令提示符生成一个新的grub。cfg文件.
-mkconfig -o /boot/grub/
如果你的问题是GRUB仅显示了一个grub>提示符或完全未启动,那么你必须将grub重新安装到硬盘上.
-install /dev/sdx
Linux系统模块操作
lsmod #查看系统安装了那些模块
rmmod #卸载模块
insmod #安装模块
modprobe #可安装模块,也可以写在模块. -r xxx
注意:insmod,modprobe都是载入kernel module,不过一般差别于modprobe能够处理module载入的相依问题.
查看Linux系统中所能支持的GLIBC版本:
strings /lib/x86_64-linux-gnu/.6|grep -i GLIBC
or
ldd --version
gnome开机启动一个指定大小的gnome-termial.
>gnome-session-properties 配置 gnome-terminal 参数
eg. gnome-termial --geometry=160X100+5+5 -e "tail -f /var/spool/apt-mirror/"
eg. gnome-termial --geometry=80X20+840+5 -htop
eg. gnome-terminal --geometry=80X26+840+300 -e 'slurm -L -i eth0'
内核调试
apt-get install linux-image-3.2.0-4-amd64-dbg debian-kernel-handbook
chmod 777 /dev/ttyS0
ln -sv /dev/ttyS0 /dev/modem
虚拟机与主机之间进行串口通信:
打开virtualbox,将com1设置enable;port number:com1,port mode:host pipe;勾选创建pipe(create pipe):填写/tmp/xx. 打开虚拟机此时会在/tmp下出现xx 文件;接下来需要进行互通测试.
使用minicom来测试互通性,配置如下:
>cd /etc/minicom
>vi #添加 pu port unix#/tmp/xx 到 中即可.
pu port unix#/tmp/xx
minicom配置方法:
>minicom -s #就能进入配置模式.
要设置内容只需要输入相应的字母就能进入设置界面:填写相关内容即可.
这里的配置为:
选 Serial port setup
修改 F - Hardware Flow Control 为No
Save setup as dfl #即可完成配置 /etc/minicom 下存放就是minicom配置文件.
打开minicom测试.
>vi /etc/default/grub #注释
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_CMDLINE_LINUX=""
这两行,添加以下内容:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,9600n8"
#Uncomment to disable graphical terminal(grub-pc only)
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"
内容修改完成后执行以下命令:
>grub-mkconfig
>update-grub2
配置允许从串口登录Linux:
vi /etc/securetty #检查这个文件是否包含ttySx 的字符串,vi搜索内容,/ttyS ,如果没有 将ttyS0串口com1 加入到这个文件中即可(添加 ttyS0).
vi /etc/inittab # /T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 这行去掉注释即可.
经过以上设置,在HOST打开minicom可以看到终端输出的信息.
GRUB的启动命令:
1.菜单命令,菜单命令只能用户grub配置文件的全局配置部分,不能用在grub命令行交互界面;菜单命令在配置文件中应放在其他命令之前.
default #设置默认启动的菜单项
fallback #设置启动某菜单项失败后返回的菜单项
hiddenmenu #隐藏菜单界面
timeout #设置菜单自动启动的延时时间
title #开始一个菜单项
2.常规命令,常规命令可以应用于配置文件和grub命令行交互界面,可使用的常规命令有:
bootp #通过bootp初始化网络设备
color #设置菜单界面的颜色
device #指定设备文件作为驱动器
dhcp #通过dhcp初始化网络设置
hide #隐藏某分区
ifconfig #手工配置网络设备
pager #改变内部页程序状态
partnew #新建一个主分区
parttype #改变分区的类型
password #为菜单界面设置口令
rarp #通过rarp初始化网络设置
serial #设置串口设备
setkey #设置键盘映射
splashimage #设置grub启动时的背景图片
terminal #选择终端类型
tftpserver #指定tftp服务器
unhide #还原某隐藏分区
3.命令行和菜单项命令
bolcklist #显示某文件所在分区位置(block list notation)
boot #启动操作系统
cat #显示文件内容
chainloader #把启动控制权软交给另外的启动引导器
cmp #比较两个文件
configfile #加载已存在的grub配置文件
debug #设置为debug模式
displayapm #显示apm bios信息
displaymem #显示内存配置
embed #嵌入stage 1.5文件
find #查找包括某文件的所有设备
fstest #测试文件系统
geometry #显示某驱动器的物理信息
halt #停止计算机运行(软件关机)
help #显示grub的命令帮助信息
impsprobe #查询对称多处理器(smp)的信息
initrd #加载initrd文件
install #安装grub
ioprobe #查询某驱动器的输入输出(I/O)端口
kernel #引导操作系统内核
lock #锁定某grub引导菜单项,使其输入密码后才可启动
makeactive #激活某主分区
map #虚拟映射某驱动器
md5crypt #使用md5加密口令
module #加载模块
modulenounzip #加载模块不进行解压
pause #暂停并等待按键
quit #退出grub
reboot #重新启动计算机
read #读取内存中的内容
root #设置grub的root设备
rootnoverify #设备grub的root设备但不装载文件系统
savedefault #保存当前的启动菜单为默认启动
setup #自动安装grub
testload #从文件系统中测试读取某文件
testvbe #测试VESA BIOS EXTENSION
uppermem #强制设置主机上位内存大小
vbeprobe #查询VESA BIOS EXTENSION信息
程序库配置路径
LIBRARY_PATH #静态库路径
LD_LIBRARY_PATH #动态库路径
PATH #执行文件的路径
dot语言
1.1 简单例子
graph graphname{
a -- b;
b -- c;
b -- d;
d -- a;
}
1.2 一样的图,不一样的布局
graph graphname{
rankdir=LR;
a -- b;
b -- c;
b -- d;
d -- a;
}
1.3 简单有向图
digraph graphname{
a->b;
b->c;
a->c;
}
1.4 带标签的简单有向图
digraph graphname{
T [label="Teacher"] //node T
P [label="Pupil"] //node p
T->P [label="Instructions",fontcolor=darkgreen] //edge T->p
}
1.5 同样的图,不同的形状和颜色
digraph graphname{
T [label="Teacher" color=Blue,fontcolor=Red,fontsize=24,shape=box] //node T
P [label="Pupil" color=Blue,fontcolor=Red,fontsize=24,shape=box] //node p
T->P [label="Instructions",fontcolor=darkgreen] //edge T->p
}
注意:你可以选择的形状的有:box,polygon,ellipse,oval,circle,point,egg,triangle,plaintext,diamond,trapezium,parallelogram,house,pentagon,hexagon,septagon,octagon,doulbecircle,doubleoctagon,tripleoctagon
1.6 总结
digraph summary{
start [label="start with a node"]
next [label="choose your shape",shape=box]
warning [label="don't go overboard",color=Blue,fontcolor=Red,fontsize=24,style=filled,fillcolor=green,shape=octagon]
end [label="draw your graph!",shape=box,style=filled,fillcolor=yellow]
start->next
start->warning
next->end [label="getting better...",fontcolor=darkblue]
}
1.7 高级
digraph hierarchy{
nodesep=1.0 //increases the separation between nodes
node [color=Red,fontname=Courier,shape=box] //all nodes will this shape and color
edge [color=Blue,style=dashed] //all the lines look like this
Headteacher->{deputy1 deputy2 BusinessManger}
deputy1->{Teacher1 Teacher2}
BussinessManger->ITManager
{rank=same;ITManager Teacher1 Teacher2} //put them on the same level
}
1.8 记录
digraph structs{
node[shape=record]
struct1 [label="<fo>left<f1> mid\ dle|<f2> right"];
struct2 [label="{<f0> one|<f1> two\n\n\n}" shape=Mrecord];
struct3 [label="hello\nworld |{b |{c |<here> d|e} | f} g | h"];
struct1:f1->struct2:f0;
struct1:f0->struct3:f1;
}
1.9 例子
有限状态机
digraph finite_state_machine{
rankdir=LR;
size="8,5"
node [shape=circle];
s0->s1 [label="Lift Nozzle"]
s1->s0 [label="Replace Nozzle"]
s1->s2 [label="Authorize Pump"]
s2->s0 [label="Replace Nozzle"]
s2->s3 [label="Pull Trigger"]
s3->s2 [label="Release Trigger"]
}
数据流示意图
digraph dfd{
node[shape=record]
store1 [label="<f0 left|<f1> Some data store"];
proc1 [label="<f0> 1.0|<f1> Some process here\n\n\n" shape=Mrecord];
entil [label="Customer" shape=box];
store1:f1->proc1:f0;
entil->proc1:f0;
}
数据流示意图2
digraph dfd2{
node[shape=record]
enti1 [label="Customer" shape=box];
enti2 [label="Manager" shape=box];
subgraph cluster_level{
label="level 1";
proc1 [label="{<f0> 1.0 |<f1> One process here\n\n\n}" shape=Mrecord];
proc2 [label="{<f0> 2.0 |<f1> Other process here\n\n\n}" shape=Mrecord];
store1 [label="<f0> |<f1> Data store one"];
store2 [label="<f0> |<f1> Data store two"];
{rank=same;store1,store2}
}
enti1->proc1
enti2->proc2
store1->proc1
store2->proc2
proc1->store2
store2->proc1
}
对象继承
digraph obj{
node[shape=record];
rankdir="BT";
teacher [label="{<f0> Teacher|<f1> \n |<f2>\n}"];
course [label="{<f0> Course |<f1>\n|<f2>\n}"];
student [label="{<f0>Student |<f1>\n |<f2>\n}"]
lesson [label="{<f0>lesson |<f1>\n |<f2>\n}"]
tutuorial [label="{<f0>tutuorial |<f1>\n |<f2>\n}"]
assessment [label="{<f0>assessment |<f1>\n |<f2>\n}"]
coursework [label="{<f0>coursework |<f1>\n |<f2>\n}"]
exam [label="{<f0>exam |<f1>\n |<f2>\n}"]
{rank=same;teacher course student}
teacher->course [dir="forward",arrowhead="none",arrowtial="normal",headlabel="1",taillabel="1.."];
student->course [dir="forward",arrowhead="none",arrowtial="normal",headlabel="1",taillabel="1.."];
lesson->course [dir="forward",arrowhead="diamond",arrowtial="normal"];
tutorial->course [dir="forward",arrowhead="diamond",arrowtial="normal"];
assessment->course [dir="forward",arrowhead="diamond",arrowtial="normal"];
coursework->assessment;
exam->assessment;
}
关系实体
digraph ER{
node[shape=box];
book;
customer;
loan;
{rank=same;book,customer,loan}
book->loan[dir="forward",arrowhead="crow",arrowtial="normal"];
customer->loan[dir="forward",arrowhead="crow",arrowtial="normal"];
}
图像属性
label="My Graph" #给图像设置标签
rankdir=LR; #将图片由原来从上到下的布局变成从左到右布局
{rank=same;a,b,c} #将一组元素放到同一个level
splines="line"; #让边框变为直线,没有曲线和锐角
k=0.6; #用来在布局中影响spring属性,spring属性可以用户将节点往外推,这个twopi和sfdp布局中很有用.
交点属性
[label="some label"] #给交点打标签
[color="red"] #给交点上色
[fillcolor="blue"] #设置交点的填充色
边的属性
[label="some label"] #给边设置标签(设置路径的权重的时候很有用)
[color="red"] #给边上色(标识路径的时候很有用)
[penwidth=2.0] #给边适配厚度,标识路径的时候很有用
尺寸,背景颜色
fixedsize=true;
size"1,1";
resolution=72;
bgcolor="#cfcfd532";
global生成HTML文档
>cd src_dir
>gtags -v
>htags -v
>htags --suggest
索引完成后将会生成3个文件
GTAGS:所有变量,函数定义的相关信息
GRTAGS :所有变量,函数被引用的相关信息
GPATH :源代码中每个文件的信息
以上三个文件均是Berkeley DB文件,所以直接cat将会是乱码.使用gtags --dump可以查看文件的具体内容.
--dump GPATH
如果一个文件被更新了,需要更新TAGS文件时,可以使用 更新一个文件的TAGS
--signal-update file
global xxxx #查询xxxx定义的文件
global -c xx #列出所有以xx开头的变量或文件类型
blobal -f #列出文件中定义的所有变量,文件或类型.
-t 输出时使用标准的ctags格式
-x 输出时使用ctags cxref格式
-i 查询时不区分大小写
sourceweb源代码查看工具
DNS 搭建和测试,bind9 域名服务器需要联网;否则会在日志中打印错误信息.
1.配置一个主域名服务器()
安装bind9,ls /etc/bind/ -l,配置文件说明:
#设置一般的named参数,指向该服务器使用的域数据库的信息源.
.options #全局选项
#根服务器指向文件,由internet NIC创建和维护,无需修改,但是需要定期更新.
#localhost正向区域文件,用于将名字localhost转换为本地回送IP地址(127.0.0.1)
db.127 #localhost的反向区域文件,用于将本地回送IP地址(127.0.0.1)转换为名字localhost.
主配置文件/etc/的配置语句
命令 用法
acl #定义IP地址的访问控制清单
control #定NDC使用的控制通道
include #把其他文件包含到配置文件中.
key #定义授权的安全密钥
logging #定义日志写什么,写在哪里.
options #定义全局配置选项和缺省值
server #定义远程服务器的特征
trunsted-keys #为服务器定义DNSSEC加密密钥.
zone #定义一个区
type项的值
master #表示定义的主域名服务器
slave #表示定义的辅助域名服务器
hint #表示互联网中根域名服务器
在debian系统中,option语句的配置,被移至.options文件中.
创建主域名服务器
1.在主机上安装bind9工具
2.使用编辑器,编辑配置文件/etc/bind/
添加以下内容:
zone "" {
type master;
file "/etc/bind/";
};
zone "10.168." {
type master;
file "/etc/bind/db.192";
}
3.创建区的资源文件,创建区资源文件/etc/bind/内容如下
$TTL 604800
$ORIGIN .
@ IN SOA . . (
2006080401 ;serial
604800 ;refresh
86400 ;retry
2419200 ;expire
604800 ); ;negative cache TTL
;
IN NS ns
IN MX 0
@ IN A 192.168.10.88
ns IN A 192.168.10.88
www IN A 192.168.10.88
webserver IN CNAME www
mail IN A 192.168.10.88
ftp IN A 192.168.10.88
ns(x) IN A 192.168.10.(xx) ;ns(x) 这里的x可以填写数字, 192.168.10.(xx) 这里的xx可以改成其他辅助域名服务器ip或者纯缓存域名服务器.
第一行是TTL设定,生存时间记录字段.它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度.这里定义为604800秒,也就是1周.
第二行是$ORIGIN设定,说明下面的记录出自何处;这里需要注意的地方是请留意最后一个小数点"."
第三行是一个SOA记录的设定,这里我们看到一个特殊字符"@",它就是ORIGIN的意思,也就是刚刚所定义的$ORIGIN . 内容,你也可以写成 . 也可以用“@”来代替.
假如这个文件前面没有定义 "$ORIGIN" , 那这个“@”的值就以 里的 zone. ;接着SOA 后面,指定了这个区域的授权主机和管理者的信箱,这里分别是 "." 和 "."。 我们平时使用的信箱通常是 “user@host” 这样的格式,但是因为@在dns记录中是个保留字符,所以在soa中就用"."来代替 @. 目前这个信箱是 "root@."。
接下来的SOA设置,是被括在"()"之前的5组数字,主要作为和slave服务器同步的dns资料所使用的资料:
serial 其格式通常会是 “年月日+修改次序”(但是也不一定如此,你自己能够记住就行);当slave要进行资料同步的时候,会比较这个号码。如果发现在这里的号码比它那边的数值“大”,就进行更新,否则忽略.不过设置serial有一个地方一定要注意:不能超过10位数字!
refresh 这里告诉slave要隔多久要进行资料同步(是否同步要看serial的比较结果).
retry 如果slave在进行更新失败后,要隔多久进行重试.
expire 这是记录预期时间,当slave 一直未能成功与master 取得联系,那到这里就放弃retry,同时这里的资料也将标识为过期(expired).
minimum 这是最小默认TTL值,如果你在前面没有定义 “$TTL” 来定义,就会以此值为准.
请注意:SOA记录中这对"()"符号之第一个“(”括号一定要和SOA写在同一行,而不能用enter断行到下一行去,而且其左边最好有一个空格键或者tab键。而最后一个“)”括号也不能写在注解符号“;”的右边.置DNS的RR记录档,其格式要求非常严格,我们丝毫不能掉以轻心.比如:如果句子是以空格键或者tab键开始的,其设置被视为上一个“记录项”的内容。所以,如果你要为“同一个记录项”定义多个记录设置,而不想重复大字,你到可以偷懒 在接着它后面几行用空白或tab来缩排就可以了.
NS 表明负责. 这个域的nameserver 是 这台主机.
MX 记录标明发往域的邮件由这台服务器接收
A 记录标明了IP地址和域名之间的对应关系
接下来创建该区的反向映射资源文件:
$TTL 604800
@ IN SOA . . (
2006080401 ;serial
604800 ;refresh
86400 ;retry
2419200 ;expire
604800 ); ;negative cache TTL
;
@ IN NS .
88 IN PTR .
88 IN PTR .
88 IN PTR .
88 IN PTR .
xx IN PTR ns(x).. #这主要是配置二级或者三级才会用到
重启dns服务, “ /etc//bind9 restart ”.
查看系统日志,可了解bind的启动情况 tail -f /var/log/syslog
测试,使用 nslookup 测试,需要在客户机上配置:
vi /etc/ 添加以下内容:
search
nameserver 192.168.10.88
nslookup 测试
nslookup
>set type=any
>
dig 测试
dig @192.168.10.88
dig @192.168.10.88
#######反向查询#######
dig @192.168.10.88 -x 192.168.10.88
####### 纯缓存域名服务器 #######
测试: dig @192.168.10.xx
配置,修改 /etc/bind/.options 文件
options {
directory "/var/cache/bind";
forwarders {
192.168.10.88; #主域名服务器的IP地址
};
};
测试:dig @192.168.10.xx
所谓 forwarders,就是某台ns主机遇到非负责的zone(slave zone 也属于本机负责的范围)查询请求的时候,将不直接向 “.”zone 查询而把请求转交给指定的forwarders(一台或多台)主机代为查询.
我们知道,当dns服务器接收到客户端主机的查询请求时,首先会检查这个查询是否属于本机管辖,否则将转向 "."zone在逐级的查询下去,最后再把查询的结果告诉客户端.
着这个过程中,dns服务器还会将查询的结果放到缓存中,只要缓存中的TTL没过期;在下次遇到同样的查询的时候,就可以直接将结果响应给客户端,而无需重复上次的查询流程.
如果dns服务器上指定了forwarders,那这个dns发现缓存中没有记录时,将不向"."查询,而是向forwarder 送出同样的请求 (转发),然后等待查询结果,即把逐级往下查询这个耗费精力的动作交给forwarders负责.但无论结果是自己直接查询得来的,还是forwarders送回来的,dns服务器都会保存一份数据在缓存中.
这样,以后的相同查询就快多了,这对于dns服务器的客户端而言查询效率会提高很多. /var/named/
dis @ . ns > /var/named/
注意:这里配置的 纯缓存域名服务器 只需要修改一个 “/etc/bind/” 就可以了 无需更改其他文件.
####### 辅助域名服务器 #######
192.168.10.xx 为我们的缓存服务器,这里假设服务器ip地址为:192.168.10.66
编辑主配置文件 vi /etc/ 中加入如下内容:
zone "" {
type slave;
file "/etc/bind/slaves/";
master {192.168.10.88;};
};
zone "192.168." {
type slave;
file "/etc/bind/slaves/db.192";
master {192.168.10.88;};
};
type #后面的值已经成为slave,表示定义的辅助域名服务器
file #后面也可以是别的文件名不必与主域dns服务器设置一样
masters #后为主域dns服务器ip地址,可以是多个ip, {ip1;ip2;};
创建/etc/bind/slaves 目录
cd /etc/bind
mkdir slaves
chown slaves
重启dns服务,/etc//bind9 restart
注意:named进程第一次启动时,辅助域名服务器就下载主域名服务器的信息;辅助域名服务器根据主域名服务器对应的soa规定的刷新时间间隔,到主域名查询相关信息.
ls - /etc/bind/slaves #查看 /etc/bind/slaves目录,我们会发现已经从主域名服务器获取了相应的资源文件.
MAIL 收发邮件配置和测试
mail服务器搭建相当复杂,后期补上.
IRC 聊天服务器配置和测试
需要查看官网文档,学习配置.
DEBIAN更新问题
只能使用光盘发布版本更新,否则会出现一些软件不能使用的问题.
DEBIAN 启动ERROR INFO
1.[ 57.507814] pool[5177]: segfault at 0 ip 00007fd0eb43fa80 sp 00007fd0df172ed8 error 4 in .0.1400]
2.[ 72.804453] pool[5181]: segfault at 0 ip 00007f988ddefa80 sp 00007f9881d25ed8 error 4 in .0.1400.1[7f9]
解决这个问题的方法是:apt-get purge libtracker-* 这里不能卸载,如果卸载会出现打开目录使用图片软件打开会导致文件无法正常查看. ##已放弃
配置DNS,无法访问网页
vi /etc/
nameserver #添加到/etc/
1.2.4.8
>/etc//networking restart
>ifdown eth0 && ifup eth0
Virualbox 更改磁盘UUID:
vboxmanage internalcommands sethduuid
VMWARE 更改虚拟磁盘的名称:
vmware-vdiskmanager -n SRV-MAIL-Centos-7-x86_64.VMDK
wireshark安装:
>apt-get install wireshark
>groupadd wireshark #创建 wireshark 组
>usermod -a -G wireshark USR #将USR添加到 wireshark 组
>chgrp wireshark /usr/bin/dumpcap #将dumpcap 的所属组改为 wireshark
>chmod 770 /usr/bin/dumpcap #改变dumpcap的权限,让wireshark 组成员可以执行该程序
>setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap #使用setcap获取权限
>getcap /usr/bin/dumpcap #验证改变
############## 以上办法还不能完全解决wireshark的普通用户打开网口,使用下面可以完全解决;已测试.##############
>chgrp wireshark /usr/bin/dumpcap
>chmod 4755 /usr/bin/dumpcap
配置32BIT的环境:
>dpkg --add-architecture i386
>apt-get update && apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386
x86_64架构上卸载32BIT环境:
>apt-get remove --purge `dpkg --get-selections | grep i386 | awk '{print $1}'` && dpkg --remove-architecture i386
包管理工具:
dpkg – Debian 包安装工具
apt-get – APT 的命令行前端
aptitude – APT 的高级的字符和命令行前端
synaptic – 图形界面的 APT 前端
dselect – 使用菜单界面的包管理工具
dpkg-reconfigure - 重新配置已安装的软件包,并且它是使用 debconf 进行配置的.
dpkg-source - 管理源码包
dpkg-buildpackage - 自动生成包文件
apt-cache - 在本地缓冲区检查包文件
aptitude:
aptitude upgrade #跟踪testing 版本的更新情况,对系统上所有软件包进行升级
apt-get dselect-upgrade #跟踪testing 版本 — 根据 dselect 的选择对系统上的软件包进行升级
aptitude install package/unstable #从unstable中安装package,并由testing版本提供安装依赖的包
aptitude install -t unstable package #通过设置unstable的Pin-Priority为990,可以从unstable处安装package及其依赖的包
apt-cache policy xxx ... #检查xxx,...软件包的状态
aptitude show xxx ... | less #查看xxx ... 软件包的有关信息
aptitude install xxx=2.2.4-1 #安装xxx软件包的特定版本 2.2.4-1
aptitude install foo bar- #安装 foo 软件包并删除 bar 软件包
aptitude remove bar #删除 bar 软件包,但保留其配置文件
aptitude purge bar #删除 bar 软件包及其所有配置文件
apt-get:
apt-get -t stable upgrade
apt-get -t stable dist-upgrade
apt-get update #更新软件包列表
apt-get dist-upgrade #系统升级
apt-get source xxx #手工下载源码包
更改系统字体:
>fc-list |grep -i yahei
>vi /etc/fonts//65- #按照要求填写family,eg.<prefer><family>Microsoft YaHei</family></prefer>,这样整个桌面环境的中文字体就统一于微软雅黑了.
dpkg:
dpkg --status package #列出一个软件包中包含那些默认配置文件
阻止软件包升级:
>dpkg --get-selections \* > #导出软件包选择列表,编辑文件 ,修改想要恢复的软件所在的行,例如 libc6,则将:"libc6 install" 改为:"libc6 hold"保存文件.
>dpkg --set-selections < #装入 dpkg 数据库,在每个软件包安装过程中保持该软件包不变.
>echo libc6 hold | dpkg --set-selections #如果知道要恢复的软件包名称,在每个软件包安装过程中保持该软件包不变.
编译源码包:
从源码编译需要 foo_*.dsc、foo_*. 和 foo_*. 文件(注意,对于由 Debian 开发的软件包,没有 . 文件),当得全了这些文件,如果你这安装了 dpkg-dev 软件包,运行:
>dpkg-source -x
>cd xxx #su -c "apt-get update;apt-get install fakeroot"
>dpkg-buildpackage -rfakeroot -us -uc
>su -c "dpkg -i ../"
自定义内核创建工具:
对于希望(或必须)使用自定义内核的用户,推荐下载 kernel-package 软件包;该软件包包含了创建内核包的脚本.有了它,新建 Debian 内核镜像包只需在内核源码目录的一级目录运行
>make-kpkg kernel_image
在内核源码所在目录的顶层,执行下述命令可获得有关帮助
>make-kpkg --help
卸载旧内核:
脚本可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同;因此你可以使用如下命令删除不想要的内核镜像包
>dpkg --purge --force-remove-essential kernel-image-NNN
查看PC硬件:
>pager /proc/pci
>pager /proc/interrupts
>pager /proc/ioports
>pager /proc/bus/usb/devices
>apt-get install pciutils usbutils lshw #安装查看工具
>lspci -v |pager
>lsusb -v |pager
>lshw |pager
查看内核版本与CPU架构
----------------
$>uname -srm
qemu命令行
----------------
-kernel /path/bzImage #内核镜像
-append $CMD #内核命令行
-initrd /path/$FILE #使用文件作为ram盘.
规划使用习惯
----------------
$>vi /usr/bin/aa
----------
#!/bin/bash
sudo date -s 20080101
sudo hwclock -w
gnome-terminal --hide-menubar --title="Terminal" --geometry=100X85+85+85
$>aa #打开终端.
$>v #在当前目录下创建文件,方便记录笔记.
$>g #打开终端.
$>r #删除当前目录的所有文件.
$>s #scp用法,s $usr@$srvip
$>l #查看当前文件夹的列表文件.
$>h #护眼工具.
$>n #nautilus,文件浏览器.
$>nk #killall.
$>lx #屏幕录像.
$>cr #crossover.
$>sf #sshfs.
$>gsm #gnome-system-monitor.
$>web #iceweasel.
$>frp #frpc.
$>vnc #vncserver.
$>vreg #注册vncserver.
$>nn #与cnn配套使用.
$>cnn
Scrivener for Windows (Regular Licence)
----------------
Serial Number Name ?? ?
Serial Number SCRWIN001-A09F-MPXW-1YK6-7KSF-G0Q1
注意:#按照原样输入?? ?即可.
Scrivener 3 for macOS (Regular Licence)
----------------
Serial Number Name ?? ?
Serial Number SCRIV3MAC001-KRG9-6YXC-9WDB-NQST-XRF9
注意:#按照原样输入?? ?即可.
Scapple for macOS (Regular Licence)
----------------
Serial Number Name ?? ?
Serial Number SCAPPLE001-P5MP-733S-NTN0-NLLT-QMH9
注意:#按照原样输入?? ?即可.
Scrivener激活须知
----------------
可以同时用在5台设备,支持切换设备.
Scrivener切换设备
----------------
注册->"已注册版本"->停用
#注意这里需联网才可操作.
lxr阅读内核代码
----------------
$>mkdir -p /opt/lxr/db
$>mkdir -p /opt/lxr/glimpse
$>mkdir -p /opt/lxr/swish
$>mkdir -p /opt/lxr/source
or
$>mkdir -p /opt/lxr/{db,glimpse,swish,source}
$>cd /path/lxr-2.3.1
$>./genxref --checkonly #检查配置环境.
$>./scripts/ -vv #生成默认配置文件.
eg.
#单树模式还是多树模式,此选项无法通过配置文件修改.
#如果想要修改只能删除所有数据库重新来过.
#如果只希望索引一个源码和host选择S即可.
Configure for single/multiple trees? [S/m] > m
...
#选择什么数据库
Database engine? [MYSQL/oracle/postgres/sqlite] >sqlite
--- Location? (. /var/local/lxrdb) >/opt/lxr/db
...
#glimpse/swish-e数据存储路径
--- Directory for glimpse databases? >/opt/lxr/glimpse
--- Directory for swish-e databases? >/opt/lxr/swish
...
--- Source directory? (. /home/myself/project-tree) >/opt/lxr/source
...
--- Database name? > linux
...
#注意:到这里请谨慎选择;YES则继续创建,no退出.
*** Configure another tree? [YES/no] > no
.// #lxr配置文件,配置了源码树和数据库路径等信息.
.// #创建数据库脚本.
$>cd /path/lxr-2.3.1 && vi .// #注释掉"swishbin","swishdirbase","swishconf"或者"glimpsebin","glimpseindex","glimpsedirbase".
$>cd /path/lxr-2.3.1 && ln -sf /path/lxr-2.3.1// /path/lxr-2.3.1
$>ln -sf /path// /opt/lxr/source/
$>cd /path/lxr-2.3.1 && ./genxref --url=http://localhost/lxr --version= #生成索引
or
$>cd /path/lxr-2.3.1 && ./genxref --allurls #生成索引
$>ln -sf /path/lxr-2.3.1// /etc/apache2// #配置文件.
$>firefox http://localhost/lxr/source #访问地址.
注意:以上经过验证,成功了.
开机自动配置DNS:
$>vi /home/config/
-------------
#!/bin/bash
echo -e "nameserver 1.2.4.8 \nnameserver 210.2.4.8" > /etc/
$>ln -sv /home/config/ /etc/network//dns #注意目录下的文件不能带有任何的后缀名.
iptables:
>vi /etc/
#允许回环网卡
---------------------------
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
#允许已建立的或相关连的通行
---------------------------
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#允许所有本机向外的访问
---------------------------
-A OUTPUT -j ACCEPT
#允许ssh:22 http:80 https:443 ftp:21(20000-20500)端口进入访问
---------------------------
-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -p tcp -m multiport --dports 21,20000:20500 -j ACCEPT
-A INPUT -p tcp -s 0/0 --sport 20000:20500 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#允许本地DNS(udp 53端口)和ntp(udp 123端口)访问外网
---------------------------
-A OUTPUT -p udp -d 8.8.8.8 --dport 53 -j ACCEPT
-A OUTPUT -p udp -d 8.8.4.4 --dport 53 -j ACCEPT
-A OUTPUT -p udp --dport 123 -j ACCEPT
#允许PING
---------------------------
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#记录接收数据包被拒绝(log-level=7)的日志,最高记录频率为5条/分钟,日志可通过dmesg或syslog查看
---------------------------
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
#禁止其它未允许的规则访问
---------------------------
-A OUTPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
COMMIT
####### 保存本文件,使之生效,注意,iptables不需要重启,加载一次规则就成 #####
>iptables-restore < /etc/
>vi /etc/network//iptables #保存生效的配置,让系统重启的时候自动加载有效配置.
---------------------------
#!/bin/bash
/sbin/iptables-restore < /etc/
>chmod +x /etc/network//iptables #设置可执行仅限
详解:
:INPUT ACCEPT [0:0]
# 该规则表示INPUT(进)表默认策略是ACCEPT
:FORWARD ACCEPT [0:0]
# 该规则表示FORWARD(转)表默认策略是ACCEPT
:OUTPUT ACCEPT [0:0]
# 该规则表示OUTPUT(出)表默认策略是ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。
#REJECT 是用来返回一个错误的包来回应匹配包,其他的等价于DROP,所以它是一个拒绝TARGET,在规则的结束。这个TARGET仅仅用在INPUT,FORWARD和OUTPUT链和用户自定义的链,下列选项是用来定义返回错误的结果的:
icmp-host-unreachable
icmp-port-unreachable
-m state --state <状态> 有数种状态,状态有:INVALID:无效的封包,例如数据破损的封包状态 ESTABLISHED:已经联机成功的联机状态;NEW:想要新建立联机的封包状态;RELATED:表示这个封包是与我们主机发送出去的封包有关.
设置某ip段可以访问所有服务,你需要在文件中加入-A INPUT -m iprange --src-range 192.168.1.1-192.168.1.199 -j ACCEPT .
systemtap:(帮助文档-----对编程比较有帮助的例子如下):
/home/vsftpd/web/nginx-1.2.1/apt/mirror//debian/pool/main/s/systemtap/systemtap-doc_1.7-1+deb7u1_all.deb
/usr/share/doc/systemtap-doc
-----------------------------------------------------------
STATISTICS
--------------------
general/ #usage:>stap syscall.* -c 'sleep 0.2' #Count Specified Events
general/func_time_stats.stp #usage:>stap func_time_stats.stp '' -c "sleep 0.2" #Function Time Statistics
general/ #usage:>stap FILE '</usr/include/>' #Print the Size of a C Type
memory/ #usage:>stap -c "sleep 10" #Collect Slab Allocation Statistics
network/ #usage:>stap timeout=1 #Display Network Statistics for Individual TCP Sockets
FORMAT
--------------------
general/ansi_colors.stp #usage:>stap ansi_colors.stp #Color Table for ansi_set_color2() and ansi_set_color3()
general/ansi_colors2.stp #usage:>stap ansi_colors2.stp #Show Attribues in Table for ansi_set_color3()
FUNCTION
profiling/ #usage:>stap "*@mm/*.c" -c "sleep 0.2" #Count Times Functions Are Called
profiling/sched_switch.stp #usage:>stap sched_switch.stp -c "sleep 1" #Display the Task Switches Happening in the Scheduler
FUTEX
process/ #usage:>stap -c "sleep 0.2" #System-Wide Futex Contention
MEMORY
memory/hw_watch_addr.stp #usage:>stap --all-modules hw_watch_addr.stp 0x`grep "pid_max$" /proc/kallsyms -c "sleep 1" #Watch a Kernel Address Using Breakpoint Hardware
memory/hw_watch_sym.stp #usage:>stap --all-modules hw_watch_sym.stp pid_max -c "sleep 1" #Watch a Kernel Symbol Using Breakpoint Hardware
memory/kmalloc-top #usage:>./kmalloc-top -c "sleep 0.2" #Show Paths to Kernel Malloc Invocations
general/ #usage:>stap '("*@fs/proc*.c")' '("vfs_read")' -c "cat /proc/sys/vm/* || true" #Callgraph Tracing with Verbose Arguments
general/ #usage:>stap '("*@fs/proc*.c")' '("vfs_read")' -c "cat /proc/sys/vm/* || true" #Callgraph Tracing with Arguments
`
/usr/share/doc/ 有着很重要的文档描述.
,gdbserver,ddd
file:///usr/share/doc/gcc-4.7-doc/#Top #预处理器部分.
file:///usr/share/doc/gcc-4.7-doc/#Hash-Nodes
file:///usr/share/doc/gcc-4.7-doc/#Invoking-GCC
file:///usr/share/doc/gcc-4.7-doc/#Contributing
file:///usr/share/doc/gcc-4.7-locales #libstdc++/html 内容可以查看.
tar
--------------------------------------------------------------
>tar -cvf /paths files #创建一个 tar 归档文件
>tar -tvf #列出归档文件中的内容
>tar -rvf /paths files #追加文件到归档(tar)文件中,-r 选项用于向已有的 tar 文件中追加文件;在压缩过的 tar 文件中无法进行追加文件操作.
>tar -xvf #从 tar 文件中释放文件以及目录
>tar -xvf -C /path/ #释放 tar 文件到指定目录
>tar -xvf files -C /path/ #释放 tar 文件中的指定文件或目录
>tar -zcpvf /paths files #创建并压缩归档文件(. 或 .tgz) or tar -zcpvf /paths files
>tar -jcpvf 2 /paths files #创建并压缩归档文件(.2 或 .tbz2) or tar -jcpvf 2 /paths files
>tar -zcpvf /paths files --exclude=*.html #排除指定文件或类型后创建 tar 文件
>tar -tvf |more #列出 . 或 .tgz 文件中的内容
>tar -tvf 2|more #列出 .2 或 .tbz2 文件中的内容
>tar -zxpvf -C /path #解压 . 或 .tgz 文件
>tar -jxpvf 2 -C /path/ #解压 .2 或 .tbz2 文件 or tar xpvf 2 -C /path/
>tar -zcvf xx-$(date +%Y-%m-%d).tgz /path/ #使用 tar 命令进行定时备份,为以上命令创建一个 cron 任务即可.
>tar -zcpvf xx-$(date +%Y-%m-%d).tgz -T file -X file #使用 -T 及 -X 创建压缩归档文件,-T 选项来指定该输入文件,使用 -X 选项来指定包含要排除的文件列表;file 填写相应的目录或文件即可.
>tar -czf - |wc -c 427 #查看 .tar、.tgz 和 .tbz2 文件的大小 or tar -czf - |wc -c 37956009,tar -czf - 2|wc -c 30835317
>split -b 6M name #将分割成每份 6 MB 的小文件
>cat name* > #合并成为一个单独的 tar 文件
virtualbox 挂载虚拟磁盘:
>apt-get install libgsoap2 virtualbox virtualbox-dkms virtualbox-fuse virtualbox-qt virtualbox-guest-additions-iso
>vdfuse -t VMDK -f /path/ /mnt/point #挂载虚拟磁盘.
>mount /mnt/point/partition /mnt/pointx #挂载磁盘分区.
virtualbox 创建可共享的磁盘必须是固定大小的单个磁盘文件.
制作:mkinitramfs
-----------------------------------------------
initrd(boot loader initialized RAM disk):由"boot loader"初始化的内存盘.
在linux内核启动前,boot loader会将存储介质中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的"initrd"文件系统.
在"boot loader"配置了"initrd"的情况下,内核启动被分成了两个阶段:
第一阶段先执行initrd文件系统中的"init or linuxrc",完成加载驱动模块等任务.
第二阶段才会执行真正的根文件系统中的/sbin/init,Linux2.6既支持cpio-initrd,也支持image-initrd;但是cpio-initrd有着更大的优势.
linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的;initrd技术是解决该问题的关键技术.Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件;生成包含安装系统硬件驱动的initrd,是一种即可行又灵活的解决方案.
解压 initrd:(eg.>file initrd.`uname –r`.img)
--------------------------------------------
>mkdir /mnt/tmp
>cd /mnt/tmp
>cpio -idmv </tmp/initrd.`uname -r`.img
压缩initrd(mkinitramfs):
>cd /lib/modules/'uname -r'
>mkinitramfs /tmp/initrd.'uname -r'.img 'uname -r'
>cd /tmp
>mv initrd.'uname –r'.img initrd.'uname –r'. #(initrd使用gzip压缩;如果不改名字的话,后面无法解压缩.)
>gunzip initrd.'uname -r'.
cpio #假设当前目录位于准备好的initrd文件系统的根目录下.
--------------------------------------------
>find . |cpio -c -o > ../ #老的-c选项,用的是ascii码备份方式
>gzip ../
>cd /root/busybox-1.15.3/rootfs9260 #新的可用的方式
>find . |cpio -H newc -o > ../initrd_cpio.img
>cd ../
>cp initrd_cpio.img initrd_cpio_bk.img -f
>gzip initrd_cpio.img -f
>/home/u-boot-1.1.5/tools/mkimage -A arm -T ramdisk -C none -O Linux -a 0x600000 -e 0x600000 -d initrd_cpio. /home/
>ls /home/ -al #上面cpio命令的 -H 选项指定打包文件的具体格式,要生成initramfs,只能用newc 格式,如果使用其他格式,内核会打出这样的出错信息:Unpacking initramfs...<0> kernel panic - not syncing: no cpio magic 或者出现:Unpacking initramfs...<0>Kernel panic - not syncing: bad gzip magic numbers. 如果采用了-c旧的ascii码备份方式,则内核会按照ramdisk的方式加载根文件系统.如果你在编译内核时选上了RAM block device support (在device drivers -> block devices里),也可以启动成功;但这就失去了cpio-initrd的意义了.再就是注意cpio-initrd的初始进程是 “/init”,ramdisk方式初始进程是"/linuxrc";另外如果采用cramfs格式的根文件系统,也需在编译内核时选上RAM block device support.
gen_init_cpio
--------------------------------------------
获取"gen_init_cpio"工具;"gen_init_cpio"是编译内核时得到的,在内核源代码的 usr 目录下;我们可以通过以下步骤获取它,进入内核源代码执行:
>make menuconfig
>make usr/ #这样即编译好gen_init_cpio,gen_initramfs_list.sh在内核源代码的script目录下;将这两个文件copy到 /tmp目录下,/tmp/initrd为解压好的initrd目录,执行以下命令制作initrd.
>gen_initramfs_list.sh initrd/ > filelist
>gen_init_cpio filelist >
>gzip
>mv initrd-'uname –r'.img #只有用这个方式压缩的initrd,在Linux系统重启的时候才能以正确的文件格式boot起来,也可以用这种方式修改安装光盘的initrd文件然后进行系统安装.
在initrd中添加新的驱动以为例(gen_init_cpio):
>cp initrd-‘uname –r‘.img /tmp/initrd
>cd /tmp/initrd
>cpio –ivdum < initrd-‘uname –r’.img
>mv initrd-‘uname –r’.img ../
>cd /tmp/initrd
>vim init
------------------------
insmod /lib/
>cp lib/
>cd /tmp
>gen_initramfs_list.sh initrd/ > filelist
>gen_init_cpio filelist >
>gzip
>mv initrd-‘uname –r’.img #至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了.
mkinitramfs
--------------------------------------------
1.Add “alias scsi_hostadapter ahci” at /etc/
2.copy to “/lib/module/$(kernel-version)”/kernel/drivers/scsi”
3.mkinitramfs ‘uname -r’ #至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了.
释放cpio格式的initrd
--------------------------------------------
>mv
>gunzip
>cpio -i --make-directories <
eg.>gunzip -2.6.27-7- #释放centos6.2系统的,得到一个未压缩的-2.6.27-7-generic.
>cpio -iv < -2.6.27-7-generic
制作cpio格式的initrd(2012):
>cd /root/busybox-1.15.3/rootfs9260
>find . |cpio -H newc -o > ../initrd_cpio.img
制作cpio格式的initrd(2009制作的LFS的方式):
>dd if=/dev/zero of=/tmp/rootfs bs=1k count=35000
>losetup /dev/loop0 /tmp/rootfs
>2 –F –i 2000 /tmp/rootfs
>mkdir /tmp/loop
>mount –o loop /tmp/rootfs /tmp/loop #然后将刚才建立的基本系统拷贝到/tmp/loop.
>cp /lfs/* /tmp/loop –arfp
>find . |cpio –o –H newc | gzip –c > /tmp/
GIT
--------------------------------------------
>sudo groupadd git #准备.
>cd /home/
>sudo useradd git –d /home/git –g git
>passwd git
>cd /home/git #创建仓库.
>git config --global “huhuoyun”
>git config --global “huhuoyun@”
>sudo mkdir
>sudo chgrp git
>sudo chmod g+rws
>sudo git init –bare –shared
GIT客户端配置
--------------------------------------------
1.首先使用git-bash 运行 ssh-keygen -C ‘huhuoyun@’ –t rsa 将id_rsa.pub 上传到服务器 并加入到 auth* 文件中. #这个是在客户端执行.
2.检查/home/git目录权限
chmod 700 .ssh #服务端检查的过程.
cd .ssh
chmod 600 *
chmod 644 *.pub
ssh -v git@ip #检测方法
USAGE:
git@ip:/home/git/ #图形界面SourceTree,连接URL.
修改网卡的物理mac地址:
>vi /etc/network/interfaces
---------------------------------------------
hwaddress ether XX:XX:XX:XX:XX:XX
> networking restart #重启网卡
>/etc//networking restart #重启网卡
临时生效:
>ifconfig ethx down
>ifconfig ethx hw ether XX:XX:XX:XX:XX:XX
>ifconfig ethx up
创建加密磁盘分区:
>cryptsetup luksFormat /dev/sdxx #加密分区
>cryptsetup luksOpen /dev/sdxx #打开加密分区
>pvcreate /dev/sdxx #然后就可以像操作普通分区一样操作.
>cryptsetup luksClose /dev/sdxx #关闭加密分区
开机启动管理:
eg.>/usr/sbin/apachectl start #or /etc//apache2 start
[-n] [-f] <basename> remove #开机启动管理可以使用命令实现, 替代命令insserv.
[-n] <basename> defaults [NN | SS KK]
[-n] <basename> start|stop NN runlvl [runlvl] [...] .
[-n] <basename> disable|enable [S|2|3|4|5]
-n: not really
-f: force
> -f apache2 remove # -f 为强制删除,删除服务; or insserv -r apache2
> apache2 defaults #添加服务
> apache2 defaults 90 #指定服务的启动顺序
> apache2 defaults 20 80 #控制start与kill顺序.
> apache2 start 20 2 3 4 5 . stop 80 0 1 6 . #20 是start时的运行顺序级别,80 为kill时的级别;其中0~6 为运行级别.
dpkg管理软件包:
>dpkg -i #安装/升级软件.
>dpkg -iR PATH #从文件夹里安装软件,PATH目录下的所有以.deb为后缀的软件.
>dpkg -l #显示已安装软件列表.
>dpkg -l xxxx #查看指定的已安装软件.
>dpkg -L xxxx #查看软件安装目录.
>dpkg -c #查看deb包内容.
>dpkg -s xxxx #显示软件的详细信息.
>dpkg -S /PATH/PROG #查看文件属于哪个软件.
>dpkg -r xxxx #移除/删除软件
>dpkg -P xxxx #清除软件.
Linux 中查看时区:
>cat /etc/timezone
描硬盘坏道:
>badblocks -v /dev/sdxx >
>e2fsck -l /dev/sdxx #针对ext2/ext3/ext4文件系统.
>fsck -l /dev/sdxx #针对其它文件系统.
取别名:
alias rm='rm -i' #可以放在.bashrc,profile中.
恢复删除的文件:
>foremost -T -t all -i /dev/sdxx -o PATH #这里假设删除/boot/images/,"cd images && rm ";然后使用这个命令可以执行恢复操作.
使用扩展模式匹配操作符删除文件,| 分割包含一个或者多个文件名:
---------------------------------------------------------------
*(模式列表) – 匹配 0 个或者多个出现的指定模式
?(模式列表) – 匹配 0 个或者 1 个出现的指定模式
@(模式列表) – 匹配 1 个或者多个出现的指定模式
!(模式列表) – 匹配除了一个指定模式之外的任何内容
>shopt -s extglob #打开 extglob shell 选项.
>rm -v !("filename") #删除一个目录下除了 filename 之外的所有文件.
>rm -v !("filename1"|"filename2") #删除除了 filename1 和 filename2 之外的所有文件.
>rm -i !(*.zip) #交互模式删除除了 .zip 之外的所有文件
>rm -v !(*.zip|*.odt) #删除一个目录下除了所有的.zip 和 .odt 文件的所有文件,并且在删除的时候,显示正在删除的文件.
>shopt -u extglob #关闭 extglob shell 选项.
find 命令删除文件,采用管道配合xargs:
>find /directory/ -type f -not -name 'PATTERN' -delete
>find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}
>find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
>find . -type f -not -name '*.gz' -delete #删除当前目录下除了 .gz 之外的所有文件.
>find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
>find . -type f -not \( -name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete #删除掉当前目录下除了 .gz、 .odt 和 .jpg 之外的所有文件.
通过bash中的GLOBIGNORE变量删除文件:
>cd test && GLOBIGNORE=*.odt:*.iso:*.txt
>rm -v *
>unset GLOBIGNORE #关闭GLOBIGNORE变量.
当一个网络请求到达你的主机的时候,TCP封装器会使用/etc/ 和/etc/来决定客户端是否应该被允许使用一个提供的服务:
语法:
<services> : <clients> [: <option1> : <option2> : ...]
---------------------------------------------------------
services 指当前规则对应的服务,是一个逗号分割的列表.
clients 指被规则影响的主机名或者 IP 地址,逗号分割的;下面的通配符也可以接受:
ALL 表示所有事物,应用于clients和services.
LOCAL 表示匹配在正式域名中没有完全限定主机名(FQDN)的机器,例如 localhost.
KNOWN 表示主机名,主机地址,或者用户是已知的(即可以通过 DNS 或其它服务解析到).
UNKNOWN 和 KNOWN 相反.
PARANOID 如果进行反向 DNS 查找彼此返回了不同的地址,那么连接就会被断开(首先根据 IP 去解析主机名,然后根据主机名去获得 IP 地址).
最后,一个冒号分割的动作列表表示了当一个规则被触发的时候会采取什么操作.
不是所有的网络服务都支持TCP 过滤器;为了查看一个给定的服务是否支持他们,可以执行:
>ldd /path/to/binary | grep libwrap
eg.>ldd $(which sshd) | grep libwrap
>ldd $(which apache2) | grep libwrap
>ldd $(which vsftpd) | grep libwrap
使用TCP过滤器来限制服务的权限:
>vi /etc/ #使SSH和FTP服务只允许localhost和192.168.0.102并且拒绝所有其他用户,这些更改会立刻生效并且不需要重新启动.
----------------------
sshd,vsftpd : ALL
ALL : ALL
>vi /etc/ #使SSH和FTP服务只允许localhost和192.168.0.102并且拒绝所有其他用户,这些更改会立刻生效并且不需要重新启动.
----------------------
sshd,vsftpd : 192.168.0.102,LOCAL
vi /etc/ #为了允许所有服务对于主机名中含有 都可用.
----------------------
ALL : .
vi /etc/ #为了禁止 10.0.1.0/24 的机器访问 vsftpd 服务.
----------------------
vsftpd : 10.0.1.
注意:/etc/文件中允许一个服务接入的规则要优先于/etc/中的规则;另外还有,如果两个规则应用于同一个服务,只有第一个规则会被纳入考虑.
程序性能检测:
>gcc/g++ -pg -g -o xxxx
>./xxxx #会产生文件,使用gprof来分析时,需要将它和产生的应用程序关联起来.
>gprof xxxx -p #每个函数占用的执行时间.
>gprof xxxx -q #得到call graph,包含每个函数的调用关系,调用次数,执行时间等.
>gprof xxxx -A #得到一个带注释的"源代码清单",它会注释源代码,指出每个函数的执行次数.
注意:eclipse中需要安装linux-tools,然后在settings中设置gcc/g++编译选项(-pg),compile和linker都需要设置否则无法生成.
oprofile工具集: #首先需要insmod oprofile;然后编译安装oprofile-1.1.0.
ophelp # 列出所有支持的事件.
opcontrol #设置需要收集的事件.
operport #对结果进行统计输出.
opannaotate #产生带注释的源/汇编文件,源语言级的注释需要编译源文件时的支持.
opstack #产生调用图profile.
opgprof #产生如gprof相似的结果.
oparchive #将所有的原始数据文件收集打包,可以到另一台机器上进行分析.
opimport #将采样的数据库文件从另一种abi转化成本地格式.
/g++ -g -o xxxx
modprobe oprofile timer=1
opcontrol --no-vmlinux
opcontrol --separate=kernel
opcontrol --init
opcontrol --reset
opcontrol --start
./xxxx
opcontrol --dump
opcontrol --stop
opcontrol --shutdown
opcontrol --deinit
opannotate --source ./xxxx
opreport -l ./xxxx
opreport
######################系统功能######################
gnome vnc只能查看不能控制,如果使用控制很容易导致vnc崩溃.
gnome kexi数据库设计以及报表等等.
gnome nvidia 驱动已安装需要配置启用;AppArmor 启动失败.
gnome pdf排版制作工具scribus.
gnome pdf文档制作工具texworks.
gnome pdf编写工具latexial.
texstudio #在菜单中运行会出现找不到库的问题的解决办法是使用终端执行"texstudio",配置了环境变量;如果要在菜单中点击打开"texstudio"就使用“gnome-terminal --hide-menubar -x 'texstudio'”.
######################使用经验######################
网络设置:
vi /etc/udev//70- #如果有多网卡对这个文件进行编辑,虚拟机中不存在这个文件;只有在实体机并且支持网卡的情况下才有这个文件.
sudo ethtool -p ethx #闪烁网络接口LED灯,在多网口的情况下非常好用.
ltsp配置,只需要保持eth0即可:
IP-ADDR:192.168.10.88
NET-MASK:255.255.255.0
GATE-WAY:192.168.10.1
注意:如果使用gnome图形配置网络ip时,需要清空 vi /etc/network/interfaces 将已有的内容注释即可;如果配置上网服务,必须只一个网管其他网口的网关填写 0.0.0.0 即可(这里连接了ONU/路由器,但是其他网口连接着公司网络);但是如果使用交叉线的接口是可以配置网关的,单网口多ip和网关配置.eg.192.168.10.1(ltsp),172.172.1.1(与烽火实验室对应).
Hexchat设置:
新建网络列表(Network List)->Add:
->:Server->/6667 #不能访问域名的填写ip都是可以的.eg.172.172.1.66/6667
Nick name:hzy
User name:hzy
Autojoin channels->#develop
这两填写完毕后,开启客户端链接到后就会使用hzy用户;当再次开启客户端的时候提示同名,这样就不会显示单个用户显示多个用户名的情况了.
nmap
-------------------
nmap -sL 192.168.1.0/24 #在我的网络上找到活动主机
nmap -sn 192.168.1.0/24 #在我的网络中找到并 ping 所有活动主机
nmap 192.168.1.101,1-255 #找到主机上的开放端口
nmap -sV 192.168.1.101 #找到主机上监听端口的服务
nmap -sC 192.168.1.101 -p 21 #发现主机上上匿名 ftp 登录
nmap -A 192.168.1.101 #扫描易受攻击的主机
Nmap–扫描VSftpd漏洞
-------------------
locate .nse |grep ftp
nmap --script-help=
nmap --script= 192.168.1.101 -p 21 #Nmap – 扫描 VSftpd 漏洞
irc server:
/home/unrealircd/unrealircd start #编译,一路默认即可;然后在gnome-session-properties配置.
桥接:
-------------------
1.1 brctl
-------------------
>brctl show #显示所有桥接信息
>brctl show brxx #显示brxx信息
>brctl showmacs brxx #显示brxx所有的mac信息
>brctl stp brxx on/off #开/关stp
>brctl showstp brxx #显示brxx的stp信息
>brctl delbr brxx #删除brxx
>brctl addif brxx ethx #添加ethx到brxx
>brctl delif brxx ethx #从brxx中删除ethx
>brctl setageing brxx time #设置老化时间,即生存周期
>brctl addbr brxx #建立逻辑网段brxx
>brctl addif brxx ethx #让ethx称为brxx的一个端口
>brctl setbridgeprio brxx priority #设置brxx的优先级
>brctl setpathcost brxx port cost #设置路径的权值
>brctl setfd brxx time #设置brxx转发延时时间
>brctl sethello brxx time #设置hello时间
>brctl maxage brxx time #设置消息的最大生命周期
eg.
>ifconfig eth0 0.0.0.0
>ifconfig eth1 0.0.0.0
>brctl addbr brxx
>brctl addif brxx eth0
>brctl addif brxx eth1
>ifconfig brxx up
>ifconfig brxx 192.168.10.1 netmask 255.255.255.0 up
>brctl setfd brxx 0
>brctl addif brxx ethx
>dhclient ethx
or
>ifconfig eth0 down
>ifconfig eth1 down
>ifconfig eth0 0.0.0.0 up
>ifconfig eth1 0.0.0.0 up
>ifconfig brxx up
>ifconfig brxx
or
>ifconfig brxx up
>brctl addbr brxx #增加网桥
>ifconfig eth0 0.0.0.0 promisc
>ifconfig eth1 0.0.0.0 promisc
>brctl addif brxx eth0 eth1
>brctl show #查看已有网桥
>ifconfig brxx netmask 255.255.255.0 up #为brxx设置.
>brctl delif brxx eth0 eth1 #删除网桥brxx中的eth0和eth1
>brctl delbr brxx #删除网桥brxx
>brctl stp brxx off #关闭生成树
>echo "modprobe bridge">>/etc/ #配置网桥为开机激活.
or
>echo "bridge">>/etc/modules
>vi /etc/network/interfaces #配置eth0,eth1,brxx开机启动;eth0,eth1未设置IP信息,在启动brxx网卡时开启了eth0,eth1的混杂模式,并桥接了他们.
---------------------------
auto lo eth0 eth1 brxx
iface lo inet loopback
iface br0 inet static
address
netmask 255.255.255.0
gateway
pre-up ip link set eth0 promisc on
pre-up ip link set eth1 promisc on
pre-up echo "1">/proc/sys/net/ipv4/ip_forward
bridge_ports eth0 eth1
注意:网桥的每个物理网卡作为一个端口,运行于混杂模式;而且是链路层工作,所以就不需要设置ethx的IP地址了.然后给brxx的虚拟网卡配置IP,那样就能远程管理网桥.
1.2 tunctl
-------------------
>tunctl -b #添加虚拟网卡tap,这里tap可以桥接到网桥上,成为网桥的一个端口;注意执行这条命令会生成一个tap,后缀从0,1,2...递增.
>ip link set tapx up #激活创建的tap
>brctl show #显示网桥信息
>brctl addbr brxx #添加网桥brxx
>ip link set brxx up #激活网桥
>brctl addif brxx tapx #将tapx虚拟网卡添加到指定网桥上.
复制文件到多个文件夹
-------------------
>echo /home/dir1 /home/dir2 | xargs -n 1 cp -v /home/FILE #-n 1: 告诉 xargs 命令每个命令行最多使用一个参数,并发送到 cp 命令中.
启用shell脚本的调试模式
-------------------
1.1 不同类型脚本"首行":
#!/bin/sh [sh 脚本]
#!/bin/bash [bash 脚本]
#!/usr/bin/perl [perl 程序]
#!/bin/awk -f [awk 脚本]
1.2 脚本调试的方法
-v (verbose 的简称) - 告诉 Shell 读取脚本时显示所有行,激活详细模式
-n (noexec 或 no ecxecution 简称) - 指示 Shell 读取所有命令然而不执行它们,这个选项激活语法检查模式
-x (xtrace 或 execution trace 简称) - 告诉 Shell 在终端显示所有执行的命令和它们的参数。 这个选项是启用 Shell 跟踪模式
1.2.1 改变 Shell 脚本首行
#!/bin/sh 选项 #改变 Shell 脚本首行
1.2.2 调用 Shell 调试选项
>shell 选项 参数1 ... 参数N
eg./bin/bash 选项 参数1 ... 参数N
1.3 shell内置命令set
>set 选项 #set 命令打开调试模式,其中选项是之前提到的所有调试选项
>set -选项 #启用调试模式
>set +选项 #禁用调试模式
>set - #如果我们在 Shell 脚本不同部分启用了几个调试模式,我们可以一次禁用所有调试模式
修复“Unable to lock the administration directory (/var/lib/dpkg/)”
-------------------
1.杀掉所有 apt-get 或者 apt 进程
>ps -A |grep apt
or
>sudo kill -9 processnumber
or
>sudo kill -SIGKILL processnumber
2.删除锁定的文件
>sudo rm /var/lib/dpkg/lock
>sudo dpkg --configure -a
or
>sudo rm /var/lib/apt/lists/lock
>sudo rm /var/cache/apt/archives/lock
arp
-------------------
>arp -a #打印ARP表
>arp -s #添加一条记录到表中
>arp -a -d #删除ARP表中的所有记录
网络工具
-------------------
>ifconfig <interface> <address> [up] #启动接口
>ifconfig <interface> [down|delete] #停止接口
>tcpdump -i -vvv #抓取和分析包的工具
>netstat -w [seconds] -I [interface] #显示网络设置和统计信息
>accept #接受进来的连接
>read <byte #> #从套接字中读取n字节
>write
eg.>write xxx #向套接字写入"xxx"
>write #10 #向套接字写入10个字节
>vi /etc/hosts #域名到IP地址的映射
>vi /etc/networks #网络名称到IP地址的映射
>vi /etc/protocols #协议名称到协议编号的映射
>vi /etc/services #TCP/UDP服务名称到端口号的映射
监视网络接口数据
-------------------
>nstat
>ss -s
>netstat -i
>netstat -s
>ip -s link
>sar -n DEV 1
检测主机是否存活
-------------------
#!/bin/bash
PREFIX=192.168.1
NODE=1
while [ "$NODE" -lt "255" ]; do
echo -en "Pinging ${PREFIX}.${NODE}..."
ping -c1 -w1 -t5 ${PREFIX}.${NODE} >/dev/null 2>&1
if [ "$?" -eq "0" ]; then
echo "OK"
else
echo "Failed"
fi
let NODE=$NODE+1
done
emacs使用技巧
----------------
$>emacs -nw $File_name #终端上编辑或创建"File_name".
$>emacs -nw -Q ... #启动时不使用任何插件打开emacs.
约定:C表示按下CTRL键,M表示按下ALT键.
-x $command #表示同时按下ALT和x,输入"command"然后回车.
M-x help-with-tutorial #阅读官方教程.
M-x describe-variable #查看变量的文档(C-h v).
M-x describe-function #查看命令的文档(C-h f).
M-x describe-key #查看快捷键的文档(C-h k).
C-x C-c #退出.
C-x C-f $File_name #打开"File_name"文件.
C-x C-s #保存文件.
C-x C-w #另存为....
C-x C-z/C-z #挂起emacs,"$>fg"回到emacs界面.
C-x u #撤销.
C-g #退出一个正在运行中的命令.
批量更改多个文件内容
-------------------
>grep old_string -rl ./* | xargs sed -i "s/old_string/new_string/g"
or
>sed -i "s/old_string/new_string/g" grep old_string -rl ./*
eg.
>sed -i "s/11/xxx/g" grep 11 -rl ./*
or
>grep xxxx -rl ./* | xargs sed -i "s/x/aaa/g"
Linux命令技巧
-------------------
1. !!:重复执行上一条指令
2. !a:重复执行上一条以a为首的指令
3. !number:重复执行上一条在history表中记录号码为number的指令
4. !-number:重复执行前第number条指令
5. !$:表示获得上一条命令中的最后一项内容
6. 用Ctrl + r 组合键来进入历史搜索模式在history表中查询某条过往指令
在交互式shell脚本中创建对话框
-------------------
语法:
whiptail --title "<message box title>" --msgbox "<text to show>" <height> <width>
1.1 创建一个消息框:
#!/bin/bash
whiptail --title "Test Message Box" --msgbox "Create a message box with whiptail. Choose Ok to continue." 10 60 #一个消息框中显示一个确认按钮继续任意的文本消息
1.2 创建一个yes/no对话框:
whiptail --title "<dialog box title>" --yesno "<text to show>" <height> <width> #用户输入yes或no的对话框
eg.
-------------------
#!/bin/bash
if (whiptail --title "Test Yes/No Box" --yesno "Choose between Yes and No." 10 60) then
echo "You chose Yes. Exit status was $?."
else
echo "You chose No. Exit status was $?."
fi
#!/bin/bash ######“--yes-button” ,"--no-button"选项######
if (whiptail --title "Test Yes/No Box" --yes-button "Skittles" --no-button "M&M's" --yesno "Which do you like better?" 10 60) then
echo "You chose Skittles Exit status was $?."
else
echo "You chose M&M's. Exit status was $?."
fi
1.3 创建一个表单输入框:
whiptail --title "<input box title>" --inputbox "<text to show>" <height> <width> <default-text>
eg.
-------------------
#!/bin/bash #####如果你想用户输入任意的文本,您可以使用一个输入框######
PET=$(whiptail --title "Test Free-form Input Box" --inputbox "What is your pet's name?" 10 60 Wigglebutt 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your pet name is:" $PET
else
echo "You chose Cancel."
fi
1.4 创建一个密码框:
whiptail --title "<password box title>" --passwordbox "<text to show>" <height> <width>
eg.
-------------------
#!/bin/bash #####当用户需要输入敏感信息时密码框是有用的######
PASSWORD=$(whiptail --title "Test Password Box" --passwordbox "Enter your password and choose Ok to continue." 10 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your password is:" $PASSWORD
else
echo "You chose Cancel."
fi
1.5 创建一个菜单栏:
whiptail --title "<menu title>" --menu "<text to show>" <height> <width> <menu height> [ <tag> <item> ] . . .
eg.
#!/bin/bash #####当你想让用户选择一个任意数量的选择中,你可以使用菜单框######
OPTION=$(whiptail --title "Test Menu Dialog" --menu "Choose your option" 15 60 4 \
"1" "Grilled Spicy Sausage" \
"2" "Grilled Halloumi Cheese" \
"3" "Charcoaled Chicken Wings" \
"4" "Fried Aubergine" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your chosen option:" $OPTION
else
echo "You chose Cancel."
fi
1.6 创建radiolist对话框:
whiptail --title "<radiolist title>" --radiolist "<text to show>" <height> <width> <list height> [ <tag> <item> <status> ] . . .
eg.
#!/bin/bash
DISTROS=$(whiptail --title "Test Checklist Dialog" --radiolist \
"What is the Linux distro of your choice?" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"centos" "Stable CentOS" OFF \
"mint" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "The chosen distro is:" $DISTROS
else
echo "You chose Cancel."
fi
1.7 创建一个表对话框:
whiptail --title "<checklist title>" --checklist "<text to show>" <height> <width> <list height> [ <tag> <item> <status> ] . . .
eg.
#!/bin/bash #####当你想让用户选择一个列表中选择多个选项的清单对话框是有用的,radiolist对话框,只允许选择一个######
DISTROS=$(whiptail --title "Test Checklist Dialog" --checklist \
"Choose preferred Linux distros" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"centos" "Stable CentOS" ON \
"mint" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your favorite distros are:" $DISTROS
else
echo "You chose Cancel."
fi
1.8 创建一个进度条:
whiptail --gauge "<test to show>" <height> <width> <inital percent>
eg.
#!/bin/bash #####进度条是一个用户友好的对话框,whiptail从标准输入读取一个百分数(0~100),显示一个表内相应的计数######
{
for ((i = 0 ; i <= 100 ; i+=20)); do
sleep 1
echo $i
done
} | whiptail --gauge "Please wait while installing" 6 60 0
vim-recording的使用方法
-------------------
使用vim时按下q键,左下角出现“recording”这个标识时;可以录制一个宏(Macro),在开始记录后,会记录你所有的键盘输入;包括在insert模式下的输入、正常模式下使用的各种命令等
具体使用:
第一步:在正常模式下(非insert模式、非visual模式)按下q键盘
第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏
第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中
第四步:在非insert模式下输入q停止宏的录制
第五步:使用@ + 第二步中定义的缓冲器的名字即可
例如想把下面的文字
line1
line-2
line3-1
l4
变成如下的文字
(line1);
(line1);
(line-2);
(line3-1);
(L4);
观察可以发现他们的规律,在每行文字的开头添加“(”,结尾添加“);”就变成下面的信息了.
首先把光标移动line1上,输入qt,准备开始录制,缓冲器的名字为t,录制的动作为:shift + ^ 回到行首、按下i键进入insert模式、输入“(”、按下esc键回到正常模式、shift + $ 回到行尾部、按下i键进入insert模式、输入“);”按下esc键回到正常模式,按下q停止录制。然后把光标移动到下面一行的任意位置输入 @ + t 即可
recording还可以和查询结合起来使用,例如想把一个文件中含有特定字符串的行注释,可以通过这样的宏来实现.在正常模式下输入/search string + enter、shift + ^、i、#、esc、shift + $
让定制的宏自动执行多次的方法是先输入一个数字,然后在输入@ + 缓冲器的名字.例如 100@t,表示执行100次
打印文件行号
----------------
$>cat -n $FILE_Name |grep -i "填写搜索条件" | awk '{print $1}' #搜索指定内容的行号.
$>cat -n $FILE_Name |grep -i "填写搜索条件" | awk '{print $1}' > .`date +%Y%m%d-%H.%M.%S` #将行号保存到文件中.
$>awk 'NR==1{print $1}' $FILE_Name #获取第一行数据第一列.
$>awk 'END{print $1}' $FILE_Name #获取第最后一行数据第一列.
$>sed -n '开始行号,结束行号p' 被截取的文件 > 另存为的文件 #截取指定开始与结束的行号之间的内容并存储到新的文件中.
注意:"搜索条件"一般为某一天.
shell截取文件内容
----------------
$>vi
----------
#!/bin/bash
#variable
SL=0
EL=0
FILE_NAME=.`date +%Y%m%d-%H.%M.%S` #临时文件名.
#tools
cat -n $1 |grep -i "$2" | awk '{print $1}' > $FILE_NAME
SL=$(awk 'NR==1{print $1}' $FILE_NAME) #开始行号.
EL=$(awk 'END{print $1}' $FILE_NAME) #结束行号.
sed -n "${SL},${EL} p" $1 > $3 #拷贝指定行号之间的内容到另外一个文件中.
rm -rf $FILE_NAME #删除临时文件.
shell截取文件内容
----------------
$>vi
----------
#!/bin/bash
#variable
SL=0
EL=0
FILE_NAME=.`date +%Y%m%d-%H.%M.%S` #临时文件名.
#tools
cat -n $1 |grep -i "$2" | awk '{print $1}' > $FILE_NAME
SL=$(awk 'NR==1{print $1}' $FILE_NAME) #开始行号.
EL=$(awk 'END{print $1}' $FILE_NAME) #结束行号.
if [ [ $SL = "" ] && [ $EL = "" ] ] ; then
sed -n "${SL},${EL} p" $1 > $3 #拷贝指定行号之间的内容到另外一个文件中.
else
echo "没有找到..."
fi
rm -rf $FILE_NAME #删除临时文件.
了解CPU是否支持虚拟化技术(VT)
----------------
$>egrep --color -i "(svm|vmx)" /proc/cpuinfo
$>lscpu
注意:vmx(Intel-VT技术),svm(AMD-VT支持).
编辑"/boot/-*"文件
----------------
1.解压(initrd)
----------
$>cd /path #注意根据具体需求修改这里的"/path"路径.
$>cp /boot/-3.2.0-4-amd64 /path/
$>gunzip
$>mkdir initrd && mv initrd
$>cd initrd
$>cpio -ivdum <
$>rm -rf
2.打包(initrd)
----------
$>find . | cpio -o -H newc | gzip > /mnt/sdx1/boot/-3.2.0-4-amd64 #"sdx"根据具体的硬盘boot分区进行修改.
or
$>find . | cpio -o -H newc | gzip > /boot/-3.2.0-4-amd64
注意:"-H newc"是必须的,否则内核会认为是ramdisk,而不是initramfs.
LVM分区查看
----------------
$>vgscan --mknodes -v #查看卷组.
$>vgchange -a y DEBIAN #激活"DEBIAN"卷组.
将"DEBIAN"卷组修改"xx"
----------------
$>vi /etc/fstab #将"DEBIAN"更改为"xx"即可.
$>vi /boot/grub/ #将"DEBIAN"更改为"xx"即可.
$>cd /path #注意根据具体需求修改这里的"/path"路径.
$>cp /boot/-3.2.0-4-amd64 /path/
$>gunzip
$>mkdir initrd && mv initrd
$>cd initrd
$>cpio -ivdum < #解压完之后需要修改"initrd/conf//resume",将"DEBIAN"更改为"xx"即可.
$>rm -rf
$>find . | cpio -o -H newc | gzip > /boot/-3.2.0-4-amd64
$>vgs -v
$>vgrename DEBIAN xx #将"DEBIAN"卷组修改为"xx".
$>update-grub
注意:将"DEBIAN"卷组修改为"xx",重启后实测成功了.
vi教程
----------------
vimtutor #教程.
vi移动光标
----------
hjkl #使用h,j,k,l移动光标.
2w #向前移动两个单词.
3e #向前移动到第3个单词的末尾.
0 #移动到行首.
$ #当前行的末尾.
gg #文件第一行.
G #文件最后一行.
No.+ G #指定行,行号(No.).
CTRL+o #跳转回之前的位置.
CTRL+i #返回跳转之前的位置.
vi退出
----------
esc #进入正常模式.
:q! #不保存退出.
:wq #保存后退出.
vi删除
----------
x #删除当前字符.
dw #删除至当前单词末尾.
de #删除至当前行尾.
d$ #删除整行.
2dd #删除两行.
vi修改
----------
i #插入文本.
A #当前行末尾添加.
r #替换当前字符.
o #打开新的一行并进入插入模式.
vi撤销
----------
u #撤销.
CTRL+r #取消撤销.
vi复制粘贴剪切
----------
v #进入可视模式.
y #复制.
p #粘贴.
yy #复制当前行.
dd #剪切当前行.
vi状态
----------
CTRL+g #显示状态.
vi查找
----------
/ #正向查找(n:继续查找,N:相反方向继续查找).
? #逆向查找.
% #查找匹对{,[,(
:set ic #忽略大小写.
:set noic #取消忽略大小写.
:set hls #匹配项高亮显示.
:set is #显示部分匹配.
vi替换
----------
:s/old/new #替换该行第一个匹配串.
:s/old/new/g #替换全行的匹配串.
:%s/old/new/g #替换整个文件的匹配串.
vi执行外部命令
----------
:!shell #执行外部命令.
vi搜索并高亮多个关键字
----------
/word1\|word2\|word3\|...
注意:这里在高亮函数的变量/参数时非常有用,功能类似与"SI"的高亮(SHIFT+F8).
vi搜索与替换正则表达式-量词
----------
* #0个或多个(匹配优先).
\+ #1个或多个(匹配优先).
\? #0个或1个(匹配优先),\?不能在?命令(逆向查找)中使用.
\{n,m} #n个到m个(匹配优先).
\{n,} #最少n个(匹配优先).
\{,m} #最多m个(匹配优先).
\{n} #恰好n个.
\{-n,m} #n个到m个(忽略优先).
\{-} #0个或多个(忽略优先).
\{-1,} #1个或多个(忽略优先).
\{-,1} #0个或1个(忽略优先).
vi搜索与替换正则表达式-环视和固化分组
----------
\@= #顺序环视.
\@! #顺序是否环视.
\@<= #逆序环视.
\@<! #逆序是否环视.
\@> #固化分组.
\%(atom\) #非捕获型括号.
eg./\(foo\)\@<=
vi搜索与替换正则表达式-元字符
----------
. #匹配任意一个字符.
[a-z/0-9] #匹配方括号中任意一个字符(eg.[abcd]),可以使用"-"表示字符范围.
[^a-z/0-9] #方括号内开头使用"^"符号,表示匹配除方括号中字符之外的任意字符.
\d #匹配阿拉伯数字,等同于[0-9].
\D #匹配阿拉伯数字之外的任意字符,等同于[^0-9].
\x #匹配十六进制数字,等同于[0-9A-Fa-f].
\X #匹配十六进制数字,等同于[^0-9A-Fa-f].
\w #匹配单词字母,等同于[0-9A-Aa-z_].
\W #匹配单词字母之外的任意字符,等同于[^0-9A-Aa-z_].
\t #匹配<tab>字符.
\s #匹配空白字符,等同于[\t].
\S #匹配非空白字符,等同于[\t].
\a #所有的字母字符,等同于[a-zA-Z].
\l #小写字母[a-z].
\L #非小写字母[^a-z].
\u #大写字母[A-Z].
\U #非大写字母[^A-Z].
vi搜索与替换正则表达式-表示数量的元字符
----------
* #匹配0~任意个字符.
\+ #匹配1~任意个字符.
\? #匹配0~1个字符.
\{n,m} #匹配n~m个字符
\{n} #匹配n个字符.
\{n,} #匹配n~任意个字符.
\{,m} #匹配0~m个字符.
\_. #匹配包含换行在内的所有字符(全选).
\{-} #前一个字符可出现0/多次;但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好.
\= #匹配一个可有可无的项.
\_s #匹配空格或断行.
\_[] #
\* #匹配*字符.
\. #匹配.字符.
\/ #匹配/字符.
\\ #匹配\字符.
\[ #匹配[字符.
eg.$>/\_s #匹配空格或断行.
vi搜索与替换正则表达式-位置符号
----------
$ #匹配行尾.
^ #匹配行首.
\< #匹配单词词首.
\> #匹配单词此尾.
eg.
$>:g/^\s*$/d #删除只有空白的行.
$>:%s/\<id\>/\=line(".") #将各行的id字符串替换为行号.
shell获取脚本绝对路径
-------------------
使用pwd 命令获取的是执行该命令的当前工作目录,当在其他目录调用一个脚本时会发现脚本中使用的pwd命令获取的结果不是脚本所在的绝对.
>base-dir=$(cd "$(dirname "$0")";pwd)
or
#!/bin/sh
this_dir=`pwd`
echo "$this_dir ,this is pwd"
echo "$0 ,this is \$0"
dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
this_dir=`dirname $0`
else
dirname $0|grep "^\." >/dev/null
retval=$?
if [ $retval -eq 0 ];then
this_dir=`dirname $0|sed "s#^.#$this_dir#"`
else
this_dir=`dirname $0|sed "s#^#$this_dir/#"`
fi
fi
echo $this_dir
shell匹配IP和shell正则匹配捕获引用
-------------------
在服务器上加了一个服务检测机制,用到正则来匹配IP和捕获分组;shell和其他语言一样也可以使用正则分组捕获,不过不能使用 $1或\1这样的形式来捕获分组,可以通过数组${BASH_REMATCH}来获得,如${BASH_REMATCH[1]},${BASH_REMATCH[N]}
eg.
#!/bin/bash
ip="121.0.2.2"
if [[ $ip =~ ^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ ]];then
echo "match"
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
echo ${BASH_REMATCH[3]}
echo ${BASH_REMATCH[4]}
else
echo "Not match"
fi
sed在两行匹配之间插入一行
-------------------
在两个匹配行之间插入一行,例如文件格式为
hello
welcome to shanghai
在这两个之间插入一行liming
eg. ####首先是匹配hello,然后n,读入下一行,在下一行匹配welcome to shanghai ,之后用liming\n,变相的插入一行,&表示继续输出之前的匹配文字n表示对下一行执行匹配,而N只是表示读取下一行到匹配区域,后边的命令,是对每一行进行匹配####
>sed ‘/hello/{n;s/welcome to shanghai/liming\n&/g}
>sed ‘/hello/{N;s/welcome to shanghai/liming\n&/g}
Linux释放内存
-------------------
Linux下频繁存取文件时物理内存可能会被耗尽;当程序结束后,内存不会释放而是一直作为cache.
Linux缓存有dentry,buffer cache,page cache。Dentry用来加速文件路径名到inode的转换;buffer cache加速磁盘块的读写;page cache加速inode的读写。缩短IO调用时间.
1.释放page cahce
>echo 1 > /proc/sys/vm/drop_cache
2.释放dentry和inode
>echo 2 > /proc/sys/vm/drop_cache
3.释放page cache,dentry,inode
>echo 3 > /proc/sys/vm/drop_cache
注意:在释放内存前,最好先允许sync,强制将系统正在处理的page cahce,dentry,inode写入磁盘.
Linux中硬盘转速查看
-------------------
>sg_vpd /dev/sg1 --page=0x89
>sg_vpd /dev/sda --page=0x89
>sg_vpd /dev/sg1 --page=0xb1
>sg_vpd /dev/sda --page=0xb1
>sg_vpd /dev/sg1 -e
>sg_vpd /dev/sda -e
ss命令使用详解
-------------------
>time netstat -ant | grep EST | wc -l #统计服务器并发连接数
>time ss -o state established | wc -l #统计服务器并发连接数
>ss -s #列出当前已经连接,关闭,等待的tcp连接
>ss -l #列出当前监听端口
>ss -pl #ss列出每个进程名及其监听的端口
>ss -t -a #ss列所有的tcp sockets
>ss -u -a #ss列出所有udp sockets
>ss -o state established '( dport = :http or sport = :http )' #ss列出所有http连接中的连接
>ss -o state established '( dport = :smtp or sport = :smtp )' #显示所有已建立的SMTP连接
>ss -o state established '( dport = :http or sport = :http )' #显示所有已建立的HTTP连接
>ss -x src /tmp/.X11-unix/* #ss列出本地哪个进程连接到X server,找出所有连接X服务器的进程
state:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all #All of the above states
connected #All the states except for listen and closed
synchronized #All the connected states except for syn-sent
bucket #Show states, which are maintained as minisockets, . time-wait and syn-recv.
big #Opposite to bucket state.
ss src ADDRESS_PATTERN #src:表示来源,ADDRESS_PATTERN:表示地址规则
eg.>ss src 120.33.31.1 # 列出来之20.33.31.1的连接
>ss src 120.33.31.1:http #列出来至120.33.31.1,80端口的连接
>ss src 120.33.31.1:80 #列出来至120.33.31.1,80端口的连接
ss dport OP PORT #OP:是运算符 PORT:表示端口 dport:表示过滤目标端口、相反的有sport
op:
<= or le : 小于等于 >= or ge : 大于等于
== or eq : 等于
!= or ne : 不等于端口
< or lt : 小于这个端口 > or gt : 大于端口
eg.>ss sport = :http
or
>ss dport = :80
>ss dport \> :1024
>ss sport \< :32000
>ss sport eq :22
>ss dport != :22
>ss state connected sport = :http
>ss \( sport = :http or sport = :https \)
>ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
查看stable,testing 等信息.
-------------------
>apt-cache policy apache2
>man 5 apt_preferences
debian终端配置dsl上网的方法
-------------------
$>pppoeconf #会要求输入帐号和密码,推荐使用这个.
$>pon dsl-provider #连接
$>poff dsl-provider #断开
or
$>pppoe-setup #设置
$>pppoe-start #连接
$>pppoe-stop #断开
$>netstat -nr #查看路由表信息,诊断.
config: #相关配置文件
/etc/ppp/peers/dsl-provider
/etc/ppp/
显卡配置
-------------------
$>nvidia-xconfig
$>nvidia-settings
net-tools
-------------------
>netstat -r #打印路由表
>traceroute #跟踪IP包的路由
>netstat -rnF #显示IPv4的路由表
>sysctl -a #显示所有系统配置项,eg.>sysctl 4.conf.all.forwarding=1
>route add/delete [-net/-host] <> <gatewary> #eg.>route add 192.168.10.0/24 192.168.10.1
>ftp <> <port> #匿名用户/密码:anonymous/guest
>rlogin -l <> #类似telnet的虚拟终端
>ping #发送ICMP echo消息到主机,CTRL+c终止
>telnet <port>#telnet 默认端口:23,CTRL+]终止.
系统测试
-------------------
$>glxinfo | grep rendering #yes表示显卡已经支持并打开了3D加速.
$>glxgears #测试显卡对2D和3D的支持程度,齿轮越快性能越好.
$>xlsfonts #显示所有x-server字体,通过它检查是否成功.
系统美化
-------------------
$>cairo-dock -c #Cairo-Dock (no OpenGL)
$>cairo-dock #GLX-Dock (Cairo-Dock with OpenGL)
$>gconf-editor
$>conky
$>conky --pause 10 #开机自动启动建议.
$>vi /usr/share/gnome-shell/js/ui/
$>vi /usr/share/gnome-shell/js/ui/
$>vi /usr/share/gnome-shell/theme/
pkg-config
-------------------
$>echo $PKG_CONFIG_PATH
$>pkg-config --list-all #查看当前所有的pkg-config支持库.
$>pkg-config --cflags libpng #得到libpng包的头文件.
$>pkg-config --libs libpng #得到libpng包的库文件.
$>gcc `pkg-config --cflags --libs libpng` *.c
pkg-config路径
-------------------
$>export LD_LIBRARY_PATH=/x:$LD_LIBRARY_PATH #设置环境变量.
$>vi /etc/ #.so配置文件.
$>export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH #.pc存放路径.
chroot-amd64
-------------------
$>cd ~ && debootstrap --arch=amd64 --include=vim,openssh-server,telnet --foreign wheezy fs_wheezy_x86_64 file:var/spool/apt-mirror/mirror//debian #不能安装到移动设备,或挂载点.
$>cp /usr/bin/qemu-arm-static /home/hy/fs_wheezy_x86_64/usr/bin
$>DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGAGE=C LANG=C chroot /home/hy/fs_wheezy_x86_64/ debootstrap/debootstrap --second-stage
$>cp -ra /home/hy/fs_wheezy_x86_64 /mnt/rootfs
grub
-------------------
$>dd if=/dev/zero of=/dev/sdb bs=446 count=1 #擦除/dev/sdb上的grub.
$>grub-install --recheck --root-directory=/mnt/rootfs /dev/$1 #重建grub到sda的mbr,/dev/sda的uuid会被替换为挂载在/mnt/rootfs磁盘的uuid.
linux带有调试信息的内核
-------------------
$>make menuconfig #以下config为必须使能的选项.
Kernel hacking->Compile the kernel with debug info #config
Kernel hacking->Compile the kernel with frame pointers #config
Kernel hacking->[*] KGDB: kernel debugger->[*] KGDB: use kgdb over the serial console (NEW) #config
$>vi .config
-------------------
CONFIG_DEBUG_RODATA = n #该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的设置软断点功能失效;所以推荐将该选项关闭.
CONFIG_KGDB_LOW_LEVEL_TRAP = y #使能该选项可以kgdb不依赖notifier_call_chain()机制来获取断点异常,这样就可以对notifier_call_chain()机制实现相关的函数进行单步调试.
CONFIG_DEBUG_INFO = y #该选项可以使得编译的内核包含一些调试信息,使得调试更容易.
CONFIG_FRAME_POINTER = y #该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息.
CONFIG_MAGIC_SYSRQ = y #激活"魔术 SysRq"键,该选项对kgdboc调试非常有用;kgdb向其注册了‘g’魔术键来激活kgdb.(如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
$>make
$>make INSTALL_PATH=/mnt/rootfs install #安装内核到指定目录,如果不想安装到其他地方不指定INSTALL_PATH即可.
$>make INSTALL_MOD_PATH=/mnt/rootfs modules_install #安装内核模块到指定目录.
busybox
-------------------
$>make sizes #显示所启用的应用程序的文本/数据大小
$>make clean #清除源代码树
$>make distclean #彻底清除源代码树
$>make menuconfig #curses配置工具
$>make config #基于文本的配置工具
$>make help #显示make选项的完整列表
usage:
$>make help
$>make defconfig
$>make sizes
$>make CONFIG_PREFIX=/mnt/rootfs install
解压/创建
-------------------
$>gzip -d #解压
$>cpio -idmv < initrd
$>find . | cpio -o -c > #创建
$>gzip
$>mv
注意:重新编译内核后,可能加入了自定义的模块;就有可能需要修改init文件,而init文件就在initrd中.
批量解压
-------------------
$>for tar in *.; do tar xvf $tar; done
$>for tar in *.2; do tar xvf $tar; done
$>ls *. | xargs -n1 tar xzvf
$>find -maxdepth 1 -name "*.bz2"|xargs -i tar xvjf {}
$>for i in $(ls *.);do tar xvf $i;done
分辨率
-------------------
$>xrandr -q #显示分辨率列表
$>xrandr -s 1024x768 -r 75
virtualbox使用kgdb调试内核
-------------------
1.编译内核时开启kgdb,然后在添加“kgdb=ttyS0,115200 kgdboc=ttyS0,115200 kgdbwait”
2.设置virtualbox->settings->Serial Ports->Port1
Enable Serial Port
Port Number:User-defined
PortMode:HostPipe->Create Pipe:/tmp/vbox
3.$>socat -d -d /tmp/vbox pty: #观察终端输出,eg./dev/pts/$1
4.将编译好的vmlinux拷贝到主机中,执行gdb调试.
$>gdb vmlinux
gdb>set remotebaud 115200
gdb>target remote /dev/pts/$1
gdb>...
在USB磁盘上制作Linux
-------------------
$>dd if=/dev/zero of=/dev/sdf bs=512 count=1 #清除mbr引导字节
$>locate #eg./usr/lib/syslinux/
$>cat /usr/lib/syslinux/ > /dev/sdx #使用syslinux中的加载到usb磁盘上.
$>2 /dev/sdx1 #/dev/sdf1插入的32G U盘.
$>mkdir -p /mnt/usbdisk/
$>mount /dev/sdx1 /mnt/usbdisk/
$>grub-install --recheck --no-floppy --root-directory=/mnt/usbdisk /dev/sdx #安装GRUB boot loader到USB磁盘.
重启机器使用USB磁盘引导
-------------------
grub>set root=(hd0,msdos1) #以下配置经过验证可以加载内核.
grub>linux /boot/vmlinuz root=/dev/sda1 ro #
grub>initrd /boot/
grub>boot
开机菜单需要环境的请参考./locale/share/applications/texstudio.*.
~/.kde/ #包含了kde应用的所有配置.,kate,...
$>fc-cache -fv #建立字体缓存,可以解决乱码问题.
$>locale -a #显示语言列表
$>man ssh_config #ssh_config帮助
$>convert -depth 8 -colors 14 -resize 640x480 #制作xpm图片
$>gzip #压缩
IPC解决方案
-------------------
$>ipcs -q -l #列出当前系统消息队列规格配置.
$>ipcs -q #列出当前系统消息队列的简单使用情况.
$>ipcs -q -u #列出当前系统消息队列的详细使用情况.
$>ipcrm #可以手工删除某个消息队列.
$>ipcs -m #显示共享内存信息.
$>ipcs -m | awk '$2 ~ /[0-9]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done #释放所有已分配的共享内存.
Tools
-------------------
$>iostat -x 2 #查看硬盘当前读写情况.
$>du -hs /dirs #查看目录占用空间.
$>arp -a | awk '{print $4}' #查看网卡物理地址.
$>lsof -i :80 #查看当前监听80端口的程序.
$>lsof -i :22 #显示22端口现在运行的程序.
$>lsof -c sshd #显示sshd进程现在打开的文件.
$>nmblookup -A ipaddr #根据IP查电脑名.
$>grep -l -r str /dirs #显示包含字符串的文件名.
$>grep -L -r str /dirs #显示不包含字符串的文件名.
$>xset dpms force off #使用命令关闭显示器.
$>synclient touchpadoff=1 #关闭笔记本的触摸板.
$>watch -d free #连续监视内存使用情况.
$>nc -zv localhost 1-65535 #查看当前系统所有的监听端口.
$>cat filename | tr -d \"^M\" > newfile #去掉文件中的^M.
$>ifconfig ethx hw ether mac #修改网卡MAC地址的方法.
$>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' #查看网络连接状态.
$>ps -eo fname,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'|sort -k2 -nr #统计程序的内存耗用.
$>ccache gcc $/.cc/.cpp #高速c/c++编译缓存工具,反复编译内核非常有用.
$>cloc /path #代码统计,能够统计代码的空行数,注释行.
$>axel -n $num ... #多线程下载工具.
mosh用法
-------------------
$>mosh-server new -s -p 60000 #启动mosh服务端.
$>mosh $user@$host #mosh客户端登录.
注意:mosh是基于udp的终端连接,可以替代ssh;连接更稳定,即使ip变了也能自动重连.
将镜像还原到SD卡
----------------
$>ddrescue -D --force $IMG /dev/$SDX #树莓派系统制作方法.
Linux制作USB系统启动盘
----------------
$> /dev/sdx -I #将U盘(/dev/sdx)格式为vfat/fat32格式.
$>dd if=/path/ of=/dev/sdx #写入系统iso文件.
$>dd if=/dev/zero of=/dev/sdx #还原U盘空间.
注意:此方法适用于制作Linux服务器安装iso文件().
使用grub4dos启动winpe系统
----------------
$>dd if=/dev/zero of=/dev/sdx
$> /dev/sdx -I #将U盘(/dev/sdx)格式为vfat/fat32格式.
$>tar -xvf /home/vsftpd/grub4
$>cd grub4dos && make #make执行完后解压"grub4dos-0.4.6a-2018-04-05.7z".
$>cd /path/grub4dos-0.4.6a && sudo ./ --floppy /dev/sdxx
$>cp ./sample/ /dev/sdxx
$>cp grldr /dev/sdxx
$>vi /dev/sdxx/ #WINPE系统写法.
--------
title $title #"$title"根据需要填写相应的名称即可.
find --set-root /$ #"$"填写实际的iso磁盘名称即可.
map --mem /$ (0xff)
map --hook
chainloader (0xff)
注意:经过测试以上步骤验证成功.
$>mount /path/ /mnt/windows
$>mount /dev/sdc1 /mnt/sdc1
$>cp /mnt/windows/* /mnt/sdc1
$>vi /dev/sdxx/ #安装WINDOWS原版镜像.
--------
default 0
timeout 60
find --set-root /grldr
title $title #"$title"根据需要填写相应的名称即可.
chainloader /bootmgr
title reboot
reboot
title shutdown
halt
注意:经过测试以上步骤验证成功.
查询命令所属软件包
----------------
$>which $exec/$cmd #查找可执行文件/命令的路径.
$>dpkg-query -S ${which $exec/$cmd} #根据"which $exec/$cmd"执行的结果进行查找.
eg.
$>which ls
$>dpkg-query -S /bin/ls
coreutils: /bin/ls #"dpkg-query -S /bin/ls"输出结果,即ls属于coreutils软件包.
Linux在interface中配置dns
----------------
$>vi /etc/network/interfaces
--------
dns-nameservers #-nameservers 8.8.8.8
rdesktop远程rdp/windows桌面
----------------
$>rdesktop -f -r clipboard:PRIMARYCLIPBOARD -r sound:local -r disk:HOME=/home -r disk:TMP=/tmp -z -D -k en-us -g $WIDTHx$HEIGHT -x lan -u $USER -p $PWD $SRV_IP & #切换任务需要使用快捷键.
eg.
$>rdesktop -f -r clipboard:PRIMARYCLIPBOARD -r sound:local -r disk:HOME=/home -r disk:TMP=/tmp -z -D -k en-us -g 1280x780 -x lan -u $USER -p $PWD $SRV_IP & #1280*800分辨率.
注意:rdesktop连接"windows 10"请使用"rdesktop-1.8."或以上版本;实测成功了;存放路径"/home/vsftpd/rdesktop/*".
rdesktop
----------------
$>rdesktop -N -5 -K -D -r clipboard:PRIMARYCLIPBOARD -r sound:local -r disk:HOME=/home -r disk:TMP=/tmp -g 800x600 -x lan -u administrator -p 123456 192.168.10.20 &
Msys系统
----------------
$>pacman -Syu #更新软件包.
$>pacman -Su #更新.
$>pacman -S xx #安装软件包"xx".
$>pacman -S gcc gdb gawk make cmake automake autoconf autogen bash bash-completion bash-devel binutils colormake-git cscope ctags curl cvs expat findutils help2man ncurses ncurses-devel pv tar upx tftp-hpa cdecl ttyrec grep sed wget dos2unix git subversion tree rsync asciidoc
开发过程中本机系统使用习惯
----------------
vi ~/.bashrc
--------
#在这里添加注释
export prog_name_No.=/path/ #项目名称"prog_name_No.",根据具体情况填写.
export PATH=${prog_name_No.}/bin:${prog_name_No.}/sbin:$PATH
注意:然后在"/path/bin/","/path/sbin/"添加相关的命令脚本;例如(eg.)ssh,telnet,mount,rdesktop,svn,ssh,umount,make等脚本{这个有点类似与SecureCRT功能,但是比它强大};打开UltraEdit创建工程来维护这些脚本.
开发技巧
----------------
1.开发过程中对IDE工具要求并不高,一般选择"SourceInsight"即可.
2.使用"rdesktop"远程登录到windows服务器并在服务器安装好"SourceInsight".
3.编译一般选择Makefile文件,调试选择gdb工具.
4.根据不同的环境来创建"/etc/network/interfaces"文件,可以参考"eg.$>ln -sf xxxx interfaces".
测试网络吞吐量
-------------------
$>iperf -s #启动服务端
$>iperf -c 127.0.0.1 -f M #使用客户端进行测试.
$>iperf -c 127.0.0.1 -t 20 -i 5 -f M #指定20秒内每隔5秒输出一次结果
$>iperf -c 127.0.0.1 -u -b 1[G/M/K] -f M #测试UDP丢包和延迟
Linux内核的流量控制
-------------------
$>modprobe sch_netem
$>tc qdisc show #显示
$>tc qdisc list #显示
$>tc -s qdisc ls dev eth0 #列出当前规则
$>tc -s -d class show dev eth0
$>tc qdisc add dev eth0 root netem #加入
$>tc qdisc change dev eth0 root netem #修改存在的 qdisc ,记的,加入同一条后只能用 change 来修改
$>tc qdisc del dev eth0 root #删除
$>tc qdisc add dev eth0 root netem delay 3000ms #延时模拟,3s
$>tc qdisc change dev eth0 root netem loss 50% #丢包模拟
$>iptraf
$>fping -a 192.168.1.1/24 -g 2 > /dev/null #检查局域网中已经存活的主机.
$>sar -n DEV 1 100 #查看即时网速
开机需启动的服务
-------------------
$>/home/unrealircd/unrealircd start
$>/usr/bin/rsync --daemon
$>/home/vsftpd/nginx/sbin/nginx #端口已更改为:8088
$>apt-get install qemu-kvm qemu-kvm-dbg && dpkg-reconfigure qemu-kvm #因为虚拟机不支持qemu-kvm 所以将/etc//qemu-kvm 中的log_fail_msg注释了.
光盘刻录
-------------------
$>dmesg |egrep -i --color 'dvd|cd/rw|writer'
$>growisofs -dvd-compat -speed=4 -Z /dev/yy=./
通过iptables服务限制SSH访问
-------------------
$>iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$>iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
$>service iptables save #创建的规则持久地保存
备份磁盘分区
-------------------
$>dcfldd if=/dev/sdc of=/tmp/ #备份分区
$>dcfldd of=/dev/sdc if=/tmp/ #恢复分区
$>dcfldd if= bs=1M status=progress | tee >(dcfldd of=/dev/sdc) | dcfldd of=/dev/sdd #将写入多个设备(sdc,sdd)
$>diff /dev/sdc /tmp/ #验证数据
$>dcfldd if=/dev/sdc | split -b 4000MB - /tmp/ #分割镜像
$>cat /tmp/* | dcfldd of=/dev/sdc #文件恢复到设备
屏幕快照
-------------------
$>gnome-screenshot -w #捕获当前活动窗口
$>gnome-screenshot -wb #捕获当前活动窗口,窗口边框
$>gnome-screenshot -wB #捕获当前活动窗口,移除窗口边框;推荐使用.
$>gnome-screenshot --border-effect=[EFFECT] #添加效果到窗口边框;EFFECT:[shadow|bordor|vintage],shadow-在窗口添加阴影,bordor-在屏幕截图周围添加矩形区域,vintage-使截图略微淡化,着色并在其周围添加矩形区域
$>gnome-screenshot --border-effect=shadow
$>gnome-screenshot --border-effect=bordor
$>gnome-screenshot --border-effect=vintage
$>gnome-screenshot -a #选定区域截图
$>gnome-screenshot -p #在截图中包含鼠标指针
$>gnome-screenshot --delay=[SECONDS] #延时截图
$>gnome-screenshot --delay=5
$>gnome-screenshot -i #交互模式运行
$>gnome-screenshot -c #复制到剪切板
$>(gnome-screenshot -a &);sleep 0.1 && xdotool mousemove X Y mousedown 1 mousemove X Y mouseup 1 #自动化屏幕截图
$>xrandr --query
INITTAB启动级别
-------------------
0 #停机
1 #单用户形式,只root进行维护
2 #多用户,不能使用net file system
3 #完全多用户
5 #图形化
4 #安全模式
6 #重启
GDM
-------------------
$>/etc//gdm3 restart #重启图形桌面.
lightdm屏幕键盘
-------------------
$>apt-get install florence lightdm-gtk-greeter
$>vi /etc/lightdm/ #GDM不生效.
-------------
[greeter]
keyboard=florence --no-gnome --focus &
开机进入字符界面
-------------------
$> -f gdm3 remove #删除文件夹下所有gdm3相关脚本;方案1.
$>vi /boot/grub/ #方案2.
-------------
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos1)'
search --no-floppy --fs-uuid --set=root f3e62c22-ade7-4069-bc68-f98ddc3f9d6c
echo'Loading Linux 3.2.0-4-amd64 ...'
Linux/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/DEBIAN-root ro quiet splash text
echo'Loading initial ramdisk ...'
/-3.2.0-4-amd64
}
$>update-grub
屏幕分割
-------------------
$>vi #执行脚本,点击选择2个窗口,就可以将2个窗口左右平铺整个屏幕;在使用的时候要很小心呃.
-------------
#!/bin/sh
set -- $(xwininfo -root| awk -F '[ : ]+' '/ (Width|Height):/ { print $3 }')
width=$1
height=$2
win1=$(xwininfo| awk '/^xwininfo: W/ { print $4 }')
win2=$(xwininfo| awk '/^xwininfo: W/ { print $4 }')
wmctrl -i -r $win1 -e 0,0,0,$((width/2)),$height
wmctrl -i -r $win2 -e 0,$((width/2)),0,$((width/2)),$height
png,jpg批量互转
-------------------
$>ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"' #从 PNG 转换到 JPG,convert格式:$>convert 输入选项 输入文件 输出选项 输出文件.
$>ls -1 *.jpg | xargs -n 1 bash -c 'convert "$0" "${0%.jpg}.png"' #从 JPG 转换到 PNG
注意:
-1 #告诉 ls 每行列出一个图像名称的选项标识.
-n #指定最多参数个数,例子中为"1".
-c #指示bash运行给定的命令.
${0%.png}.jpg #设置新转换的图像文件的名字,%符号用来删除源文件的扩展名.
$>parallel convert '{}' '{.}.jpg' ::: *.png #从 PNG 转换到 JPG
$>parallel convert '{}' '{.}.png' ::: *.jpg #从 JPG 转换到 PNG
注意:
{} #输入行替代符,代替了从输入源读取的完整行.
{.} #去除扩展名的输入行.
::: #指定输入源的符号,即上面示例的命令行;在这里png或jpg是命令参数.
$>ls -1 *.png | parallel convert '{}' '{.}.jpg' #从 PNG 转换到 JPG
$>ls -1 *.jpg | parallel convert '{}' '{.}.png' #从 JPG 转换到 PNG
$>bash -c 'for image in *.png; do convert "$image" "${image%.png}.jpg"; echo “image $image converted to ${image%.png}.jpg ”; done' #从 PNG 转换到 JPG
$>bash -c 'for image in *.jpg; do convert "$image" "${image%.jpg}.png"; echo “image $image converted to ${image%.jpg}.png ”; done' #从 JPG 转换到 PNG
注意:
-c #允许执行包括在单引号中的循环语句.
image #变量是目录中的图像名的数量记数器;对于每个转换操作,在$image转换为${image%.png}.jpg这行中.echo命令通知用户png图像已经转换为jpg格式,反之亦然.
${image%.png}.jpg #语句创建了转换后的图像名字,其中 % 表示去除源图像文件的扩展名.
$>vi
----------------
#!/bin/bash
#convert
for image in *.png;
do
convert "$image" "${image%.png}.jpg"
echo “image $image converted to ${image%.png}.jpg ”
done
exit 0
寻找光驱,复制光驱内容
----------------
$>dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer'
$>cat /dev/sr0 > /path/iso_name.iso #通过光盘创建iso_name.iso.
随机查命令帮助文档
----------------
$>/use/bin/man $(ls /bin | shuf | head -1) #随机打开一个手册页..
GNOME终端字体乱码
----------------
$>cat /etc/default/locale
$>dpkg-reconfigure locates
$>locale
$>locale -a
$>locale-gen en_US.utf8
$>update-locale en_US.utf8
$>gconf-editor
$>vi .bashrc #Terminal->Set Character Encoding->Unicode(UTF-8)
----------
export LANG="en_US.utf8"
export LC_CTYPE="en_US.utf8"
export LC_NUMERIC="en_US.utf8"
export LC_TIME="en_US.utf8"
export LC_COLLATE="en_US.utf8"
export LC_MONETARY="en_US.utf8"
export LC_MESSAGES="en_US.utf8"
export LC_PAPER="en_US.utf8"
export LC_NAME="en_US.utf8"
export LC_ADDRESS="en_US.utf8"
export LC_TELEPHONE="en_US.utf8"
export LC_MEASUREMENT="en_US.utf8"
export LC_IDENTIFICATION="en_US.utf8"
export LC_ALL="en_US.utf8"
$>vi /etc/environment
$>cd /var/lib/AccountsService/users #这是能真正解决gnome2桌面用户的gnome-terminal乱码问题,每个桌面用户都需要这样配置;对ltsp不生效,在使用ltsp的时候需要手动设置gnome-terminal编码.
$>vi hy
----------
[User]
Language=en_US.utf8
XSession=gnome-fallback
eclipse字符编码
----------------
Window->Preferences->General->Content Types->Text->C Source File:
Default encoding:GBK/GB2312/GB18030 #点击Update即可.
eclipse打开终端
----------------
Run Configurations->C/C++ Application->New Launch configuration->Name:gnome-terminal_169x67-66+85 #创建一个配置
Run Configurations->C/C++ Application->New Launch configuration->Main->C/C++ Application:/usr/bin/gnome-terminal #注意不能有空格.
Run Configurations->C/C++ Application->New Launch configuration->Arguments:--geometry 169x67-66+85 --working-directory=/home/vsftpd/cxx/c #设置默认打开的目录并指定窗口大小.
查看系统支持的分辨率
----------------
$>sudo hwinfo --framebuffer |grep Mode #查看系统支持的分辨率.
$>sudo dd if=/dev/mem bs=1K skip=768 count=256 2>/dev/null | strings -n 8 #从内存中直接读取BIOS的数据来获取显卡支持的分辨率.
$>xwininfo #在终端内执行,此时鼠标变成十字;等待你用鼠标点击终端窗口,点击终端窗口后就会出现终端窗口的信息.
eclipse自动打开在当前目录中终端
----------------
Run Configurations->C/C++ Application->New Launch configuration->Name:gnome-terminal_169x67-66+85 #创建一个配置
Run Configurations->C/C++ Application->New Launch configuration->Main->C/C++ Application:/usr/bin/gnome-terminal #注意不能有空格.
Run Configurations->C/C++ Application->New Launch configuration->Arguments:--geometry 169x67-66+85 --working-directory=${container_loc} #设置默认打开的目录并指定窗口大小.
eclipse打开文件管理
----------------
Run Configurations->C/C++ Application->New Launch configuration->Name:nautilus #创建一个配置
Run Configurations->C/C++ Application->New Launch configuration->Main->C/C++ Application:/usr/bin/nautilus #注意不能有空格.
Run Configurations->C/C++ Application->New Launch configuration->Arguments:${container_loc} #设置默认打开的目录.
eclipse配置选项
----------------
Window->Preferences->General->Editors->File Associations #这里设置指定扩展名的关联程序.
Window->Preferences->General->Content Type->Text #这里设置字符编码.
Window->Preferences->General->Startup and Shutdown #设置自动加载的插件.
Window->Preferences->General->Error Reporting #错误报告,建议全部取消.
Window->Preferences->Install/Update #对自动更新进行设置.
Window->Preferences->Run/Debug->View Managenment #视图管理.
tftpd无法使用问题,手动使用命令行
----------------
$>sudo /etc//tftpd-hpa stop && sudo /usr/sbin/in.tftpd -l -s -c /path
$>tftp localhost #测试tftpd.
----------------
$>get xxx
nautilus特殊的URL地址
----------------
ftp://srvip #FTP文件夹.
ssh://srvip #SSH文件夹.
smb://srvip #SAMBA资源.
trash:// #本地回收站目录.
x-nautilus-desktop:// #桌面项目和图标.
burn:// #刻录CDs/DVDs的数据虚拟目录.
network:// #浏览可用的网络.
computer:// #全部挂载的设备和网络.
配置iptables
----------------
$>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$>iptables -A INPUT -i lo -j ACCEPT
$>iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
$>iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
$>iptables -A INPUT -j DROP
$>iptables-save > /etc/
$>vi /etc/network/interfaces #末尾添加如下文件
------------
pre-up iptables-restore < /etc/iptables.up.rules
$>iptables -L #列出iptables
$>iptables -F #清空iptables
$>iptables -X #清空iptables
$>iptables -Z #清空iptables
注意:上面几条规则的作用是允许已建立的连接接收数据,允许本地环回,允许本地开放ssh的22端口和http的80端口;debian上的iptables不以服务形式管理,经过测试OK,重启后防火墙配置也能保存.
打字软件
----------------
$>apt-get install tuxtype
$>tuxtype #启动.
sublime输入中文的办法
----------------
CTRL+SHIFT+z #在指定位置CTRL+SHIFT+z,然后输入汉字即可.
使用ionice命令删除超大文件
----------------
$>ionice -p PID
$>ionice -c 3 rm /var/logs/syslog
$>ionice -c 3 rm -rf /var/log/apache
$>ionice -c 2 -n 6 rm /var/logs/syslog
$>ionice -c 2 -n 6 rm -rf /var/log/apache
注意:ionice是一个可以对另一个程序设置或获取I/O调度级别和优先级的有用程序;如果没有给出参数或者只有-p参数,那么ionice将会查询该进程的当前的I/O调度级别以及优先级.要指定名字或者调度的数字,使用(0 表示无,1 表示实时,2 表示尽力,3 表示空闲).如果系统中没有很多空闲时间,那么我们希望使用尽力调度级别并且使用低优先级.
GDM开机配置文件
----------------
$>vi /etc/gdm3/Init/Default #登陆界面出现以前,系统加载的程序.
$>vi /etc/gdm3/PostLogin/Default.sample #定义登录过程中要做的事情.
$>vi /etc/gdm3/PreSession/Default #定义登录后加载的程序.
查看dd进度信息
-------------------
$>dd if=... of=... #开启一个终端执行dd命令.
$>sudo watch -n 1 pkill -USR1 -x dd #开启另一个终端执行这条命令,返回上一个终端即可显示dd任务进度信息.
使用grub4dos启动winpe系统
-------------------
$>tar -xvf /home/vsftpd/grub4
$>cd grub4dos && make #make执行完后解压"grub4dos-0.4.6a-2018-04-05.7z".
$>cd /path/grub4dos-0.4.6a && sudo ./ --floppy /dev/sdxx
$>cp ./sample/ /dev/sdxx
$>cp grldr /dev/sdxx
$>vi /dev/sdxx/
-------------------
title $title #"$title"根据需要填写相应的名称即可.
find --set-root /$ #"$"填写实际的iso磁盘名称即可.
map --mem /$ (0xff)
map --hook
chainloader (0xff)
注意:经过测试以上步骤验证成功.
Windows自动运行"synergyc"客户端
----------------
1.配置环境变量
2.编写脚本""
------------
start /b $serv_ip
注意:将""脚本放到开始菜单中的"启动"即可完成开机自动启动.
共享鼠标键盘
----------------
$>vi
----------
section: screens
DEBIAN: #注意这里只能填写主机名,IP无效.
halfDuplexNumLock = true
Hy-system:
end
section: options
switchDelay = 1
end
section: links
DEBIAN:
left = Hy-system #在DEBIAN鼠标向左移动可以进入Hy-system.
Hy-system:
right = DEBIAN #在Hy-system鼠标向右移动可以进入DEBIAN.
end
启动synergy服务端
----------------
$>synergys --name DEBIAN --daemon --restart --config /home/config/
启动synergy客户端
----------------
$>synergyc --daemon srvip
$>synergyc --daemon --name DEBIAN #使用主机名,推荐使用.
配置开机自动启动
----------------
$>vi /etc/gdm3/Init/Default
$>vi /etc/gdm3/PreSession/Default
----------
/usr/bin/killall synergys
sleep 1
/usr/bin/synergys --daemon --restart --config /home/config/
$>vi /etc/gdm3/PostLogin/Default.sample
----------
/usr/bin/killall synergys
sleep 1
快速启动服务
----------------
$>vi ~/.bashrc
----------
alias key="synergys --name DEBIAN --daemon --restart --config /home/config/"
注意:服务端是能够完全操作客户端的,客户端接口连接;DEBIAN-LInux主机,Hy-system-windows主机;都处于同一个局域网;让windows接受控制,Use another computer's shared keyboard and mouse(client)->Other Computer's Host Name:DEBIAN.
修改主机名
----------------
$>sudo hostname DEBIAN #临时生效
$>sudo sysctl =DEBIAN #临时生效
$>sudo vi /etc/hostname #永久生效
-----------
DEBIAN
$>sudo vi /etc/hosts
----------
127.0.1.1 DEBIAN
两个完全相同配置Linux系统的鼠标键盘共享实践
----------------
$>vi #编辑服务端配置.
----------
section: screens
DEBIAN: #注意这里只能填写主机名,IP无效.
halfDuplexNumLock = true
Hy-system:
halfDuplexNumLock = true
end
section: options
switchDelay = 1
end
section: links
DEBIAN:
left = Hy-system #在DEBIAN鼠标向左移动可以进入Hy-system.
Hy-system:
right = DEBIAN #在Hy-system鼠标向右移动可以进入DEBIAN.
end
$>vi /etc/hostname #配置服务端主机名
----------
DEBIAN
$>vi hosts #配置服务端主机名
----------
127.0.0.1 localhost
127.0.1.1 DEBIAN
127.0.1.1
$>synergys --name DEBIAN --daemon --restart --config /home/config/ #启动服务端.
$>vi /etc/gdm3/Init/Default #配置服务端开机自动启动.
$>vi /etc/gdm3/PreSession/Default
----------
/usr/bin/killall synergys
sleep 1
/usr/bin/synergys --name DEBIAN --daemon --restart --config /home/config/
$>vi /etc/gdm3/PostLogin/Default.sample
----------
/usr/bin/killall synergys
sleep 1
$>vi /etc/hostname #客户端修改主机名,将原有的DEBIAN修改成Hy-system.
---------
Hy-system
$>vi /etc/hosts #注释客户端的DEBIAN名,其他内容不变.
----------
127.0.0.1 localhost
#127.0.1.1 DEBIAN
127.0.1.1 Hy-system
127.0.1.1
$>synergyc --name Hy-system --daemon --restart srvip #客户端启动
$>vi /etc/gdm3/Init/Default #配置客户端开机自动启动.
$>vi /etc/gdm3/PreSession/Default
----------
/usr/bin/killall synergyc
sleep 1
/usr/bin/synergyc --name Hy-system --daemon --restart srvip
$>vi /etc/gdm3/PostLogin/Default.sample
----------
/usr/bin/killall synergyc
sleep 1
相同linux system配置客户端
----------------
$>chmod -R 777 /etc/hostname
$>sudo mv /etc/hosts /home/config
$>sudo nano /home/config/
----------
127.0.0.1 localhost
127.0.1.1 Hy-system
127.0.1.1
$>sudo vi /home/config/
----------
sudo echo "Hy-system" > /etc/hostname
sudo -rf /etc/hosts
sudo ln -sf /home/config/ /etc/hosts
/usr/bin/synergyc --name Hy-system --daemon --restart $1
$>chmod +x /home/config/
$>mv /home/config/ /home/config/syn
$>vi /etc/gdm3/Init/Default
----------
rm -rf /etc/hosts
ln -sf /home/config/hosts /etc/
echo "DEBIAN" > /etc/hostname
$>vi ~/.bashrc
----------
alias syn="bash /home/config/syn"
conky开机自动启动
----------------
vi /etc/gdm3/PreSession/Default
----------
#!/bin/bash
#
# Note that any setup should come before the sessreg command as
# that must be 'exec'ed for the pid to be correct (sessreg uses the parent pid)
# Note that output goes into the .xsession-errors file for easy debugging
PATH="/usr/bin:$PATH"
#CONKY-START
cd /home/vsftpd/Tips/
#var
px=`xrandr |awk '{if (NR == 3) {print $1}}' |cut -d x -f 1`
py=`xrandr |awk '{if (NR == 3) {print $1}}' |cut -d x -f 2`
killall conky >/dev/null 2>&1
conky -c ./ -x $[px - 280] -y 90 -p 1 >/dev/null 2>&1
conky -c ./time.conf -x $[px - 280] -y 210 -p 1 >/dev/null 2>&1
conky -c ./ -x $[px - 280] -y 320 -p 1 >/dev/null 2>&1
#CONKY-END
硬盘自动进入休眠的禁止方法
----------------
/etc//sleepd stop
GDB工具
----------------
/home/vsftpd/build-essential/insight
SVN操作
----------------
$>svn list -v URL | DIR #查看详细的目录的信息
$>svn delete URL/FILE -m "message" #删除文件
$>svn log #查看日志
$>svn status FILE | DIR #查看本地修改情况
$>svn add FILE | DIR #添加文件或整个目录
$>svn checkout #获取
$>svn commit -m "mesage" FILE | DIR #提交
$>svn lock -m "message" FILE | DIR #加锁
$>svn merge #合并SVN和本地文件
$>svn revert #撤销本地修改文件
$>svn resolve #合并冲突文件
$>svn update FILE #更新文件
GNOME桌面管理
----------------
1.创建hy-SVN
-----------
$>svnadmin create /application/data/hy
$>ln -sf /application/passwd/passwd /application/data/hy/conf/
$>ln -sf /application/passwd/authz /application/data/hy/conf/
2.签出hy
-----------
$>svnserve -d -r /application/data/
$>cd /application/
$>svn co svn://localhost/hy --username hy --password 123456
3.备份/还原/删除主目录操作
-----------
$>mkdir -p /application/hy/
$>chmod -R 4777 /application/hy/
$>find /home/hy -maxdepth 1 -path workspace -prune -type d -o -name ".*" -not \( -name '.esd_auth' -or -name '.pulse-cookie' -or -name '.pulse' \) -exec mv {} /application/hy/ \; #将/home/hy/移动到/application/hy/.
$>find /home/hy -maxdepth 1 -path workspace -prune -type d -o -name ".*" -not \( -name '.esd_auth' -or -name '.pulse-cookie' -or -name '.pulse' \) -exec rm -rf {} \; #删除/home/hy/下面的所有文件.
$>find /application/hy/ -maxdepth 1 -path workspace -prune -type d -o -name ".*" -not \( -name '.esd_auth' -or -name '.pulse-cookie' -or -name '.pulse' \) -exec ln -sv {} /home/hy \; #将/application/hy/下的文件软连接到/home/hy/.
$>find /application/hy/ -maxdepth 1 -path workspace -prune -type d -o -name ".*" -not \( -name '.esd_auth' -or -name '.pulse-cookie' -or -name '.pulse' \) -exec cp {} /home/hy \; #将/application/hy/下的文件拷贝到/home/hy/.
4.hy的SVN操作指南
-----------
$>svnserve -d -r /application/data/ #启动服务.
$>cd /application/hy
$>find /application/hy/ -maxdepth 1 -path workspace -prune -type d -o -name ".*" -not \( -name '.esd_auth' -or -name '.pulse-cookie' -or -name '.pulse' \) -exec svn add {} \; #添加到svn.
$>svn status #查看svn状态.
$>svn commit -m "init.2018.03.31 08:00" #提交.
$>cd /application && sudo rm -rf hy #删除hy目录.
$>sudo svn co svn://localhost/hy --username hy --password 123456 #签出hy.
$>sudo chmod -R 4777 hy #修改权限.
解决qemu网络
----------------
$>tunctl -t tap(x) -u usr
$>ifconfig tap(x)
$>qemu-system-x86_64 -m 2048 debian-wheezy_x64.img -cdrom debian-7.11.0-amd64-DVD-1.iso -enable-kvm -vga std -no-quit -S -gdb tcp::1234 -net nic -net tap,ifname=tap(x),script=no,downscript=no
$>ifconfig eth(x) #在虚拟机中运行当前命令.
调试内核
----------------
$>qemu-system-x86_64 -no-quit -m 1024 -monitor stdio -S -s -kernel /path/bzImage -hda -append "root=/dev/sda1 init=/bin/sh rw"
$>c #执行上面命令后会暂停,需要输入'c'表示继续(continue).
$>gdb vmlinux #对linux进行源码调试的时候不能将编译完成后的vmlinuz随便拷贝出来使用-kernel /path/vmlinuz,这样在gdb vmlinux的时候会找不到源代码的;解决办法是保持原有目录进行加载和调试.
$>target remote localhost:1234 #建立远程调试.
$>set args ... #设置运行程序的参数.
$>apt-get install build-essential
$>apt-get install linux-kernel-headers
编译内核和gdb调试工具
----------------
$>make menuconfig #编译内核
$>make -j4
$>vi gdb/ #gdb在调试过程中报错.
'g' packet reply is too long: 00000000000000000020e30100000000000000000000
000060eecf81ffffffff000000010000000048eecf81fffff
------------------------------------------
if (buf_len > 2 * rsa->sizeof_g_packet)
error (_(“Remote ‘g’ packet reply is too long: %s”), rs->buf);
修改为:
----------------------------------------
if (buf_len > 2 * rsa->sizeof_g_packet) {
rsa->sizeof_g_packet = buf_len ;
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
{
if (rsa->regs[i].pnum == -1)
continue;
if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}
$>./configure --prefix=/home/hy/gdb
$>make -j4 && make install
$>qemu-system-x86_64 -S -s -kernel /home/hy/kernel/linux-3.2.78/arch/x86_64/boot/bzImage -m 1024 #qemu 启动内核并监听tcp:1234端口.\
$>cd /home/hy/kernel/gdb/bin && ./gdb /home/hy/kernel/linux-3.2.78/vmlinux
gdb:>target remote localhost:1234
gdb:>b start_kernel
gdb:>c or s
gdb:>bt
FIND创建软连接
----------------
$>find /home/hy -maxdepth 1 -path workspace -prune -type d -o -name ".*" -exec ln -sv {} /home/USR \; #将/home/hy下的所有以.开头的文件夹软连接到/home/USR中并排除workspace.
texstudio
----------------
Options->Configure Texstudio->Show Advanced Options->->Show Line Numbers #显示行号.
Options->Configure Texstudio->Build->Default Compiler:XeLaTex #使用XeLaTex编译.
texlive宏包安装
----------------
$>cp *.sty /usr/local/texlive/2016/texmf-dist/tex/latex #拷贝*.sty到这个目录下然后执行下面命令即可.
$>mktexlsr
$>texhash
实战pgf_3.0.1宏包的安装
----------------
$>unzip pgf_3.0.1
$>cd /home/vsftpd/pgf_3.0.1a && sudo cp -R * /usr/local/texlive/2016/texmf-dist/tex
$>mktexlsr
$>texhash
pgf_3.0.1a例子使用方法
----------------
$>cp /home/vsftpd/pgf_3.0.1a/doc/generic/pgf/version-for-xetex/en/ /home/hy/pgf/
$>cp /home/vsftpd/pgf_3.0.1a/doc/generic/pgf/version-for-xetex/en/ /home/hy/pgf/
$>cp /home/vsftpd/pgf_3.0.1a/doc/generic/pgf/text-en/* /home/hy/pgf/
$>cp /home/vsftpd/pgf_3.0.1a/doc/generic/pgf/macros /home/hy/pgf/
$>cp /home/vsftpd/pgf_3.0.1a/doc/generic/pgf/images /home/hy/pgf/
vi #LINE:15~16
-----------
\input{}
\input{}
vi #LINE:173~174
-----------
\graphicspath{{images/}}
\input{macros/pgfmanual-en-macros}
或者直接使用/home/vsftpd/pgf-3.0.1
\newcommand{} #latex自定义命令
\def #latex自定义命令,\tikzname查找到./macros/,line:1092.
\begin{pgfmodule} #\newenvironment{pgfmodule}查找到./macros/,line:984.
\end{pgfmodule}
或者直接使用/home/vsftpd/pgf-zh_CN-3.0.1,添加中文支持;更新前面的pgf-3.0.1.
$>cp /home/vsftpd/pgf-3.0.1 ~ && tar -xvf ~/pgf-3.0.1
注意:pgf-3.0.1只能解压到用户主目录中使用,否则编译会出现错误;在texstudio使用pgf-3.0.1a过程中感觉不是很稳定.
vi更换主题
----------------
$> ~/.vimrc #注释如下内容
-----------
" 显示相关
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "状态行显示的内容
"set laststatus=2 "启动显示状态行(1),总是显示状态行(2)
"color torte "设置背景主题
"set ruler "标尺,水平线
"set cmdheight=2 "总是显示状态行
$vi ~/.vimrc #启用如下内容
-----------
color desert "设置背景主题
或者
color ron "设置背景主题
XMind序列号
----------------
价格:499¥
注册名:胡致云
邮箱:huhuoyun@
支付:微信
XMind图片导入
----------------
Image->Manage Clip Art [Pro]->Add Group [Pro]:User Group ->Add [Pro] #选择图片位置即可.
注意:图片的格式必须是.png,否则无法导入.
CRT序列号
----------------
价格:900¥
注册名:胡火云
邮箱:huhuoyun@
手机号:15527523006
支付编号:VAN180714-9653-60146
支付:信用卡
Windows非常好用的截图工具
----------------
用户名:ZHOU2X
注册码:JPHMUIGDFXNWWVOIAUGX
路径:/home/vsftpd/fscapture
注意:利用crossover中si容器中的"run command..."创建"Create Launcher..."不能包含中文路径,否则不能加载.
屏蔽"piix4_smbus"错误
----------------
$>lsmod | grep -i i2c_piix4
$>vi /etc//
------------
blacklist i2c_piix4
$>update-initramfs -u -k all
图片制作/处理
----------------
$>gimp #Linux 照片处理工具.
$>inkscape #Linux 矢量绘图工具.
$>krita #Linux 插图工具.
$>kolourpaint #简单画图工具.
$>librecad #CAD画图工具.
绘图/手绘工具
----------------
$>kolourpaint
$>pinta
$>krita
图片查看器
----------------
$>digikam #比较好的看图工具.
数学工具
----------------
$>xmaxima #科学计算;wxmaxima,xmaxima,maxima.
$>geogebra #几何.
$>octave #科学计算.
强大绘图工具包
----------------
$>scilab/octave/xmaxima/R
or
$>gnuplot
$>info gnuplot #gnuplot帮助文档.
R的使用
----------------
$>R #进入shell界面.
$>q() #退出.
$>/usr/bin/Rscript --save $ #--save表示运行完后把工作目录进行保存.
$>vi $
-----------
#!/bin/bash
R --slave [other option] <<EOF
#R代码
EOF
or
#!/bin/bash
source /etc/profile
source ~/.bash_profile
R --slave <<EOF
source("/$PATH/$")
EOF
RM在删除的时候排除某一类型文件
----------------
$>shopt -s extglob #开启扩展通配符.
$>shopt -s #查看扩展通配符是否开启
$>rm -rf !($) #保留“$”文件.
or
$>find . -not -name "$" -exec rm -rf {} \;
$>find ./ -path "." -prune -o -type f -not -name "$" | xargs rm -rf
使用SSH挂载文件系统
----------------
$>sshfs -o reconnect,sshfs_sync,follow_symlinks,transform_symlinks,allow_other $USER@$SRVIP:/$PTH /$MNT
物理工具
----------------
$>step #力学.
inkscape汉化
----------------
CTRL + SHIFT + P,在调出的界面中选择Interface->Language:Chinese/China(zh_CN),Toolboxicon size:Small #重启即可显示中文.
GIMP窗口设置
----------------
Windows->Single-Window Mode #单窗口模式.
GIMP汉化
----------------
Edit->Preferences->Interface->Language:Chinese[zh_CN] #点击确定后,重启生效.
XMind汉化
----------------
Edit->Preferences...->Language #选择中文,重启即可.
Texstudio汉化
----------------
Options->Configure TexStudio...->General->Language:zh_CN #设置立即生效.
Freemind汉化
----------------
Preferences...->Environment->Language:zh_CN #重启即可显示中文.
eclipse汉化
----------------
$>eclipse -nl en #指定eclipse默认显示为English,如需要显示中文请下载中文语言安装包.
$>eclipse -nl zh_CN #安装中文包后的启动方式.
获取当前目录名
----------------
$>basename $PWD
$>echo ${PWD##*/}
$>pwd | rev | awk -F \/ '{print $1}' | rev
$>pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'
解决vnc不能同步显示当前的操作
----------------
$>cd ~ && touch .Xresources #实际解决问题的命令.
$>vncserver -kill :1 #杀死vncserver进程.
$>vncserver
远程的桌面窗口调用到本地桌面进行操作
----------------
$>ssh -XC usr@srvip #ssh,远程的桌面窗口调用到本地桌面进行操作.
FLASH插件
----------------
$>cd /usr/lib/mozilla/plugins && ls -al
$>ln -sv /etc/alternatives/ cd /usr/lib/mozilla/plugins #系统原有配置.
$>cp /usr/lib/mozilla/plugins/ #新增flash插件.
$>cd /usr/lib/mozilla/plugins
$>chmod -R 755
让磁盘在9:00~18:00停止磁盘休眠
----------------
$>vi /etc/crontab
-----------
0 9 * * * root /etc//sleepd stop
0 18 * * * root /etc//sleepd stop
修复tftp-hpa启动不成功的办法
----------------
$>vi /etc//tftpd-hpa #LINE:57,注释掉如下内容.
-----------
start-stop-daemon --start --quiet --oknodo --exec ${DAEMON} -- \
--listen --user ${TFTP_USERNAME} --address ${TFTP_ADDRESS} \
${TFTP_OPTIONS} ${TFTP_DIRECTORY}
$>vi /etc//tftpd-hpa #LINE:57,添加如下内容.
-----------
start-stop-daemon --start --quiet --oknodo --exec ${DAEMON} -- \
${TFTP_OPTIONS} ${TFTP_DIRECTORY}
$>vi /etc/default/tftpd-hpa #修改其内容,如下.
-----------
# /etc/default/tftpd-hpa
#TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
#TFTP_ADDRESS="0.0.0.0:69"
#TFTP_OPTIONS="--secure"
#alter 2017.06.13
TFTP_OPTIONS="-l -s -c"
将ltsp镜像修改本地镜像
----------------
$>vi /usr/share/ltsp/plugins/ltsp-build-client/Debian/000-basic-configuration #修改wheezy镜像.
$>vi /usr/share/ltsp/plugins/ltsp-build-client/Debian/013-security-mirror #修改wheezy/updates镜像.
$>vi /usr/share/ltsp/plugins/ltsp-build-client/Debian/020-apt-get-update #增加选项.
$>scp -r * root@192.168.10.88:/home/vsftpd/web/nginx-1.2.1/apt/mirror//debian/dists/wheezy
tftpd
----------------
$>cd /srv
$>chmod 777 tftp
$>chmod g+s tftp
$>chmod o+t tftp
$>mv /path/xxx /srv/tftp #服务监听目录:/srv/tftp;这个目录不能更改,否则会导致ltsp无法使用;解决这个问题的办法.
$>ln -sf /srv/tftp/xxx /path
$>tftp localhost #测试连接.
$>get xxx/yyy #客户端从服务端下载文件.
$>put yyy #客户端上传文件到服务端.
busybox的tftp命令用法
----------------
$>tftp -gr file srvip #下载文件,使用远程主机的文件名.
$>tftp -pl file srvip #上传文件,使用本地主机的文件名.
分辨率相关
----------------
$>cvt 1366 768
$>xrandr
$>xrandr --rmmode xxx
$>xrandr --newmode xxx
$>xrandr --output default --mode "1366*768"
nfs文件系统
----------------
$>exportfs -au #卸载所有共享目录.
$>exportfs -rv #重新共享所有目录并输出详细信息.
$>showmount -e #查看nfs共享的服务.
$>showmount -e srvip #查看srvip nfs共享的服务.
$>showmount -a #显示已经与客户端连接上的目录信息.
$>nfsstat #查看NFS的运行状态.
"--dir--"产生
----------------
$>vi /home/config/
-----------
--dir--
$>./
使用'rm -rf --dir--'无法删除,但是可以使用下面命令解决
----------------
$>rm -rf -- --dir--
configure通用选项
----------------
--enable-debugging --enable-developer --enable-static=1 --enable-shared=0
GDB设置库的加载
----------------
export LD_PRELOAD=/path/ #加载优先级最高.
跟踪调用
----------------
eg.$>strace -f -F -o ~/ gdbserver --version
调试开源源软件的步骤
----------------
1."vi configure"搜索"O2",将"O2"替换为"O0".
2.使用通用选项"./configure --prefix=/path --enable-debugging --enable-developer --enable-static=1 --enable-shared=0 ..."
3.使用调试工具对程序进行调试().
bash隐藏错误输出
----------------
$>cmd >/dev/null #隐藏bash命令的标准输出.
$>cmd 2>/dev/null #隐藏bash命令的错误输出.
$>cmd >/dev/null 2>&1 #隐藏bash命令的标准和错误输出.
自动清空网口列表
----------------
$>vi /etc/gdm3/Init/Default #登陆界面出现以前,系统加载的程序.
-----------
echo "" /etc/udev// #/etc/gdm3/Init/Defaut中加入.
打印本机IP地址
----------------
$>/sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p'
$>/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" #更准确.
$>echo $(/sbin/ifconfig eth0|awk '/inet/ {split ($2,x,":");print x[2]}') #更好控制.
使用正则表达式
----------------
#!/bin/bash
if [ -z $1 ];then
interface="eth0"
else
interface=$1
fi
temp=`ip addr |grep 'inet[^6]'`
for str in $temp
do
if [[ $str =~ ^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ ]]
then
echo ${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}.${BASH_REMATCH[4]}
fi
done
使用gnustep例子
----------------
$>cd /home/vsftpd/gnustep
$>tar -xvf gnustep-examples-1.3.
$>cd gnustep-examples-1.3.0/gui/Calculator
$>make
$>openapp ./ #运行.
bash输出多行文本信息
----------------
#!/bin/bash
(
cat <<EOF
...
EOF
)>/path/file
POWERLINE配置
----------------
$>ls /usr/local/lib/python2.7/dist-packages/powerline/bindings
$>fc-cache -vf ~/.fonts/ #创建字体缓存.
$>pip install --user powerline-status #pip查看powerline-status安装包.
$>mkdir -p ~/./
$>vi ~/.bashrc #bash添加/启用powerline.
-----------
#powerline
if [ -f `which powerline-daemon` ]; then
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
. /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/
fi
$>vi ~/. #tmux添加/启用powerline.
-----------
source "/usr/local/lib/python2.7/dist-packages/powerline/bindings/tmux/"
$>vi ~/.zshrc #zsh添加/启用powerline.
-----------
. /usr/local/lib/python2.7/dist-packages/powerline/bindings/zsh/
$>vi ~/.vimrc #vim添加/启用powerline.
-----------
set rtp+=/usr/local/lib/python2.7/dist-packages/powerline/bindings/vim/
set laststatus=2
set t_Co=256
修复conky显示问题
----------------
$>vi /etc/network//lcnt #建立/tmp/lcnt,并在开启网卡的时候将lcnt内容置为"0".
-----------
#!/bin/bash
#LCNT-START
echo "0">/tmp/lcnt
#LCNT-END
$>vi /etc/gdm3/PreSession/Default #lcnt=1,则使用-y 50;lcnt>=2,则使用-y 90.
-----------
#LCNT-START
lcnt=`cat /tmp/lcnt`
let lcnt=$lcnt+1
echo $lcnt > /tmp/lcnt
#LCNT-END
#CONKY-START
cd /home/vsftpd/Tips/
px=`xrandr |awk '{if (NR == 3) {print $1}}' |cut -d x -f 1`
py=`xrandr |awk '{if (NR == 3) {print $1}}' |cut -d x -f 2`
killall conky >/dev/null 2>&1
if [ $lcnt -ge 2 ]
then
conky -c ./ -x $[px - 280] -y 90 -p 1 >/dev/null 2>&1
else
conky -c ./ -x $[px - 280] -y 50 -p 1 >/dev/null 2>&1
fi
conky -c ./ -x $[px - 280] -y 210 -p 1 >/dev/null 2>&1
conky -c ./ -x $[px - 280] -y 320 -p 1 >/dev/null 2>&1
#CONKY-END
vnc配置
----------------
$>sudo killall Xtightvnc
$>vi /etc//vncserver
-----------
#! /bin/sh
export USER="hy" #修改这里即可.
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
NAME=vncstart
start(){
su - $USER -c"vncserver :1"
}
stop(){
su - $USER -c"vncserver -clean -kill :1"
}
case "$1" in
start)
echo -n "Starting Xvnc..."
start
;;
stop)
echo -n "Stopping Xvnc..."
stop
;;
restart)
echo -n "Restarting Xvnc..."
stop
start
;;
****)
echo "Usage: /etc//$NAME {start|stop|restart}"
;;
esac
exit 0
opensips语音服务器
----------------
$>opensipsctl trap
$>opensipsctl start #sip启动.
$>opensipsdbctl create #开启数据库.
$>opensipsctl add username password #添加用户, add 111 111.
$>opensipsctl ul show #查看注册的用户.
-----------
Domain:: location table=512 records=2
AOR:: 222
Contact:: sip:222@192.168.10.159;transport=udp Q=
ContactID:: 2245396257965084266
Expires:: 3062
Callid:: 5T3-R5nUZs
Cseq:: 22
User-agent:: LinphoneAndroid/3.2.4 (belle-sip/1.5.0)
State:: CS_NEW
Flags:: 0
Cflags::
Socket:: udp:192.168.10.88:5060
Methods:: 4294967295
SIP_instance:: <urn:uuid:089e6d2d-25fe-4754-b3e9-2734cc48ff8a>
AOR:: 111
Contact:: sip:111@192.168.10.226:1024;line=37e488055a02b55 Q=
ContactID:: 570901621513395327
Expires:: 2942
Callid:: 1596159381
Cseq:: 3
User-agent:: LinphoneAndroid/2.0.2 (eXosip2/3.6.0)
State:: CS_NEW
Flags:: 0
Cflags::
Socket:: udp:192.168.10.88:5060
Methods:: 4294967295
Contact:: sip:111@192.168.10.226:1024;line=dab175af34db1b1 Q=
ContactID:: 570901621513395328
Expires:: 2942
Callid:: 1580694747
Cseq:: 1
User-agent:: LinphoneAndroid/2.0.2 (eXosip2/3.6.0)
State:: CS_NEW
Flags:: 0
Cflags::
Socket:: udp:192.168.10.88:5060
Methods:: 4294967295
$>opensipsctl online #查看是否在线.
--------
111
222
Empathy使用sip的连接配置
----------------
username:111@192.168.10.88
password:111
产生core dump文件
----------------
$>ulimit -c #查看
$>ulimit -c unlimited #开启core dump.
$>vi /proc/sys/kernel/core_pattern #将core文件生成到/coredump,文件格式为:core-cmdname-pid-timeval.
-----------
/coredump/core-%e-%p-%t
注意:每次开机需重新执行以上步骤,否则core dump无法生成.
启动屏幕保护
----------------
$>xscreensaver-demo #启动屏保配置.
$>xscreensaver -nosplash #后台启动屏保.
键盘与鼠标
----------------
$>xmodmap #键盘与鼠标配置.
电脑护眼工具
----------------
$>workrave
系统使用注意事项
----------------
网络功能,synergys,synergyc等网络程序依赖于物理网口和路由器;无线网络无法使用以上功能.
解决"piix4_smbus 0000.00.07.0: SMBus base address uninitialized - upgrade bios or use force_addr=0xaddr"
----------------
$>lsmod | grep i2c_piix4
$>vi /etc//
-----------
blacklist i2c_piix4
$>update-initramfs -u -k all
将目录映射为内存
----------------
$>mkdir ~/Tmp
$>sudo mount -t tmpfs -o size=1024m tmpfs ~/Tmp #tmpfs无法进行动态扩展,只能使用挂载时指定的分区大小;tmpfs使用swap或物理内存作为存储空间.
$>sudo mount -t ramfs -o size=1024m ramfs ~/Tmp #ramfs可以动态进行容量扩展,只要不大于系统内的可用物理内存大小即可;ramfs不能使用swap空间,只能使用物理内存空间.
开机自动挂载tmpfs,ramfs
----------------
$>vi /etc/fstab
-----------
tmpfs /home/hy/Tmp tmpfs rw,user,iocharset=utf8,umask=0,size=1024 0 0
ramfs /home/hy/Tmp ramfs rw,user,iocharset=utf8,umask=0,size=1024 0 0
/path/Usage_xx.iso /mnt/tools/ udf,iso9660 owner,auto,ro,loop,iocharset=utf8 0 0
$>mount -a #检测fstab是否写正确了.
$>mount -l #查看挂载列表.
$>sudo chmod -R 777 ~/Tmp #重启后执行该命令.
$>sudo chmod g+s,o+t ~/Tmp
开机自动挂载samba文件系统并且拥有可读写权限
----------------
$>id #获取uid/gid,将下面的uid,gid改成与之对应即可.
$>vi /etc/fstab #添加如下内容.
-----------
//srvip/path /media/samba cifs rw,auto,defaults,uid=x,gid=y 0 0 #无密码访问设置
//srvip/path /media/samba cifs rw,auto,defaults,uid=x,gid=y,username=xx,password=yy 0 0 #有密码访问设置
//srvip/path /media/samba cifs rw,auto,defaults,uid=x,gid=y,umask=0,fmask=0,dmask=0 0 0
//srvip/path /media/samba cifs rw,auto,defaults,uid=x,gid=y,umask=0,fmask=0,dmask=0,username=xx,password=yy 0 0
$>mount -a #如果某些网络文件不能自动挂载(),配置好网络后可以执行当前命令重新挂载文件系统.
开机自动挂载UDF光盘
----------------
$>vi /etc/fstab
----------
/path/ /mnt/y/ udf,iso9660 owner,auto,ro,loop,iocharset=utf8 0 0
sshfs开机自动挂载
----------------
$>vi /etc/fstab
----------
sshfs#$USER@$REMOTE_HOST:/$PATH $M_POINT fuse defaults,auto,nonempty,allow_other,sshfs_sync,follow_symlinks,transform_symlinks,reconnect 0 0 #自动挂载.
$>sudo mount -a #"sshfs"并不会开机挂载,需要执行此条命令才可以.
$>fusermount -u $M_POINT #卸载.
or
$>umount -fl $M_POINT #卸载.
ssh/sshfs自动输入密码
----------------
$>su - #使用“root”用户并登录"root"用户主目录.
$>ssh-keygen -t rsa #使用"root"生成一对密钥.
$>cat ~/.ssh/id_rsa.pub | ssh root@$REMOTE_HOST "cat - >>~/.ssh/authorized_keys" #将"id_rsa.pub"加入到远程主机的"authorized_keys"中.
or
$>ssh-copy-id -i ~/.ssh/id_rsa.pub $REMOTE_HOST #将"id_rsa.pub"加入到远程主机的"authorized_keys"中.
$>ssh root@$REMOTE_HOST #经过测试ok.
$>ssh root@$REMOTE_HOST #"ssh"远程,如果不能免密码登录请按照以下步骤检查.
$>mkdir -p ~/.ssh
$>touch ~/.ssh/authorized_keys
$>chmod -R 700 ~/.ssh
$>chmod -R 600 ~/.ssh/authorized_keys
or
$>cd ~ && rm -rf .ssh #重新执行"ssh-copy-id"等命令.
$>exit #退出"ssh".
挂载windows分区
----------------
$>smb://$SRVIP/path/ #鹦鹉罗文件浏览器测试windows samba访问是否正常.
$>man 8 #查看使用方法.
$>mount -t cifs //$SRVIP/path/ /mnt/path/ -o rw,uid=$UID,gid=$GID,user=$USR,password=$PWD #经过测试OK.
后台/快捷运行Virtualbox
----------------
$>VBoxManage list vms #查看当前已安装的虚拟机名称和UUID.
$>VBoxManage list runningvms #查看正在运行的虚拟机.
$>VBoxManage startvm xx -type headless #xx-表示要启动的虚拟机名称,headless-表示不显示界面.
$>VBoxManage startvm xx -type vrdp #VRDP(远程桌面),监听端口:3389.
$>VBoxManage controlvm xx poweroff #关闭xx虚拟机,pause(暂停),resume(还原),reset(重启),poweroff(关机),savestat(保存).
virtualbox磁盘转换(vdi->vmdk)
----------------
$>vboxmanage clonehd --format VMDK --variant Fixed
命令使用经验
----------------
$>man -k $STR #列出包含指定单词的手册页.
$>lsusb -v #查看USB接口信息.
$>help #当你完全绝望的时候,可以试图使用此命令.
$>stat $FILE #用于显示文件大小,所有者,用户组,索引节点号,权限,修改和访问时间等重要的统计信息.
$>cp -ruv /SDIR /DST #高效更新文件夹.
$>cp --force --backup=numbered $FILE $FILE #备份.
$>cp -ruv --force --backup=numbered /SDIR /DST #更新文件夹,同时备份旧的文件.
Leanote笔记工具的优缺点
----------------
SHIFT+Enter #从代码编辑器跳到普通编辑器.
SHIFT+CTRL+c #可以清除代码段的代码,重新加入代码端选中代码点击代码端按钮即可.
标题-黑体加粗 #日记规范
注意:Leanote(优点-支持简单的脑图,代码等插入. 缺点:markdown不能更改文字大小以及字体,编写表格的时候很不方便;代码编辑的时候换行很容易导致问题,如果文档中包含有代码编辑部分不能使用‘CTRL+A’全选设置字体大小).
解决SWAP占用过高导致缓慢的问题
----------------
sudo sync
sudo swapoff -a
sudo swapon -a
sudo free -m
Xdebug调试php
----------------
$>php -v #查看php版本,路径"/usr/bin".
$>sudo ln -sf /home/vsftpd/php /home/vsftpd/web/apache-2.2.22/
$>tar -xvf /home/vsftpd/xdebug-2.3.3.tgz
$>cd xdebug-2.3.3
$>phpize
$>./configure
$>make && make install #安装路径"/usr/lib/php5/20100525".
$>vi /etc/php5/apache2/
----------
[Xdebug]
zend_extension = "/usr/lib/php5/20100525/"
xdebug.auto_trace = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = On
xdebug.collect_vars = On
xdebug.collect_return = On
xdebug.collect_params = On
xdebug.profiler_enable = On
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.remote_host= localhost
xdebug.remote_port = 9008
xdebug.remote_handler = dbgp
xdebug.remote_connect_back= Off
= phpstorm
$>sudo /etc//apache2 restart
$>php -m
PhpStorm配置
----------------
Languages & Frameworks->PHP #在CLI Interpreter点击"...",然后点击“+”选择“/usr/bin/php”即可.
Languages & Frameworks->PHP->Debug->Debug port:9008
Languages & Frameworks->PHP->Debug->IDE key:phpstorm
Languages & Frameworks->PHP->Debug->Host:localhost
Languages & Frameworks->PHP->Debug->Port:80
Languages & Frameworks->PHP->Servers
PhpStorm调试单个网页
----------------
注意:选择php文件右键选择debug这个脚本即可.
PhpStorm+Firefox调试
----------------
URL:about:addons ->Extensions #选择“theeasiestxdebug 2.1.2”选项.
IDE key for remote debugging:phpstorm #其他默认即可.
svn签出
----------------
svn co [svn/https]://url:port/path --username USR --password PWD
svn更换地址
----------------
$>svn info
$>svn switch --relocate old_url new_url
$>svn info
启动屏幕保护
----------------
$>xscreensaver-demo #启动屏保配置.
$>xscreensaver -nosplash #后台启动屏保.
键盘与鼠标
----------------
$>xmodmap #键盘与鼠标配置.
电脑护眼工具
----------------
$>workrave
Gdb使用core文件
----------------
$>gdb /path/prog-exec /path/core-file
or
$>gdb /path/prog-exec
$>core-file /path/core-file
$>bt/where #查看程序运行到哪里.
永久产生coredump文件
----------------
$>vi /etc/security/limits.conf
-----------
@root soft core unlimited
@root hard core unlimited
$>vi /etc/
-----------
kernel.core_pattern = /coredump/core-%e-%p-%t
kernel.core_uses_pid = 0
$>sudo sysctl -p #使修改结果马上生效.
针对coredump进行调试
----------------
$>gdb /path/prog-exec /path/core-file #在使用coredump的时候请关注程序运行的参数,eg"Core was generated by ...".
or
$>gdb /path/prog-exec
$>core-file /path/core-file
$>bt/where #查看程序运行到哪里.
$>f $xx #$xx为bt/where执行后查看到的frame号,这里在编译的时候带上了'-g'调试信息则可以看到具体的错误位置;否则只能看到出错的函数名.
$>b $yy #这里在编译的时候带上了'-g'调试信息,则可以加入断点调试.
$>r #运行程序.
注意:不是所有情况下产生的coredump文件都能用,如果不能使用就从gdb中启动执行文件看出现段错误的堆栈信息.
$>gdb /path/prog-exec
$>r $args #指定执行程序的运行参数.
cscope搜索
----------------
$>cd /path
$>cscope -bqR #建立查找数据库.
$>cscope -dq #启动cscope,tab切换窗口[搜索结果/条件],方向键选择搜索条件/搜索结果;如果搜索结果内容过多;[Page Up/Page Down]/[CTRL+Left/Right]可以在搜索内容中进行翻页查看.
cscope退出
----------------
$>cscope -dq #执行后使用"CTRL + d"即可退出cscope.
objdump查看调试信息
----------------
$>objdump -h prog-exec #命令检查ELF可执行文件中的节头.
$>objdump --dwarf=info prog-exec #查找函数.
$>objdump --dwarf=loc prog-exec
$>objdump --dwarf=decodedline prog-exec #查看行号
$>objdump -d prog-exec #对可执行文件进行反汇编.
ps查看进程
----------------
$>ps -ef
$>ps -axu
查看数据存储
----------------
$>vi /path/file
-----------
0x123456789
$>od -x /path/file #使用十六进制方式查看/path/file.
$>od -c /path/file #使用字符方式查看/path/file.
$>hexdump -x /path/file #使用十六进制方式查看/path/file.
$>hexdump -c /path/file #使用字符方式查看/path/file.
计算文件MD5
----------------
$>md5sum /path/file >>
制作Linux-Live USB启动盘
----------------
$>dd if=/path/xxx_live.iso of=/dev/sdx bs=8M oflag=direct
vi创建加密文件
----------------
$>vi -x /path/file #创建加密文件/path/file,要求输入两次密码.
$>vi /path/file #打开加密文件要求输入密码,正确后即可打开/path/file.
or
$>vi /path/file #创建/path/file.
$>:X #输入密码后即可创建加密文件/path/file.