GNU bash

一、bash shell提示符:

===================

[root@station230 ~]# date

2012年 10月 24日 星期三 09:38:54 CST



[root@station230 ~]# whoami 

root

[root@station230 ~]# useradd jack

[root@station230 ~]# passwd jack

Changing password for user jack.

New UNIX password: 

BAD PASSWORD: it is WAY too short

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.


[root@station230 ~]# 


二、语法

=====================

命令    选项   参数

[root@station230 ~]# date

[root@station80 ~]# date +%F

[root@station230 ~]# date -s 12:30


命令:整条shell命令的主体

选项:会影响会微调命令的行为//通常以 -, --, +

参数: 命令作用的对象 


ls   查看一个目录下有什么文件,或者某一个文件是否存在

-a   all,查看目录下的所有文件,包括隐藏文件

-l   给出文件的长列表

-h   human 人性化方式显示出来   

-d   只列出目录名,不列出其他内容

-v   显示详细过程


[root@station230 ~]# ls -l install.log rhel5.repo 

-rw-r--r-- 1 root root 34793 10-23 13:49 install.log

-rw-r--r-- 1 root root   147 10-23 15:44 rhel5.repo


[root@station230 ~]# ls -l /home

总计 4

drwx------ 3 jack jack 4096 10-24 09:48 jack

[root@station230 ~]# 

[root@station230 ~]# ls -ld /home

drwxr-xr-x 3 root root 4096 10-24 09:42 /home


==================================================================

小知识:

***文件时间


ls -l 文件名 仅看的是文件的修改时间

Linux文件有三种时间:stat 例如:stat profile.d/

访问时间:atime,查看 内容

修改时间:mtime,修改 内容

改变时间:ctime,文件 属性,比如权限


[root@station230 ~]# ls -l install.log

-rw-r--r-- 1 root root 34793 10-23 13:49 install.log

[root@station230 ~]# 

[root@station230 ~]# stat install.log

  File: “install.log”

  Size: 34793           Blocks: 80         IO Block: 4096   一般文件

Device: 802h/2050d      Inode: 65282       Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2012-10-23 16:53:20.000000000 +0800

Modify: 2012-10-23 13:49:46.000000000 +0800

Change: 2012-10-23 13:49:52.000000000 +0800



***文件类型:

通过颜色判断文件的类型是完全错误的!!!

Linux文件是没有扩展名!!!

方法一:

ls -l 文件名    //看第一个字符

-普通文件(文本文件,二进制,电影,图片。。。)

d目录文件(蓝色)

b设备文件(块设备)存储设备硬盘,U盘

c设备文件(字符设备)打印机,终端/dev/tty1

s套接字文件

p管道文件

l链接文件(淡蓝色)


方法二:file

file /bin/ls

file /home

file /dev/sda

[root@station230 ~]# file /etc/grub.conf

/etc/grub.conf: symbolic link to `../boot/grub/grub.conf'

[root@station230 ~]# file /dev/tty1

/dev/tty1: character special (4/1)

[root@station230 ~]# file /dev/initctl

/dev/initctl: fifo (named pipe)

=================================================================


三、bash功能

1. 命令和文件自动补全<tab>  注意:Tab只能补全命令和文件

# ls /etc/sysconfig/network-scripts/

# ls /etc/sysconfig/network-scripts/ifcfg-eth0


# service network restart  这里面service是命令,能补全,其他的不行

# date -s 12:30


2. 快捷键

^c   终止前台运行的程序 或者 另起一行

^d   结束

^l   清屏 

^a   光标到命令行的最前端

^e   。。。。。。。。后端

^r   搜索历史命令,利用关键词



3. 历史命令

# history

a. 光标上下键

b. ^r (输入一段某条命令的关键字:必须是连续的)

c. !220

d. !字符串      如:!file  此命令执行的是file操作过的最后一条命令,它会先显示一下你所执行的命令

e. !$ 

   # ls /etc/sysconfig/network-scripts/

   # cd !$

   cd /etc/sysconfig/network-scripts/


4. 别名

# alias查看系统当前的别名

  ll='ls -l --color=tty'

# alias tianyun='ls /etc/sysconfig/network-scripts/'建立别名

# unalias  tianyun  取消tianyun这个别名

=============================================================

小知识:

shell查找命令顺序:

1. 以路径(绝对路径,相对路径)开始命令,例如:/bin/ls

2. 别名       

3. shell内置命令

4. $PATH


# which ls查看ls命令位置

alias ls='ls --color=tty'

        /bin/ls

type 查看命令的     

 type -a 命令       这个是查看命令的全部,别名或者所在目录

 type          这个是查看命令的优先级

[root@station230 ~]# type -a ls  比如 这个有两个ls 

ls is aliased to `ls --color=tty'

ls is /bin/ls

[root@station230 ~]# type ls     这个显示出别名优先于/bin/ls

ls is aliased to `ls --color=tty'

==============================================================


三、Linux获得帮助

1. 命令  --help,内部命令如echo 得 help echo

# ls --help

用法:ls [选项]... [文件]...

# date --help

Usage: date [OPTION]... [+FORMAT]

  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]



2. man ls

搜索:/-hn N


技巧一:Man手册是分章节,按章节来查找,常用的是1(命令用法),5(文本规范),8(系统管理命令)

/usr/bin/passwd命令,修改用户密码   man 1 passwd 

/etc/passwd保存用户信息的文件   man 5 passwd

/etc/exports man exports    man 5 exports


技巧二:按关键字检索

man -k "passwd"

man -k "_selinux"man ftpd_selinux

注:从whatis数据库里找(# makewhatis)


3. /usr/share/doc文档

例如:PAM

ls /usr/share/doc/pam-0.99.6.2/

firefox /usr/share/doc/pam-0.99.6.2/html/Linux-PAM_SAG.html



=========shell对文件进行管理==========

. 复制、创建、删除、移动、编辑、压缩、权限、查看、查找


一、Linux的目录结构

Windows: 以多根的方式组织文件  C:\   D:\   E:\

Linux:   以单根的方式组织文件  /


/目录结构:======

bin   普通用户使用的命令 /bin/ls

dev  设备文件 /dev/sda,/dev/tty1,dev/tty2,/dev/pts/1

home  普通用户家目录小区

lost+found  孤儿文件

proc  内存虚拟目录,反映出来的是内核,进程信息或实时状态  虚拟的文件系统

sbin    管理员使用的命令 

usr系统文件,相当于C:\Windows

boot  ***和启动相关的文件,例如kernel,grub

etc  ***配置文件

lib   库文件


==设备挂载目录==

media       移动设备默认的挂载点

mnt   手工挂载设备的挂载点

miscautomount进程挂载

netautomount进程挂载


root  root用户的HOME

tmp    临时文件   

var***存放的是一些变化文件,比如数据库,日志,邮件....


路径:==========

cd 

.链接到当前目录

..链接到上一级目录


绝对路径:从/开头的路径cd /home     cd ~alice


相对路径:相对于当前目录开始cd ..

[root@station80 ~]# pwd

/root

[root@station80 ~]# cd Desktop/

[root@station80 Desktop]# pwd

/root/Desktop



~当前用户的家目录

cd ~进入当前用户的家目录

# cd /usr/share/doc/


=======================================================

cd专用:

cd -返回上次目录

cd直接回家

=======================================================



文件管理之:创建/复制/移动/删除

==创建

文件  touch 文件            无则创建,有则修改时间

# touch file1.txt

# touch -t 1501010001 2018.rmvb 

修改文件时间 语法:

-t STAMP

              use [[CC]YY]MMDDhhmm[.ss] instead of current time

====================================================================

目录

# mkdir /home/dir2 /home/dir3

# mkdir /home/{dir4,dir5}

[root@station230 ~]# mkdir -v /home/{dir6,dir7}

mkdir: 已创建目录 “/home/dir6”

mkdir: 已创建目录 “/home/dir7”

# mkdir -p /home/dir8/111/222     包括其父母的创建


==复制

cp 源 目标

# cp install.log /home/dir1

# cp -r uplayer/ /home/dir1

[root@station230 ~]# cp install.log /home/dir2

[root@station230 ~]# cp my.jpg !$

cp my.jpg /home/dir2

[root@station230 ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 \     

> /etc/passwd /etc/grub.conf /etc/hosts . # 这里“\”是换行用的,而且cp命令后面的一个或者多个都是源,只有最后一个是目标(这里是  .  )

# cp -rf /etc/hosts{,.aa}

“/etc/hosts” -> “/etc/hosts.aa”

查看/etc会发现多出一个hosts.aa

hosts                  printcap        yum.conf

hosts.aa               profile         yum.repos.d


========================================================

小知识:root用户使用cp (默认有一个别名 alias cp='cp -i')也就是说有交互,总是询问,下面是几种方法

1. /bin/cp -rf my.jpg /home/dir2

2. # unalias cp                

   # cp -rf my.jpg /home/dir2  

   ###shell都是临时的,只对当前shell生效,重新打开,这个别名还是存在的,除非彻底修改配置文件

3. # \cp -rf install.log /home/dir2

========================================================


==移动

mv 源 目标

# mv file2 /home/dir3  将file2移动到/home/dir3里

# mv file4 file5        将file4重命名为file5,当前位置里的移动就是重命名


==删除 /home/dir1          

cd /home

rm -rf dir1        这种方法能够避免误删重要的目录,所以先到目录下,在去删除文件


-r 递归

-f force强制

-v 详细过程




==查看文件内容

文本文件

/etc/hosts

/etc/sysconfig/network

/etc/sysconfig/network-scripts/ifcfg-eth0

/etc/passwd

/etc/shadow 

/etc/group

/etc/grub.conf

/etc/resolv.conf

/var/log/messages//系统的主日志文件


cat     

-n  显示行号

-A  包括控制字符(换行符)linux $ Windows ^M$

dos2unix windows下的转换为linux的可读文件

unix2dos linux下的转换为windows的可读文件

例如

unix2dos file1

dos2unix file2


less    这个更好用些(n N 翻) q退出  less /etc/passwd

more

head -1  默认是10行,加“-1”是看第一行 , 加-23就看前23行      例如  head /etc/passwd    

tail -1  同上 

# tail -f /var/log/messages  动态看这个文件

# service network restart

# logger yangsheng


grep 针对文件内容进行过滤

grep 'root' /etc/passwd

grep --color 'root' /etc/passwd

grep --color '^root' /etc/passwd

grep --color '/bin/bash$' /etc/passwd


当忘了文件名,还忘了所在位置。。。

# grep -r 'station80' /etc/

# grep -ri 'Station80' /etc/




==二进制文件

# strings /bin/ls



===修改文件内容===

# cp -rf /boot/grub/grub.conf .

# cp -rf /etc/sysconfig/network-scripts/ifcfg-eth0 .


vi vim

命令模式:

a. 光标定位 hjkl  0 $ gg G  /string(n N 可以循环的)  快速定位到某一行  

           1.   末行模式下 :14    进入第14行         2.  命令模式下   3G  进入第三行

           

       b. 复制y     yy 3yy   ygg  yG

   删除d     dd 3dd  dgg  dG   (以行为单位)

           粘贴p


       x  删除后面的一个字符

                D  删除后面的一行

                u  撤销

                ^r  redo 再作一次

      r   可以用来修改一个字符

c. 进入其它模式    进入插入模式 

                            i进入后在光标前面开始输入      //**

                            o另起一行,光标到这行的开头  //**

                            A进入后到本行的末端                  //**

                            a 进入后在光标后面开始输入

        :      进入末行模式

v 进入可视模式

^v 进入可视块模式

R  进入替换模式


插入模式:^p


末行模式:

a. 保存退出 :w  写入保存   :q  退出    :wq  保存并退出      :w! 强制保存    :q! 不保存并退出       :wq!强制保存退出

b. 查找替换    :1,5 s/Note/yyy/  从1-5行的Note 替换为yyy   :5,$ s/Note/yyy/ $表示最后一行

                        :% s/to/uplooking/     :% s/to/uplooking/g       %表示所有行  g 表示没行的相应词都替换

                        :4,9 s/^#//  4-9行的以#开头的替换为空

   :% s#/dev/sda#/var/ccc#g


c. 设置环境     :set nu 设置行号      :set ic  不区分大小写

        :set nonu  取消设置行号     :set noic

d. 读入文件/写文件: :w/aaa.txt  当在原来的保存不了时,另存为aaa.txt  

                  :r/etc/hosts


永久的环境:

用户HOME(家目录):                       .vimrc可以vim .vimrc,在这里打上下面俩个命令,就可以让命令模式下都显示行号和不区分大小写

                      set ic

                      set nu


# vim -O /etc/hosts /etc/grub.conf

# vimdiff grub.conf /etc/grub.conf  ///将两个文件作对比       

# vimdiff grub.conf /etc/grub.conf   ^w 按两次切换