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 按两次切换