纯粹按着鸟哥的书上的基本命令打一遍,不喜勿喷!
Chapter5.首次登录
一.基础命令:
1.显示时间和日期的命令:date
dzhwen@deng:~$ date 2014年 02月 23日 星期日 14:59:20 CST dzhwen@deng:~$ date +%Y/%m/%d 2014/02/23 dzhwen@deng:~$ date +%H:%M 14:59
2.显示日历:cal
dzhwen@deng:~$ cal 二月 2014 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
3.计算器:
dzhwen@deng:~$ bc
二.热键:
1.[Tab]按键:
a.[Tab] 接在一串命令的第一个命令的后面,则为“命令补全”;
b.[Tab] 接在一串命令的第二个命令以后时,则为“文件补全”;
2.[Ctrl]-c : 中止当前执行的程序
3.[Ctrl]-d:退出字符界面
4.man + 指令 :对于要查找指令的说明
5.数据同步写入磁盘:sync
二.重启,关机:
root@deng:~# shutdown -h now 立刻关机,其中now相当于时间为0的状态 root@deng:~# shutdown -h 17:00 系统在今天的17:00关机,如果在18:00才执行该命令,则隔天才关机 root@deng:~# shutdown -h +10 系统再过10分钟后自动关机 root@deng:~# shutdown -r now 系统立刻重启 root@deng:~# shutdown -r +30 'The system will reboot.' 再过30分钟系统会重启,并显示后面的消息给所有在线的用户
Chapter6.Linux的文件权限与目录配置
一.Linux文件属性
1.ls -al
root@deng:~# ls -al 总用量 72 drwx------ 12 root root 4096 11月 21 01:00 . drwxr-xr-x 23 root root 4096 10月 23 22:26 .. -rw------- 1 root root 2519 2月 23 15:18 .bash_history -rw-r--r-- 1 root root 3106 4月 19 2012 .bashrc drwx------ 3 root root 4096 10月 23 22:38 .cache drwx------ 5 root root 4096 10月 23 22:39 .config drwx------ 3 root root 4096 10月 23 23:01 .dbus drwx------ 2 root root 4096 11月 21 00:54 .gconf drwx------ 3 root root 4096 11月 21 01:00 .gnome2 drwx------ 2 root root 4096 10月 23 23:01 .gnome2_private drwx------ 2 root root 4096 10月 23 22:39 .gvfs drwxr-xr-x 3 root root 4096 10月 23 22:38 .local -rw-r--r-- 1 root root 140 4月 19 2012 .profile drwx------ 2 root root 4096 2月 23 16:30 .pulse -rw------- 1 root root 256 10月 23 22:28 .pulse-cookie drwxr-xr-x 2 root root 4096 11月 21 00:58 .vim -rw------- 1 root root 4013 11月 21 01:00 .viminfo -rw-r--r-- 1 root root 1265 10月 23 23:04 .vimrc
ls——list,显示文件的文件名与相关属性;参数“-al”则表示列出所有的文件详细的权限与属性。
r——可读;w——可写;x——可执行;
第二列表示有多少文件连接到此节点;第三列表示这个文件(或目录)的“所有者帐号”;第四列表示这个文件的所属用户组;第五列为这个文件的容量大小,单位为B
第六列为这个文件的创建文件爱你日期或最近修改日期;第七列为该文件名
2.修改文件属性与权限
chgrp:改变文件所属用户组
root@deng:~# chgrp 用户组 文件名
chown:改变文件所有者
root@deng:~# chown 帐号名称:组名 文件或目录
应用:当将某个文件复制给别的用户(同一或不同用户组)时,单纯的cp复制给人家,人家还是没有权限对其进行修改,这时需要对文件的所有者进行修改。
chmod:改变文件的权限
root@deng:~# chmod 数字(3位) 文件或目录 root@deng:~# chmod u=rwx,go=rx 文件名 root@deng:~# chmod a-x 文件名 (a——all,'-'指除去)
3.查看Linux版本
dzhwen@deng:~$ uname -r 3.8.0-29-generic #查看实际的内核版本 dzhwen@deng:~$ uname -a Linux deng 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux dzhwen@deng:~$ uname -m i686 dzhwen@deng:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.3 LTS Release: 12.04 Codename: precise
Chapter7.Linux文件与目录管理
1.目录的相关操作
. 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表“目前用户身份”所在的主文件夹
cd:切换目录 pwd [-p]:显示当前目录,加入-p代表显示正确的完整路径,不加入代表显示连接文件的数据显示 mkdir [-mp]:新建一个新的目录,加入-p参数,可以自行创建多层目录
# mkdir -m 711 test2 参数-m强制设置属性 rmdir [-p] 目录名称:删除一个空的目录
#rmdir test 若尚有内容,则无法删除
-p:连同上层“空的”目录也一起删除
注意:仅输入cd时,代表的是cd ~
2.文件和目录管理
a.查看文件与目录:ls
常用参数:
-a:全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-d : 仅列出目录本身,而不是列出目录内的文件数据
-l: 列出长数据串,包含文件的属性与权限等数据。
b.复制:cp [参数] 源文件 目标文件
常用参数:
-a : 相当于-pdr
-i : 若目标文件已经存在时,在覆盖时会先询问操作的进行。
-r : 递归持续复制,用于目录的复制行为。
c.移除文件或目录:rm [-fir] 文件或目录
参数:
-f : 就是force的意思,忽略不存在的文件,不会出现警告信息;
-i:互动模式,在删除前会询问用户是否操作;
-r:递归删除,最常用在目录的删除了。这是非常危险的操作!!
d.移动文件与目录,或更名:
mv [-fiu] source destination
或:mv [options] source1 source2 source3 .... directory
参数:
-f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i:若目标文件(destination)已经存在时,就会询问是否覆盖;
-u:若目标文件已经存在,且source比较新,才会更新。
3.取得路径的文件名与目录名称
dzhwen@deng:~$ basename ./python文件/Homework/Chapter5/5_5.py #文件名 5_5.py dzhwen@deng:~$ dirname ./python文件/Homework/Chapter5/5_5.py #目录名 ./python文件/Homework/Chapter5
4.文件内容查询
1 cat:由第一行开始显示文件内容 2 tac:从最后一行开始显示,可以看出tac是cat的倒写形式 3 nl:显示的时候,顺便输出行号 4 more:一页一页地显示内容 5 less:与more类似,但是比more更好的是,它可以往前翻页! 6 head:只看头几行 7 tail:只看结尾几行 8 od:以二进制的方式读取文件内容!
5.修改文件时间或创建新文件:touch [-acdmt] 文件
参数:
-a:仅修改访问时间;
-c:仅修改文件的时间,若该文件不存在则不创建新文件
-d:后面可以修改的日期而不用目前的时间,也可以使用--date=“日期或时间”;
-m:仅修改mtime;
-t:后面可以接欲修改的时间而不用目前的时间,格式为[YYMMDDhhmm]
6.文件默认权限:umask
注意:umask的分数是指“该默认值需要减掉的权限”
新建文件时:(--rw-rw-rw-) 新建目录时:(drwxrwxrwx)
dzhwen@deng:~$ umask 0002 dzhwen@deng:~$ sudo -i [sudo] password for dzhwen: root@deng:~# umask 0022
7.设置文件的隐藏属性:chattr;显示文件的隐藏属性:lsattr
Chapter8.Linux磁盘与文件系统管理
· 基本上Linux最主要的文件系统是Ext2,该文件系统内的信息主要有:
1.superblock:记录此文件系统的整体信息,包括inode/block 的总量,使用量,剩余量,以及文件系统的格式与相关信息等。
2.inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
3.block:实际记录文件的内容,若文件太大时,会占用多个block。
· Ext2文件系统的数据访问为索引式文件系统。
· 需要碎片整理的原因就是文件写入的block太过于离散了,此时文件读取的性能将会变得很差所致。这个时候可以通过碎片整理将同一个文件所属的blocks汇集在一起。
· Ext2文件系统主要有boot sector,superblock,inode bitmap,block bitmap,inode table,data block等六大部分。
· data block是用来放置文件内容数据地方,在Ext2文件系统中所支持的block大小有1KB,2KB及4KB三种而已。
· inode记录文件的属性/权限等数据,每个inode大小均固定为128bytes;每个文件都仅会占用一个inode而已;因此文件系统能够新建的文件数量与inode的数量有关。
· 文件的block记录文件的实际数据,目录的block则记录该目录下面文件名与其inode号码的对照表。
· 日志文件系统会多出一块记录区,随时记载文件系统的主要活动,可加快系统恢复时间。
· Linux文件系统为增加性能,会让主存储器作为大量的磁盘高速缓存;
· 实际连接(硬链接)只是多了一个文件名对该inode号码的连接而已。
· 符号链接就类似Windows的快捷方式功能。
· 磁盘的使用必需经过分区,格式化与挂载,分别惯用的命令为fdisk,mkfs和mount;
· 开机自动挂载可参考/etc/fstab的设置,设置完毕务必使用mount -a 测试语法正确否。
Chapter9.Linux磁盘与文件系统管理
· 压缩命令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘空间。压缩前与压缩后的文件所占用的磁盘空间比值,就可以称为“压缩比”。
· 压缩的好处是可以减少磁盘空间的浪费,在www网站也可以利用文件压缩技术进行数据的传送,好让网站带宽的可利用率上升。
· 压缩文件的扩展名大多是.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2。
· 常见的压缩命令有gzip与bzip2,其中bzip2压缩比gzip还要更好,建议使用bzip2。
· tar可以用来进行文件打包,并可支持gzip或bzip2的压缩。
· 压 缩:tar -jcv -f filename.tar.bz2 被压缩的文件或目录名称。
· 查 询:tar -jtv -f filename.tar.bz2 。
· 解压缩:tar -jxv -f filename.tar.bz2 -C 欲被解压缩的目录。
· dump 命令可备份文件系统或单一目录。
· dump 的备份若针对文件系统时,可进行0~9的level差异备份。其中level 0 为完整备份。
· restore 命令可还原被dump构建的备份文件。
· 要新建光盘刻录数据时,可通过mkisofs命令来构建。
· 可通过cdrecord 来写入CD或DVD刻录机。
· dd可备份完整的分区或磁盘,因为dd可读取磁盘的扇区表面数据。
· cpio 为相当优秀的备份命令,不过必须要搭配类似find命令来读入欲备份的文件名数据,才可进行备份操作。
Chapter10.vim程序编辑器
vim不用说了吧,功能强大的编辑器。问题还是要记的命令特别多,没办法,好好学。
Chapter11.认识与学习bash
1.由于内核在内存中受保护的块,因此我们必须要通过“Shell”将我们输入的命令与Kernel通信,好让Kernel可以控制硬件来正确无误地工作。
2.学习shell的原因主要有:命令行界面的shell在各大distribution都一样;远程管理时命令行界面速度较快;shell是管理Linux系统非常重要的一环,因为Linux内很多控制都是以shell编写的。
3.系统合法的shell均写在/etc/shells 文件中。
4.用户默认登录取得的shell记录于/etc/passwd 的最后一个字段。
5.type可以用来找到执行命令为何种类型。其中各种含义:file : 表示为外部命令;alias : 表示该命令为命令别名所设置的名称;builtin : 表示该命令为bash 内置的命令功能。
1 dzhwen@deng:~$ type ls 2 ls 是 `ls --color=auto' 的别名 3 dzhwen@deng:~$ type -t ls 4 alias 5 dzhwen@deng:~$ type -a ls 6 ls 是 `ls --color=auto' 的别名 7 ls 是 /bin/ls 8 dzhwen@deng:~$ type cd 9 cd 是 shell 内嵌
6.变量就是以一组文字或符号等来替换一些设置或者是一串保留的数据。变量主要有环境变量与自定义变量,或称为全局变量与局部变量。
7.用env查看环境变量与常见环境变量说明
dzhwen@deng:~$ env SSH_AGENT_PID=1973 GLADE_PIXMAP_PATH=: TERM=xterm SHELL=/bin/bash XDG_MENU_PREFIX=xfce- XDG_SESSION_COOKIE=bd0043ad08cbeac04bd685950000000a-1393769511.366101-937543318 WINDOWID=69206020 GNOME_KEYRING_CONTROL=/tmp/keyring-oOOnHB USER=dzhwen LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 GLADE_MODULE_PATH=: XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 SSH_AUTH_SOCK=/tmp/ssh-gYTDUbyf1934/agent.1934 SESSION_MANAGER=local/deng:@/tmp/.ICE-unix/1992,unix/deng:/tmp/.ICE-unix/1992 DEFAULTS_PATH=/usr/share/gconf/xubuntu.default.path XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games DESKTOP_SESSION=xubuntu QT_IM_MODULE=xim PWD=/home/dzhwen XMODIFIERS=@im=ibus GNOME_KEYRING_PID=1923 LANG=zh_CN.UTF-8 MANDATORY_PATH=/usr/share/gconf/xubuntu.mandatory.path UBUNTU_MENUPROXY=libappmenu.so GDMSESSION=xubuntu SHLVL=1 HOME=/home/dzhwen LANGUAGE=zh_CN:zh LOGNAME=dzhwen XDG_DATA_DIRS=/usr/share/xubuntu:/usr/local/share/:/usr/share/:/usr/share DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-E2PvMmVd6n,guid=3b8bc3a0f6b5a2e9db80a81200000047 LESSOPEN=| /usr/bin/lesspipe %s DISPLAY=:0.0 GLADE_CATALOG_PATH=: LIBGLADE_MODULE_PATH=: XDG_CURRENT_DESKTOP=XFCE GTK_IM_MODULE=ibus LESSCLOSE=/usr/bin/lesspipe %s %s COLORTERM=Terminal XAUTHORITY=/home/dzhwen/.Xauthority _=/usr/bin/env
8.仅用export 也会将所有的“环境变量”显示出来。
dzhwen@deng:~$ export declare -x COLORTERM="Terminal" declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-E2PvMmVd6n,guid=3b8bc3a0f6b5a2e9db80a81200000047" declare -x DEFAULTS_PATH="/usr/share/gconf/xubuntu.default.path" declare -x DESKTOP_SESSION="xubuntu" declare -x DISPLAY=":0.0" declare -x GDMSESSION="xubuntu" declare -x GLADE_CATALOG_PATH=":" declare -x GLADE_MODULE_PATH=":" declare -x GLADE_PIXMAP_PATH=":" declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-oOOnHB" declare -x GNOME_KEYRING_PID="1923" declare -x GTK_IM_MODULE="ibus" declare -x HOME="/home/dzhwen" declare -x LANG="zh_CN.UTF-8" declare -x LANGUAGE="zh_CN:zh" declare -x LESSCLOSE="/usr/bin/lesspipe %s %s" declare -x LESSOPEN="| /usr/bin/lesspipe %s" declare -x LIBGLADE_MODULE_PATH=":" declare -x LOGNAME="dzhwen" declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:" declare -x MANDATORY_PATH="/usr/share/gconf/xubuntu.mandatory.path" declare -x OLDPWD declare -x PATH="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" declare -x PWD="/home/dzhwen" declare -x QT_IM_MODULE="xim" declare -x SESSION_MANAGER="local/deng:@/tmp/.ICE-unix/1992,unix/deng:/tmp/.ICE-unix/1992" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AGENT_PID="1973" declare -x SSH_AUTH_SOCK="/tmp/ssh-gYTDUbyf1934/agent.1934" declare -x TERM="xterm" declare -x UBUNTU_MENUPROXY="libappmenu.so" declare -x USER="dzhwen" declare -x WINDOWID="69206020" declare -x XAUTHORITY="/home/dzhwen/.Xauthority" declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg" declare -x XDG_CURRENT_DESKTOP="XFCE" declare -x XDG_DATA_DIRS="/usr/share/xubuntu:/usr/local/share/:/usr/share/:/usr/share" declare -x XDG_MENU_PREFIX="xfce-" declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0" declare -x XDG_SESSION_COOKIE="bd0043ad08cbeac04bd685950000000a-1393769511.366101-937543318" declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0" declare -x XMODIFIERS="@im=ibus"
9.set可以查看目前bash环境下的所有输入变量。
10.$?也为变量,是前一个命令执行完毕后的回传码。在Linux回传码为0代表执行成功。
11.locale可用于查看语系数据。
dzhwen@deng:~$ locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
12.可用read 让用户由键盘输入变量的值。
dzhwen@deng:~$ read var Hello Bash! dzhwen@deng:~$ echo $var Hello Bash! dzhwen@deng:~$ read -p "Please input your name:" -t 30 named Please input your name:Deng Zhuowen dzhwen@deng:~$ echo $named Deng Zhuowen
13.ulimit 可用以限制用户使用系统的资源情况。
14.通配符及其含义:
* —— 代表0个到无穷多个任意字符。
?—— 代表一定有一个任意字符
[ ]——同样代表一定有一个在中括号内的字符(非任意字符)。例如[abcd]代表一定有一个字符,可能是a,b,c,d这四个任何一个。
[-]——若有减号在中括号内时,代表在编码顺序内的所有字符。例如[0-9]代表0到9之间的所有数字,因为数字的语系编码是连续的。
[^]——若中括号内的第一个字符为指数符号(^),那表示原向选择,例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思。
15.数据流重定向通过>,2>,<之类的符号将输出的信息转到其他文件或设备去。
16.连续命令的执行可通过;&& || 等符号来处理。
17.管道命令的重点是它仅会处理standard output,对于standard error output会予以忽略。管道命令必须要能够接收来自前一个命令的数据成为standard input 继续处理才行。
18.重点运用的管道命令,例子比较多的主要有:cut,grep,sort,wc,uniq,tee,tr,col,join,paste,expand,split,xargs等。
Chapter12.正则表达式与文件格式化处理
1.不随语系改变的特殊符号:
[:alnum:] —— 0-9,A-Z,a-z
[:alpha:] —— A-Z,a-z
[:blank:] —— 代表空格键与[Tab]按键
[:cntrl:] —— 代表键盘上面的控制按键,即包括CR,LF,Tab,Del 等。
[:digit:] —— 0-9
[:graph:] —— 除了空格符(空格键和[Tab]按键)外的其他所有按键
[:lower:] —— a-z
[:print:] —— 代表所有可以被打印出来的字符
[:punct:] —— 代表标点符号,即"'?!;:#$
[:upper:] —— A-Z
[:space:] —— 任何会产生空白的字符
[:xdigit:] —— 代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符。
2.grep与基础正则表达式
#以grep找出内含eth的那行 dzhwen@deng:~$ dmesg | grep 'eth' #要将找到的关键字显色,且加上行号来表示 dzhwen@deng:~$ dmesg | grep -n --color=auto 'eth' #在关键字所在行的前两行与后三行也一起找出来显示。 dzhwen@deng:~$ dmesg | grep -n -A3 -B2 --color=auto 'eth'
查找加显示行号:
dzhwen@deng:~$ grep -n 'the' regular_express.txt
反向选择:
dzhwen@deng:~$ grep -vn 'the' regular_express.txt
忽略大小写:
dzhwen@deng:~$ grep -in 'the' regular_express.txt
[ ]里面不论有几个字符,它都只代表某“一个”字符,如查找test或taste
dzhwen@deng:~$ grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! The soup taste good.
反向选择,比如不想oo前面不是小写字母
dzhwen@deng:~$ grep -n '[^a-z]oo' regular_express.txt 3:Football game is not use feet only.
dzhwen@deng:~$ grep -n '[0-9]' regular_express.txt 5:However, this dress is about $ 3183 dollars. 15:You are the best is mean you are the no. 1.
dzhwen@deng:~$ grep -n '[[:digit:]]' regular_express.txt 5:However, this dress is about $ 3183 dollars. 15:You are the best is mean you are the no. 1.
行首与行尾字符:^$
dzhwen@deng:~$ grep -n '^[[:lower:]]' regular_express.txt 2:apple is my favorite food. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 12:the symbol '*' is represented as start. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go. dzhwen@deng:~$ grep -n '.$' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 11:This window is clear. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword. 20:go! go! Let's go.
#不要空白行和以#开头的行 dzhwen@deng:~$ grep -v '^$' regular_express.txt | grep -v '^#' "Open Source" is a good mechanism to develop programs. apple is my favorite food. Football game is not use feet only. this dress doesn't fit me. However, this dress is about $ 3183 dollars. GNU is free air not free beer. Her hair is very beauty. I can't finish the test. Oh! The soup taste good. motorcycle is cheap than car. This window is clear. the symbol '*' is represented as start. Oh! My god! The gd software is a library for drafting programs. You are the best is mean you are the no. 1. The world <Happy> is the same with "glad". I like dog. google is the best tools for search keyword. goooooogle yes! go! go! Let's go.
注意: “.* ” 就代表零个或多个任意字符的意思
dzhwen@deng:~$ grep -n 'g.*g' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 14:The gd software is a library for drafting programs. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.
dzhwen@deng:~$ grep -n 'g*g' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 3:Football game is not use feet only. 9:Oh! The soup taste good. 13:Oh! My god! 14:The gd software is a library for drafting programs. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.
限定连续RE字符范围{}
因为{与}的符号在shell是有特殊意义的,因此,我们必须要使用转义字符来让它失去特殊意义才行。例子:我们要找出g后面接2到5个o,然后再接一个g的字符串。
dzhwen@deng:~$ grep -n 'go{2,5}g' regular_express.txt 18:google is the best tools for search keyword.
3.sed工具
d:删除,将第2-5行删除
dzhwen@deng:~$ nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh 8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh 9 mail:x:8:8:mail:/var/mail:/bin/sh 10 news:x:9:9:news:/var/spool/news:/bin/sh 11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 12 proxy:x:13:13:proxy:/bin:/bin/sh 13 www-data:x:33:33:www-data:/var/www:/bin/sh 14 backup:x:34:34:backup:/var/backups:/bin/sh 15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh 16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh 17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh 18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh 19 libuuid:x:100:101::/var/lib/libuuid:/bin/sh 20 syslog:x:101:103::/home/syslog:/bin/false 21 messagebus:x:102:105::/var/run/dbus:/bin/false 22 colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false 23 lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false 24 whoopsie:x:105:114::/nonexistent:/bin/false 25 avahi-autoipd:x:106:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false 26 avahi:x:107:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false 27 usbmux:x:108:46:usbmux daemon,,,:/home/usbmux:/bin/false 28 kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false 29 pulse:x:110:119:PulseAudio daemon,,,:/var/run/pulse:/bin/false 30 rtkit:x:111:122:RealtimeKit,,,:/proc:/bin/false 31 speech-dispatcher:x:112:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh 32 hplip:x:113:7:HPLIP system user,,,:/var/run/hplip:/bin/false 33 saned:x:114:123::/home/saned:/bin/false 34 dzhwen:x:1000:1000:Deng:/home/dzhwen:/bin/bash 35 guest-SgMGr3:x:115:125:Guest,,,:/tmp/guest-SgMGr3:/bin/bash 36 mysql:x:116:126:MySQL Server,,,:/nonexistent:/bin/false
a:新增。在第2行末尾添加“drink tea?”
dzhwen@deng:~$ nl /etc/passwd | sed '2a drink tea?' 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh drink tea? 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh 5 sync:x:4:65534:sync:/bin:/bin/sync
p:打印,也就是将某个选择的数据打印出来。通常p会与参数 sed -n 一起运行。
dzhwen@deng:~$ nl /etc/passwd | sed -n '5,7p' 5 sync:x:4:65534:sync:/bin:/bin/sync 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh
c:替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行。
dzhwen@deng:~$ nl /etc/passwd | sed '2,5c No 2-5 number' 1 root:x:0:0:root:/root:/bin/bash No 2-5 number 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh 8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh 9 mail:x:8:8:mail:/var/mail:/bin/sh 10 news:x:9:9:news:/var/spool/news:/bin/sh 11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 12 proxy:x:13:13:proxy:/bin:/bin/sh 13 www-data:x:33:33:www-data:/var/www:/bin/sh 14 backup:x:34:34:backup:/var/backups:/bin/sh 15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh 16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh 17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh 18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh 19 libuuid:x:100:101::/var/lib/libuuid:/bin/sh 20 syslog:x:101:103::/home/syslog:/bin/false 21 messagebus:x:102:105::/var/run/dbus:/bin/false 22 colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false 23 lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false 24 whoopsie:x:105:114::/nonexistent:/bin/false 25 avahi-autoipd:x:106:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false 26 avahi:x:107:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false 27 usbmux:x:108:46:usbmux daemon,,,:/home/usbmux:/bin/false 28 kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false 29 pulse:x:110:119:PulseAudio daemon,,,:/var/run/pulse:/bin/false 30 rtkit:x:111:122:RealtimeKit,,,:/proc:/bin/false 31 speech-dispatcher:x:112:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh 32 hplip:x:113:7:HPLIP system user,,,:/var/run/hplip:/bin/false 33 saned:x:114:123::/home/saned:/bin/false 34 dzhwen:x:1000:1000:Deng:/home/dzhwen:/bin/bash 35 guest-SgMGr3:x:115:125:Guest,,,:/tmp/guest-SgMGr3:/bin/bash 36 mysql:x:116:126:MySQL Server,,,:/nonexistent:/bin/false
s:替换,可以直接进行替换的工作。
sed 's/要被替换的字符串/新的字符串/g'
i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
4.扩展正则表达式
+ —— 意义:重复一个或一个以上的前一个RE字符
dzhwen@deng:~$ egrep -n 'go+d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 13:Oh! My god!
? —— 意义:零个或一个的前一个RE字符
dzhwen@deng:~$ egrep -n 'go?d' regular_express.txt 13:Oh! My god! 14:The gd software is a library for drafting programs.
| —— 意义:用或(or)的方式找出数个字符串。
dzhwen@deng:~$ egrep -n 'gd|good|dog' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 14:The gd software is a library for drafting programs. 17:I like dog.
( ) —— 意义:找出“组”字符串
dzhwen@deng:~$ egrep -n 'g(la|oo)d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 16:The world <Happy> is the same with "glad".
( ) —— 意义:多个重复组的判别
dzhwen@deng:~$ echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' AxyzxyzxyzxyzC
5.printf可以通过一些特殊符号来将数据进行格式化输出。
6.awk可以使用“字段”为依据,进行数据的重新整理与输出。
7.文件的比较中,可利用diff及cmp进行比较,其中diff主要用在纯文本文件方面的新旧版本比较。
8.patch命令可以将旧版数据更新到新版(主要由diff创建patch的补丁来源文件)。
Chapter13.学习shell script
1. shell script 程序的组成成分
(1).第一行#!/bin/bash 声明这个script使用的shell名称。
(2). 程序内容的说明
(3). 主要环境变量的声明
(4). 主要程序部分
(5).告知执行结果
2.关于输入输出:echo,read(后接 -p 代表后接提示字)
3.利用test命令的测试功能:
dzhwen@deng:~/scripts$ test -e /scripts && echo "exist" || echo "Not exist" Not exist dzhwen@deng:~/scripts$ test -e ~/scripts && echo "exist" || echo "Not exist" exist
4.利用判断符号[ ]
注意:在中括号[ ]内的每个组件都需要有空格键来分隔;在中括号内的变量,最好以双括号括号起来;在中括号内的常量,最好都以单或双引号括号起来。
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH read -p "Please input(Y/N) : " yn [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0 [ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0 echo "I don't know what your choice is" && exit 0
5.shell script 的默认变量
$# : 代表后接的参数“个数”;
$@:代表“$1","$2","$3","$4"之意,每个变量都是独立的(用双引号括起来);
$*:代表”$1c$2c$3c$4",其中c为分隔字符,默认为空格键。
6.shift:造成参数变量号码偏移
7.利用 if……then 的条件判断式
# 多个条件判断(if ... elif ... else)分多种不同情况执行 if [ 条件判断式一 ]; then 当条件判断式一成立时,可以进行的命令工作内容; elif [ 条件判断式二 ]; then 当条件判断式二成立时,可以进行的命令工作内容; else 当条件判断式一与二均不成立时,可以进行的命令工作内容; fi #提示判断结构的结束
8.利用case...esac 判断
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo "This program will print your selection !" case $1 in "one") echo "Your choice is ONE" ;; "two") echo "Your choice is TWO" ;; "three") echo "Your choice is THREE" ;; *) echo "Usage $0 {one|two|three}" ;; esac
dzhwen@deng:~/scripts$ sh sh12.sh two This program will print your selection ! Your choice is TWO dzhwen@deng:~/scripts$ sh sh12.sh three This program will print your selection ! Your choice is THREE dzhwen@deng:~/scripts$ sh sh12.sh four This program will print your selection ! Usage sh12.sh {one|two|three}
9.利用function功能
注意function的内置变量的意义。
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH function printit( ){ echo "Your choice is $1" #注意内置变量 } echo "This program will print your selection !" case $1 in "one") printit 1 ;; "two") printit 2 ;; "three") printit 3 ;; *) echo "Usage $0 {one|two|three}" ;; esac
10.循环
while [ condition ] <==中括号内的状态就是判断式 do <==do 是循环的开始 程序段落 done <==done 是循环的结束
until [ condition ] do 程序段落 done
for var in con1 con2 con3 ... do 程序段 done
for ( ( 初始值; 限制值; 执行步长 ) ) do 程序段 done
11.shell script 的追踪与调试
sh [-nvx] script.sh 参数: -n : 不要执行 script,仅查询语法的问题。 -v : 在执行 script 前,先将 script 的内容输出到屏幕上; -x : 将使用到的 script 内容显示到屏幕上,这是很有用的参数。
后面的暂时不写了,根本就没有机会用到。。。。。。