![技术备忘1_第1张图片](http://img.e-com-net.com/image/info5/c7989f409ea2489bb41f5b5fbfb800fa.jpg)
![技术备忘1_第2张图片](http://img.e-com-net.com/image/info5/6d1d33e5e47340e8987dc85e463aca83.jpg)
查看系统是多少位和设备UUID
shell>getconf LONG_BIT
shell> ls -l /dev/disk/by-uuid/
内核目录 /usr/src/kernels中无内核文件
shell> yum -y install kernel-devel
循环刷新时间的shell脚本
now()
{
date=`date +%Y\ %m\ %d\ %H:%M:%S`
echo -ne "$date\r"
}
while :
do
now
sleep 1
done
硬链接和软链接
通过文件名打开文件
![技术备忘1_第3张图片](http://img.e-com-net.com/image/info5/29449ec0c32547e8a8494aa2222cf7b7.jpg)
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见图) 。因此软链接的创建与使用没有类似硬链接的诸多限制:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
软链接的访问
![技术备忘1_第4张图片](http://img.e-com-net.com/image/info5/5d14ca3857584944a4252a32e7ee05ed.jpg)
地址:http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html
删除目录软链接
rm -rf test/ 对于软链接目录,删除的时候不能加/,否则是删除不掉的
ftp / tftp
tftp是应用层的软件,它与ftp的不同在于,在传输层它是基于UDP协议的,是不可靠的协议,但是效率很高,在路由交换中应用很大。
ftp在传输层是基于TCP的,速度相对较慢。
CentOS6x_x86_64 DNS启动注意点
[root@www lin]# /etc/rc.d/init.d/named restart
stop named: [OK]
Generating /etc/rndc.key:
#resolve
[root@www lin]# rndc-confgen -r /dev/urandom -a
wrote key file "/etc/rndc.key"
[root@www lin]# /etc/rc.d/init.d/named restart
stop named: [OK]
start named: [OK]
设置提示字符串PS1
shell> PS1="PROMPT>"
PROMPT> Type commands here # 提示字符串已经改变
shell> PS1="\e[1;31mPROMPT-->" ///加了颜色…
PROMPT-->
此时,在终端中的显示应该是彩色的提示符了,其中的\e[1;xxm和\e[m就是改变终端字体颜色的部分,
前者是修改颜色,后者是恢复到正常显示。但是这时还会有问题,在提示符中输入第一行时,回车换行不正常,
导致显示很混乱,因此,除了这个修改之外,还需要将全部非打印字符用专用的 bash 转义序列 "\[" 和 "\]" 括起来。
这两个序列通知 bash,被括起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。
最终版本如下(可解决带颜色提示符的不换行问题):
shell>PS1="\[\e[1;32m\]\u\[\e[m\]\[\e[1;33m\]@\[\e[m\]\[\e[1;35m\]\h\[\e[m\]:\w\$ "
另外,还可以加判断语句输出喔,用“``”符号调用命令即可:
PS1=$'`if [ $? = 0 ]; then echo \\[\\e[42m\\]\\[\\e[1m\\]Right\\[\\e[0m\\]; else echo \\[\\e[41m\\]\\[\\e[1m\\]Wrong\\[\\e[0m\\]; fi\n`[\\u@\\h:\\[\\e[36m\\]\\w\\[\\e[0m\\]]\\$ '
vim录制宏
1. 将光标移至想要注释掉的第一行行首->ESC->qa->i->#->ESC->j->q
qa: q是开始录制,后面紧跟名字,这里是a,也可以是其他
最后一个q表示结束录制
2. @a会重复刚刚录制的a
3. 10@a会重复10次
Public key for *.rpm is not installed
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
根据Linux版本是CentOS 6.X
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
history格式自定义
eg:
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
HISTTIMEFORMAT="%F %T "
增加swap分区大小
shell>dd if=/dev/zero of=swapfile bs=10M count=1000
shell>mkswap swapfile
shell>swapon swapfile //激活swap文件
shell>swapoff swapfile //卸载该swap文件
//写入 /etc/fstab
swapfilepath swap swap defaults 0 0
修改主机名
1. shell> hostname tao
2. 修改/etc/sysconfig/network中的hostname
3. 修改/etc/hosts文件
屏蔽IPV6
/etc/sysconfig/network
IPV6_NETWORKING=no
vi /etc/modprobe.d/ipv6.conf ///文件名没所谓!
blacklist ipv6
alias net-pf-10 off
alias ipv6 off
CentOS字符与图形界面相关
yum grouplist //检查已安装的组
yum groupinstall "X Window System"
yum groupinstall "Desktop"
startx 或者init 5
图形界面想要卸载:
yum groupremove "Desktop"
yum groupremove "X Window System"
URL
二进制文件的简单读取
od
hexdump
mail
mail -s “test” [email protected] < test.txt
userdel: user ** is currently logged in
解决方法:
mv /var/run/utmp /var/run/utmp_old //将原文件改名
touch > /var/run/utmp //新创建一同名文件
再次执行删除操作。。。成功删除用户
关于:/var/run/utmp
utmp是一个文件,除了utmp程序你不能编辑这个文件,删掉他的话,当前登陆信息都会丢失。这个文件在每次机器reboot起来后都会重新创建。
更多关于utmp文件介绍请参考下面说明:
/var/run/utmp
该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。
(/var/log/wtmp、/var/log/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。
每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。
下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。
知识点转载点
另外,如果有该用户的文件正在使用的话,即有以该用户为属主在跑程序,那么删除该用户的时候,仍然会报这样的错!
linux批量替换文件内容3种方法(perl,sed,shell)
方法1:
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手 工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name ‘要查找的文件名’ | xargs perl -pi -e ‘s|被替换的字符串|替换后的字符串|g’下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“ 替换为”http://localhost:8081/nexus/content/groups/public“.
find -name ‘pom.xml’ | xargs perl -pi -e ‘s|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g’这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name ‘pom.xml’ | xargs perl -pi -e ‘s|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g’
方法2:
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的 字符串。
sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换 为huinanma,执行命令:
sed -i “s/mahuinan/huinanma/g” ‘grep mahuinan -rl /www’
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i “s/oldString/newString/g” `grep oldString -rl /path`
实例代码:sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl /usr/aa`
sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl ./`
方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep “abc” * -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/abc/abcde/g’
批量替换 配置文件中的IP:
grep “[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}” * -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/172\.0\.0\.1/g’
补充说明:
sed -i “s/oldString/newString/g” `grep oldString -rl /path`
对多个文件的处理可能不支持,需要用 xargs, 搞定。
变种如下:
grep oldString -rl /path | xargs sed -i “s/oldString/newString/g”
对 grep 文件的更多操作:
grep -rl “oldString” . –include=\*.{h,cpp} | while read file; do echo $file;done
注意:
在 `grep oldString -rl /path` 中 ` 为1前边的翻引号`,而不是enter 前的 ‘
转载
vim分屏
启动分屏
1.使用大写O参数进行水平分屏
$ vim -On file1 file2 ...
2.使用小写o参数进行垂直分屏
$ vim -on file1 file2 ...
注: n是数字,表示分屏的数量
关闭分屏
1.关闭当前窗口
ctrl+w c
2.关闭当前窗口,如果只剩最后一个,则退出vim
ctrl+w q
编辑中分屏
1.上下分割当前打开的文件
ctrl+w s
2.上下分割,并打开一个新的文件
:sp filename
3.左右分割当前打开的文件
ctrl+w v
4.左右分割,并打开一个新的文件
:vsp filename
分屏编辑中光标的移动
vi中的光标键是h,j,k,l,要在各个屏之间切换,只需要先按一下ctrl+w
1.把光标移动到上边的屏
ctrl+w k
2.把光标移动到下边的屏
ctrl+w j
3.把光标移动到右边的屏
ctrl+w l
4.把光标移动到左边的屏
ctrl+w h
5.把光标移动到下一个的屏
ctrl+w w
移动分屏
1.向上移动
ctrl+w K
2.向下移动
ctrl+w J
3.向右移动
ctrl+w L
4.向左移动
ctrl+w H
屏幕尺寸
1.增加高度
ctrl+w +
2.减少高度
ctrl+w -
3.让所有屏的高度一致
ctrl+w =
命令模式
:new,新建文件并分屏, 快捷键,Ctrl+W,然后马上按n键
:spilt 水平分屏,将当前屏分为两个,水平的。 Ctrl + w, s
:vsplit 垂直分屏,将当前屏分为两个,垂直的。 Ctrl + w, v
:only 取消分屏,取消当前的屏,当前屏指的是光标所在屏。
Dell 服务器 网卡接口命名法转换
Linux系统一贯将以太网设备命名为ethX。一般第一个接口被命名为eth0,如果你仅有一个网络端口,这样毫无问题,但如果出现戴尔PowerEdge服务器的情况,四个以太网端口该怎么办?它们被命名为 eth0、eth1、eth2、eth3,分别对应机箱背面的标签 1、2、3、4。某些时候确实如此。除了从 0 开始,而不是从 1 开始导致的明显命名混乱外,还可能出现其他混乱情况,如每个端口在每次启用时可能无法获得相同的名称,此外它们的命名顺序可能是任意的。如果将网卡添加到PCI插槽,情况还会更糟,主板上的端口和新添加卡上的端口命名可能相互混杂。
Biosdevname这是 Dell 开发的工具,旨在为网络设备的命名理清思路(并且保持一致性)。Biosdevname 是一款udev帮助程序,可根据系统BIOS提供的信息对网络接口进行重命名。
新的命名规则如下:
em[1-N]表示主板(嵌入式)NIC(# 对应机箱标签)
pci<slot>#<port> 表示PCI插槽中的卡,端口 1 至 N
NPAR & SR-IOV设备增加后缀 _<vf>,从0至N,取决于各端口可用的分区或虚拟功能的数量。
其他Linux命名规则,如 .<vlan> 和 :<alias> 后缀,保持不变且仍然适用。
由此,Linux 网络接口名称与外部可见的网络端口(RJ-45 机架)之间建立了明确的对照。
在一些新的Linux发行版中已经默认启动该参数了,如果你不想使用emX表示法,也可以回退到ethX表示法的。参照以下步骤:
①修改grub中的内核引导参数,添加biosdevname=0
②修改网卡配置表示,centos系在/etc/sysconfig/network-scripts/ifcfg-ethX,debian系在/etc/network/interfaces中,emX修改为eth(X-1)
③清空udev中的net规则
④reboot机器,之后就会看到老的网卡命名方法
biosdevname命令的使用方法参考如下:
http://manpages.ubuntu.com/manpages/quantal/en/man1/biosdevname.1.html
manual手册加颜色
~/.bashrc
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
vim显示目录树
在vim如果查看目录结构,或者当前文件夹下面的文件,就需要从编辑模式跳到命令模式,运行如下命令:
!ls
觉得很不方便,如果想看上层的目录,或者上层下面的另外一个目录,需要多次进行上面的操作,但是如果你可以直接显示目录树该有多爽啊。
这就是本文要介绍的vim插件 - nerdtree
你可以从vim的网站下载到它:
http://www.vim.org/scripts/script.php?script_id=1658
下载后,解压到
~/.vim
目录,然后打开 ~/.vimrc文件,添加下面一行: //也可以不添加,在末行模式下输入":NERDTree" 就可以了!
nmap <silent> <c-n> :NERDTreeToggle<CR>
此时进入vim,然后ctrl + n就会在vim的左边打开目录树,其实使用了vim的切分窗口,你可以使用移动键,和回车键来切换到不同的目录和文件。如果想隐藏目录树,再按一次ctrl + n就可以。
参考
。。。
服务器序列号查询
利用 dmidecode | grep Serial 能够获得 PCSERVER 序列号信息.
SHELL脚本简单加密
gzexe test.sh
时间同步
0 0 * * * /usr/sbin/ntpdate -u ntp.api.bz > /dev/zero 2&>1
sort选择特定列排序
sort的-t选项和-k选项
如果有一个文件的内容是这样:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)
指定了间隔符之后,就可以用-k来指定列数了。
[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。
Linux大棚
在文件头部追加内容
sed -i '1i\Insert this line' file.txt
。。。。。。