更改linux的MAC地址
执行下列命令,重启后失效:
1 | /sbin/ifconfig eth0 down |
永久更改的方法:
1 | vi /etc/sysconfig/network-scripts/ifcfg-eth0 |
添加MACADDR=00:11:22:33:44:55
注释掉原来的HWADDR
.. _linux_chgrp_beginner:
.. code::
鸿鹄志、向炎天。
宋 刘克庄《贺新郎·杜子昕凯歌》
Linux的chgrp
命令用于变更文件或者目录所属的组group。
这里的变更不仅限于本人的组,只要用户属于的组,均可以使用chgrp
更改相应的权限而不是必须使用管理员权限。
很多权限的操作可以与chmod
来交叉。比如如果希望文件只有本组成员访问,可以通过chmod 770 file/directory
,此时就涉及到组的概念了。
官方定义为:
chgrp
- change group ownership
语法为:
1 | $ chgrp [OPTION]... GROUP FILE... |
常用的几个参数为:
--reference=RFILE
: 参考指定文件进行所属组更换
-R, --recursive
:递归处理,将某个目录的所有文件均更改用户组
最简单的使用为将文件file归属到组group,使用方法为:
1 | $ chgrp group file |
此时的file数组组group,file1属于组group1。
对于文件夹而言,就需要使用-R
参数来递归实现了,不然会报错的。
1 | $ chgrp -R group1 directory1 |
这个参数比较有趣,也比较高效,如果希望某个用户的组权限与另外一个文件一致,此时--reference
强势出现
1 | $ chgrp --reference=ref_file stage_file |
该命令执行后,stage_file的权限将与ref_file的组权限一样。
.. _linux_chown_beginner:
.. note::
常记溪亭日暮,沉醉不知归路。
李清照《如梦令》
Linux chown
命令用于设置文件所有者和文件关联组的命令。
官方的定义为:
chown - change file owner and group
Linux/Unix 的有个理念就是一切皆文件,而对于每个文件也是如chmod
所述,均拥有所有者。
此时就可以利用 chown
指定文件的拥有者或者指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。
不过需要注意的是 chown
需要超级用户 root 的权限才能执行此命令,或者使用sudo
也可以。
使用语法如下:
1 | $ chown [option] [user[:group]] file... |
其中user为新的文件拥有者的用户名或者ID,group为新的文件拥有者的用户组名或ID****。
并且可以通过--referenc=RFILE
选项来设定希望修改的文件和目录。
其他的选项可以为: :
-c
: 与-v
类似,不过只显示更改的信息-R
: 递归地处理指定的目录以及其子目录下的所有文件最简单的使用方式应该就是指定用户和用户组了,如下:
1 | $ ll |
上面的命令将把a指定为用户user1,组group1。注意user1和group1必须存在,不然会提示无效的用户或者组。
这个选项一般用在,希望把某个用户的文件共享到一个组,此时的方法如下:
1 | $ sudo chown :newgroup filename |
此时的用户所有者不变,而仅仅更改了文件所属组。
1 | $ sudo chown -c user1 a b c d |
从这个例子可以看出,对于-c和-v的区别,-v全部显示,而-c仅仅显示更新的部分。
1 | $ sudo chown -R user:group file directory |
此条命令将递归地将文件file和目录directory及其子目录的文件更新为user用户拥有,group组拥有。
Linux chown
命令用于设置文件所有者和文件关联组的命令。
官方的定义为:
chown - change file owner and group
Linux/Unix 的有个理念就是一切皆文件,而对于每个文件也是如chmod
所述,均拥有所有者。
此时就可以利用 chown
指定文件的拥有者或者指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。
不过需要注意的是 chown
需要超级用户 root 的权限才能执行此命令,或者使用sudo
也可以。
使用语法如下:
1 | $ chown [option] [user[:group]] file... |
其中user为新的文件拥有者的用户名或者ID,group为新的文件拥有者的用户组名或ID****。
并且可以通过--referenc=RFILE
选项来设定希望修改的文件和目录。
其他的选项可以为: :
-c
: 与-v
类似,不过只显示更改的信息-R
: 递归地处理指定的目录以及其子目录下的所有文件最简单的使用方式应该就是指定用户和用户组了,如下:
1 | $ ll |
上面的命令将把a指定为用户user1,组group1。注意user1和group1必须存在,不然会提示无效的用户或者组。
这个选项一般用在,希望把某个用户的文件共享到一个组,此时的方法如下:
1 | $ sudo chown :newgroup filename |
此时的用户所有者不变,而仅仅更改了文件所属组。
1 | $ sudo chown -c user1 a b c d |
从这个例子可以看出,对于-c和-v的区别,-v全部显示,而-c仅仅显示更新的部分。
1 | $ sudo chown -R user:group file directory |
此条命令将递归地将文件file和目录directory及其子目录的文件更新为user用户拥有,group组拥有。
如果有1个文件或文件夹的权限是你认为可以参考的,此时可以通过下面的命令直接指定,而不需要指定user:group这个参数了。如下两个命令效果一致:
1 | $ ll |
除了入门介绍的基本功能,今天再加点干货。
1 | dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct |
这个命令增加了一个选项叫做oflag=direct
,
oflag=direct
:确保数据直接写入磁盘,跳过系统缓存。这个命令将会输出写入速度。完成测试后,可以删除 testfile
文件。
首先写一个测试文件(可以使用上面的写入命令),然后执行以下读取命令:
1 | dd if=testfile of=/dev/null bs=1G count=1 iflag=direct |
同样的增加了iflag=direct
,可以加速:
iflag=direct
:直接读取数据,跳过系统缓存。这样可以得到硬盘的读取速度。
#######TODO
1 | # dd if=/dev/sda of=/dev/sdb conv=sync,noerror |
cbs=BYTES
convert BYTES bytes at a time
conv=CONVS
convert the file as per the comma separated symbol list
ibs=BYTES
read up to BYTES bytes at a time (default: 512)
iflag=FLAGS
read as per the comma separated symbol list
obs=BYTES
write BYTES bytes at a time (default: 512)
oflag=FLAGS
write as per the comma separated symbol list
seek=N skip N obs-sized blocks at start of output
skip=N skip N ibs-sized blocks at start of input
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer'
suppresses the final transfer statistics, 'progress' shows periodic transfer statistics
N and BYTES may be followed by the following multiplicative suffixes: c =1, w =2, b =512, kB =1000, K =1024,
MB =1000*1000, M =1024*1024, xM =M, GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
Each CONV symbol may be:
ascii from EBCDIC to ASCII
ebcdic from ASCII to EBCDIC
ibm from ASCII to alternate EBCDIC
block pad newline-terminated records with spaces to cbs-size
unblock
replace trailing spaces in cbs-size records with newline
lcase change upper case to lower case
ucase change lower case to upper case
sparse try to seek rather than write the output for NUL input blocks
swab swap every pair of input bytes
sync pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather
than NULs
excl fail if the output file already exists
nocreat
do not create the output file
notrunc
do not truncate the output file
noerror
continue after read errors
fdatasync
physically write output file data before finishing
fsync likewise, but also write metadata
Each FLAG symbol may be:
append append mode (makes sense only for output; conv=notrunc suggested)
direct use direct I/O for data
directory
fail unless a directory
dsync use synchronized I/O for data
sync likewise, but also for metadata
fullblock
accumulate full blocks of input (iflag only)
nonblock
use non-blocking I/O
noatime
do not update access time
nocache
Request to drop cache. See also oflag=sync
noctty do not assign controlling terminal from file
nofollow
do not follow symlinks
count_bytes
treat 'count=N' as a byte count (iflag only)
skip_bytes
treat 'skip=N' as a byte count (iflag only)
seek_bytes
treat 'seek=N' as a byte count (oflag only)
Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then re‐
sume copying.
进入Linux操作系统,打开命令行,执行如下命令:
1 | sudo fdisk -u -l |
可以查看所有磁盘上的所有分区的尺寸和布局情况。
-u,让start和end中数字的单位是512字节,也就是一个sector扇区的大小。
找一个U盘,安装UbuntuLive Cd系统。
U盘启动,进入盘上的Ubuntu系统,打开命令行,执行:
1 | sudo fdisk -u -l /dev/sda |
查看硬件的分区情况。
然后执行:
1 | dd bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sda of=/ghost.img |
这样,就可以把我需要的分区数据全部copy到ghost.img文件中。镜像制作完成了!
然后,我们就可以把U盘插到其他系统上,用U盘启动,进入UbuntuLiveCD,打开命令行,执行如下命令:
1 | dd if=/ghost.img of=/dev/sda |
完成后,拔掉U盘,启动计算机,就可以看到我们的Linux系统已经安装完毕了!
注意:不要直接在计算机上用本地磁盘启动系统后执行dd命令生成本地磁盘的镜像。而应该使用livecd启动计算机。因此计算机运行时会对系统盘产生大量写操作。 直接对运行中的系统盘生成的镜像,在恢复到其他硬盘上时,很可能会无法启动!
一样适用于非Linux操作系统, 在linux上用dd命令实现系统镜像备份和恢复,是不是很简单呢?
对于Windows系统,甚至Mac等等任意系统,其实都可以用dd命令实现系统镜像的备份和恢复。
因为,Linux的fdisk命令能够识别任意系统下的分区格式。fdisk并不关系分区上的文件系统,甚至有无文件系统都不关心。fdisk总是可以报告分区占用了哪些扇区。
dd命令也不关心磁盘的文件系统格式,它只是简单地按照要求从指定的位置,复制多少字节数据而已。
dd命令实现镜像备份和恢复,比Ghost软件简单和强大多了。使用ghost软件,依然需要用户进行复杂而危险的磁盘分区操作。
而使用fdisk和dd这两条命令,一切都免了!
可能我们需要备份的分区很大,使用dd命令生成的镜像文件也就很大。存储和传输这些镜像不太方便。 我们也可以使用压缩程序压缩生成的镜像文件。 这里,我选择使用gzip程序,配合dd命令一起使用。
gzip参数:
默认使用的是-6压缩级别。
要使用 dd 和 gzip 生成压缩的镜像文件,可以执行命令:
1 | # dd bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sda | gzip -6 > /ghost.img.gz |
还原时,可以执行下列命令: # gzip -dc /ghost.img.gz.gz | dd of=/dev/sda
提醒:
如果你把镜像恢复到另一台计算机上,你可能会发现你的网卡是eth1,而不是eth0。这是因为
/etc/udev/rules.d/70-persistent-net.rules 文件把你做镜像的计算机的网卡作为eth0登记了。
如果你的网络脚本对eth0进行了处理,而没有对eth1进行处理,那么不修改网络脚本,你可能就无法上网了。
也许你会希望在做镜像之前,先删除 /etc/udev/rules.d/70-persistent-net.rules 文件。这样你恢复镜像时,网卡的名字就是eth0。 就不会造成你在恢复后的计算机上无法上网的问题了。
输入!和你要重新执行的命令的前几个字母。
例如!ps,回车,就会执行最近历史命令中以“ps”开头的比如“ps aux | grep kernel”的命令。
1 | # !ps |
VNC是Linux上的一款非常优秀的远程控制工具软件,通常我们在Windows上面安装vnc客户端软件来远程访问Linux机器(Windows上常用的客户端RealVNC),要远程连接到Linux首先要确保Linux上面已经安装了VNC server,下面以CentOS 6为例来说明:
1 | [root@centos6 ~]# rpm -qa | grep vnc |
如果上面的几个rpm包已经存在,说明VNC server已经安装好了,接下来跳转步骤3启动vncserver就可以了,否则执行步骤2
1 | # yum install tigervnc |
第一次启动vncserver需要输入密码两次
1 | [root@centos6 mnt]# vncserver |
可以看到已经生成了一个desktop:centos6.xman.org:1
为了方便,可见将vncserver添加到开机启动的服务中,使用setup->System services
, 选择vncserver
保存即可
接下来在VNC客户端输入上面的desktop就可以连接上Linux的desktop,如果发现连接不上,有可能是下面两个原因导致的:
(1) 本地windows的hosts文件中没有配置远程Linux的hostname,解决方案也很简单,只需要将desktop的hostname替换为IP地址或者在本地windows的hosts文件中添加相应的hostname与IP的映射关系即可
(2) 是由于Linux的防火墙阻止了,这时我们可以选择关闭防火墙或者将VNC的服务端口加入到Linux防火墙的信任列表
1 | # /sbin/service iptables stop |
以前在fedora上都是使用163或者sohu的源,感觉速度很快,包也挺全的,但是在CentOS上就不能这么用了,忽然就碰到了EPEL,简直是柳暗花明又一村
呀,以前一直为CentOS的稳定而庆幸,为N多包要自己rpm而小失望,现在加上这个源一切都是向fedora的yum体验靠拢呀,赞(≧▽≦)/
企业版 Linux 附加软件包(以下简称 EPEL)是一个由特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。
EPEL 的软件包通常不会与企业版 Linux 官方源中的软件包发生冲突,或者互相替换文件。EPEL 项目与 Fedora 基本一致,包含完整的构建系统、升级管理器、镜像管理器等等。
创建一个文件/etc/yum.repos.d
:
1 |
|
添加以下内容
1 | [epel] |
当然,如果你的CentOS是5.X版本的就把上面的6改成5即可了。
1 | # yum update |
现在再试试以前不能安装的诸如ntfs-3g,ipython等等,赞
Linux split
命令用于将一个文件切分开,一般用于将大文件切分为多个小文件,方便数据传输、保持和校验等。
默认情况下将按照每1000行切割成一个小文件。
官方定义为:
split
- split a file into pieces
使用方法为:
1 | $ split [OPTION]... [INPUT [PREFIX]] |
常用的参数为:
-b, --bytes=SIZE
: 指定每多少字节切成一个小文件默认情况下,split
会将原来的大文件aa 切割成多个以x开头的小文件,可以看到其实为xaa,xab,一致到xaz,递增为xba以此类推。
1 | $ split aa |
可以使用-b
参数,切分为准确字节的文件,如下:
1 | $ split aa -b 1024000 |
这个参数直接跟在输入的文件后面即可,如下:
1 | $ split aa DAT |