Linux02
--Linux02_01?操作系统及常用命令
GNU: GNU is Not Unix.
GPL: General Public License,通用公共许可证,版权
Copyright, Copyleft
开源协定
LGPL:lesser
GPLv2
GPLv3
Shell:
GUI: Graphic User Interface
Windows
X-Window
Gnome
KDE
Xface
CLI: Command Line Interface
sh
bash
csh
ksh
zsh
tcsh
Google:
linux filetype:pdf
linux site:ibm.com
google hack
IDE:集成开发环境
login:
用户名:用户ID
认证机制:Authentication,就是鉴别、确定是所声明的对象机制
授权:Authorization
审计:Audition (日志)
prompt,命令提示符:
命令:
magic number: 魔数
shebang
#!/bin/bash
# command options... arguments...(操作的对象)
选项:
短选项
长选项
参数:
list: ls
列出,列表
目录:文件,路径映射
路径:从指定起始点到目的地所经过位置
文件系统:file system
FHS:文件系统层次化
列出指定路径下的文件
目录:working directory, current directory
pwd: Printing Working directory
ls
-l:长格式
文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block)
c: 字符设备文件 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容发生了改变
改变:change,metadata,元数据(属性)
-h:做单位转换
-a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示父目录
-A
-d: 显示目录自身属性
drwxr-x--- 18 root root 4096 Jan 28 18:24 .
-i: index node, inode(显示索引节点号)
851969 drwxr-x--- 18 root root 4096 Jan 28 18:24 .
-r: 逆序显示
-R: 递归(recursive)显示
.:
anaconda-ks.cfg DOS install.log Unix
C exit install.log.syslog vms
Desktop grant Solaris
cd: change directory
家目录,主目录, home directory
cd ~USERNAME: 进入指定用户的家目录,不过只有root权限才可以进别人家目录
cd -:在当前目录和前一次所在的目录之间来回切换
[[email protected] ~]# cd ~oracle
[[email protected] oracle]# pwd
/home/oracle
[[email protected] oracle]# cd -
/root
[[email protected] ~]# cd -
/home/oracle
[[email protected] oracle]# cd -
/root
[[email protected] ~]#
命令类型:
内置命令(shell内置),内部,内建(当登录以后出现了命令提示符:#、$等,那么我们就进入了某个shell,shell也是一个应用程序,所以它也提供了自身识别的命令给用户使用:不需要配置环境变量)
[[email protected] ~]# type cd
cd is a shell builtin:shell内建命令
外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
[[email protected] ~]# type su
su is /bin/su
环境变量:命名的内存空间
变量赋值
NAME=Jerry
PATH: 使用冒号分隔的路径
O(1):衡量程序执行速度的一种标准而hash的O(1)的所以查询缓存的速度很快所以需要保存到缓存中
hash:缓存执行过命令的命中次数,存入到缓存中(键值对存在hash中)
[[email protected] ~]# hash
hits command
14 /bin/ls
6 /usr/bin/clear
--Linux02_02?操作系统及常见命令
type: 显示指定属于哪种类型
date:时间管理
Linux: rtc
硬件时钟:通过硬件级别的振荡器来为维护的时钟
[[email protected] ~]# hwclock
Wed 28 Jan 2015 07:25:47 PM PST -0.764336 seconds
[[email protected] ~]#
系统时钟:linux内核维护的系统时间,存在误差的,因为cpu执行出现问题
[[email protected] ~]# date
Wed Jan 28 19:20:35 PST 2015
获得命令的使用帮助:
内部命令:
help COMMAND
外部命令:
COMMAND --help
公共的查询方式——>命令手册:manual,既然是手册肯定是文件,而且是压缩文件
man COMMAND:显示命令的信息:
1.是否是内置shell中
2.名字
3.语法
4.可选参数
[[email protected] ~]# man cd
BASH_BUILTINS(1)
BASH_BUILTINS(1)
NAME...
[[email protected] ~]# man ls
LS(1) --表示是第一章节的ls命令 User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
whatis COMMAND:显示命令出现的章节
[[email protected] ~]# whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
[[email protected] ~]#
从而就可以指定查找的章节:
[[email protected] ~]# man 1 ls
man分章节:
1:用户命令(/bin, /usr/bin, /usr/local/bin):普通用户使用
2:系统调用
3:库用户
4:特殊文件(设备文件)
5:文件格式(配置文件的语法):某个命令对应的配置文件的语法
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin):管理员才可以用
<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组
MAN:
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:报告bug给谁的
EXAMPLES:使用示例
SEE ALSO:另外参照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后
n: 下一个
N:前一个
?KEYWORD:向前
n: 下一个
N:前一个
q: 退出
在线文档:
info COMMAND
文档:/usr/share/doc
apache, hadoop
练习:
使用date单独获取系统当前的年份、月份、日、小时、分钟、秒
hwclock
-w: 同步系统时间到硬件
-s: 通过读取硬件时间到系统
date和hwclock使用:
[[email protected] ~]# date 01282020.00--修改时间
Wed Jan 28 20:20:00 PST 2015
[[email protected] ~]# date +"date is %D"--打印时间
date is 01/28/15
[[email protected] ~]#
[[email protected] ~]# hwclock -w
[[email protected] ~]# hwclock
Wed Jan 28 20:22:39 2015 -0.449991 seconds
[[email protected] ~]# date
Wed Jan 28 20:22:45 PST 2015
[[email protected] ~]# hwclock -s
cal: calendar
[root[email protected] yum-3.2.22]# cal 10 2014
October 2014
Su Mo Tu We Th Fr Sa
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 29 30 31
练习:
1、echo是内部命令还是外部命令?
[[email protected] yum-3.2.22]# type echo
echo is a shell builtin
2、其作用?
[[email protected] yum-3.2.22]# date +"today is %A %n date is %D"
today is Wednesday
date is 01/28/15
[[email protected] yum-3.2.22]# echo -e "today is Tu \n date is 1/29" --》-e表示启动转义字符
today is Tu
date is 1/29
[[email protected] yum-3.2.22]# echo "today is Tu \n date is 1/29"
today is Tu \n date is 1/29
[[email protected] yum-3.2.22]# echo -n "today is Tu \n date is 1/29" --》 -n消除换行符
today is Tu \n date is 1/29[[email protected] yum-3.2.22]#
3、如何显示“The year is 2013. Today is 26.”为两行?
[[email protected] yum-3.2.22]# date +"today is %A %n date is %D"
today is Wednesday
date is 01/28/15
逃逸 就是转义符意思
练习:
1、printf是内部命令还是外部命令?
[[email protected] ~]# type printf
printf is a shell builtin
2、其作用?
[[email protected] yum-3.2.22]# printf "today is Tu \n date is 1/29\n"
today is Tu
date is 1/29
[[email protected] yum-3.2.22]# printf "today is Tu \n date is 1/29"
today is Tu
date is 1/29[[email protected] yum-3.2.22]#
所以上面printf和echo的区别是前个默认不换行
3、如何显示“The year is 2013. Today is 26.”为两行?
--Linux02_03?操作系统及常见命令
file命令及其用法。
[[email protected] ~]# file -i .
.: application/x-not-regular-file
[[email protected] ~]# file -s .
.: directory
[[email protected] ~]# file
Usage: file [-bcikLhnNsvz] [-f namefile] [-F separator] [-m magicfiles] file...
file -C -m magicfiles
Try `file --help‘ for more information.
[[email protected] ~]# file /dev/hdc
/dev/hdc: block special (22/0)
[[email protected] ~]# file -s /dev/hdc
/dev/hdc: ISO 9660 CD-ROM filesystem data ‘RHEL/5.5 x86_64 DVD ‘ (bootable)
[[email protected] ~]#
Windows: PE
Linux: ELF
文件系统:以分区为单位的,但是所有分区文件系统都必须是根文件下的
rootfs: 根文件系统
FHS:Linux遵循的目录标准(文件系统层级标准)
/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
[[email protected] ~]# ls /boot/
config-2.6.18-194.el5 symvers-2.6.18-194.el5.gz
grub System.map-2.6.18-194.el5
initrd-2.6.18-194.el5.img vmlinuz-2.6.18-194.el5
lost+found
(Linux中一切皆为文件,设备也是文件,入口)
/dev: 设备文件
设备文件:
块设备:随机访问,数据块
字符设备:线性访问,按字符为单位
设备号:主设备号(major)和次设备号(minor):
crw-rw---- 1 root tty 4, 37 Jan 28 02:13 tty37
/etc:配置文件
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录;
在生产环境里绝对不能随便使用root用户登录,因为它具有最够权限很容易错删除文件
/lib:库文件(就是已经写好的,可以供大家直接调用的)
/lib/modules:内核模块文件
静态库, .a
[[email protected] lib]# file libdevmapper.a
libdevmapper.a: symbolic link to `libdevmapper.a.1.02‘
动态库, .dll(window中), .so (shared object)
[[email protected] lib]# file libc-2.5.so
libc-2.5.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, not stripped
[[email protected] lib]#
动态静态区别:
静态库是静态编译的时候把库文件一并编译放在一起,所以在移植的时候
必须连同库一起移植。
动态库也叫共享库,就是一次编译多个程序共享。
为什么下面的两个文件都是可执行文件,而第一个不是executable?
[[email protected] lib]# file libc-2.5.so
libc-2.5.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, not stripped
[[email protected] lib]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
[[email protected] lib]#
因为:上面是库文件,库文件没有自主执行,只能通过被调用才可以
/lost+found :用于保存突然断电等特殊情况,用来保存文件怕被丢失的
/media:挂载点目录,移动设备
/mnt:挂载点目录,额外的临时文件系统
挂载点:设备被挂载在文件系统的某个目录下的那个点
挂在过程:就是某个设备假如需要访问就必须加载到当前的文件系统的某个目录下才可以访问
而这个过程就是挂载过程。
/opt:可选目录,第三方程序的安装目录现在放在/usr/local
/proc:伪文件系统,内核映射文件
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件, /var/tmp
/var:可变化的文件
这下面两个是系统在启动前所必须执行的、依赖的可执行文件和命令
/bin: 可执行文件, 用户命令
/sbin:管理命令
/usr:shared, read-only
下面是系统启动以后,为了完善系统的其他功能所提供的可执行文件和命令
/usr/bin
/usr/sbin
/usr/lib
/usr/local:用于第三方软件的安装路径,非关键性程序
/usr/local/bin
/usr/local/sbin
/usr/local/lib
命名规则:
1、长度不能超过255个字符;
2、不能使用/当文件名
3、严格区分大小写
相对路径:
绝对路径:
文件管理
目录管理
ls
cd
pwd
mkdir:创建空目录
-p:创建的父目录不存在就先创建父目录
-v: verbose显示执行详细信息
/root/x/y/z
/mnt/test/x/m,y
mkdir -pv /mnt/test/x/m /mnt/test/y
mkdir -pv /mnt/test/{x/m,y}
~USERNAME
命令行展开:
/mnt/test2/
a_b, a_c, d_b, d_c
(a+d)(b+c)=ab+ac+db+dc
{a,d}_{b,c}
[[email protected] ~]# mkdir -pv ./test/{a,b}_{c,d}
mkdir: created directory `./test‘
mkdir: created directory `./test/a_c‘
mkdir: created directory `./test/a_d‘
mkdir: created directory `./test/b_c‘
mkdir: created directory `./test/b_d‘
[[email protected] ~]# mkdir ./test/{a,b}/{c,d}
mkdir: created directory `/test/a‘
mkdir: created directory `/test/a/c‘
mkdir: created directory `/test/a/d‘
mkdir: created directory `/test/b‘
mkdir: created directory `/test/b/c‘
mkdir: created directory `/test/b/d‘
# tree:查看目录树
删除目录:rmdir (remove directory)
删除空目录
-p:只能删除一脉单传的目录:
[[email protected] test]# mkdir -p x/y/z
[[email protected] test]# tree
.
|-- a_c
|-- a_d
|-- b_c
|-- b_d
`-- x
`-- y
`-- z
7 directories, 0 files
[[email protected] test]# rmdir -p x/y/z
[[email protected] test]# tree
.
|-- a_c
|-- a_d
|-- b_c
`-- b_d
4 directories, 0 files
文件创建和删除
同名的文件或目录不能存在,window中也是如此,只是系统隐藏了文件格式
# touch:修改文件的时间戳
-a:改变访问时间
-m:改变修改时间
-t: 指定时间
-c:创建文件
[[email protected] ~]# stat test/
File: `test/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 852122 Links: 6
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-01-28 23:55:59.000000000 -0800
Modify: 2015-01-28 23:55:59.000000000 -0800
Change: 2015-01-28 23:55:59.000000000 -0800
[[email protected] ~]# date
Wed Jan 28 23:56:12 PST 2015
[[email protected] ~]# touch -m -t 201212121212 test/
[[email protected] ~]# stat test/
File: `test/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 852122 Links: 6
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-01-28 23:55:59.000000000 -0800
Modify: 2012-12-12 12:12:00.000000000 -0800
Change: 2015-01-28 23:57:24.000000000 -0800
[[email protected] ~]# touch -a test/
[[email protected] ~]# stat test/
File: `test/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 852122 Links: 6
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-01-28 23:58:19.000000000 -0800
Modify: 2012-12-12 12:12:00.000000000 -0800
Change: 2015-01-28 23:58:19.000000000 -0800
[[email protected] ~]#
# stat
创建文件,可以使用文件编辑器
ASCII:
128不同的字符:
二进制:
2^6=0,63
2^7=0,127
000 0000 - 111 1111
ASCII:
0000 1001: t
2^16: 65536
标准:GB18030, GBK, GB2312,Unicode
0000 1001 0000 1110:上, 卫
nano:文本编辑器
删除文件:rm
-i
-f
-r
rm -rf /
[[email protected] ~]# type rm
rm is aliased to `rm -i‘-->代表rm是别名:rm -i
[[email protected] ~]# rm -i te
rm: remove regular empty file `te‘? y
[[email protected] ~]# touch te1 te2
[[email protected] ~]# ls
C Desktop Unix exit install.log te1 test
DOS Solaris anaconda-ks.cfg grant install.log.syslog te2 vms
[[email protected] ~]# \ls
C Desktop Unix exit install.log te1 test
DOS Solaris anaconda-ks.cfg grant install.log.syslog te2 vms
[[email protected] ~]# type ls
ls is aliased to `ls --color=tty‘-->也是别名命令,表示给相应的文件带上颜色;这个别名命令相对于普通用户没有的
[[email protected] ~]# rm -rf test-->删除递归删除文件,并且强制删除
[[email protected] ~]#
--Linux02_04?操作系统及常见命令
练习:
1、创建目录
(1)在/mnt下创建boot和sysroot;
(2)在/mnt/boot下创建grub;
(3)在/mnt/sysroot下创建proc, sys, bin, sbin, lib, usr, var, etc, dev, home, root, tmp
a)在/mnt/sysroot/usr下创建bin, sbin, lib
b)在/mnt/sysroot/lib下创建modules
c)在/mnt/sysroot/var下创建run, log, lock
d)在/mnt/sysroot/etc下创建init.d
复制和移动文件
cp: copy
默认是cp -L 表示默认复制链接所指向的文件
cp SRC(可以有多个) DEST(只有一个)
-r:递归式
-i:交互式
-f:强行式
-d:复制链接
[[email protected] ~]# cp -d /etc/rc test_cp/test
[[email protected] ~]# ls -l test_cp/
total 0
lrwxrwxrwx 1 root root 7 Jan 29 01:27 test -> rc.d/rc
[[email protected] ~]#
-p:保留属组 -p same as --preserve=mode,ownership,timestamps
-a:归档复制,常用于备份
-a, --archive
same as -dR --preserve=all
-d same as --no-dereference --preserve=link
-P, --no-dereference never follow symbolic links:表示复制链接,而不复制链接所指向的文件
--preserve=link:保存链接
--preserve=all:保留属组所有属性
-R:递归式
[[email protected] test_cp]# cp /etc/init.d/ test1
cp: omitting directory `/etc/init.d/‘
[[email protected] test_cp]# cp -r /etc/init.d/ test1-->上面表示复制目录需要递归
[[email protected] test_cp]# cp /etc/init.d/acpid /etc/init.d/atd test1-->重命名所复制的文件名
cp: overwrite `test1/acpid‘? n
cp: overwrite `test1/atd‘? n
[[email protected] test_cp]# cp /etc/init.d/acpid /etc/init.d/atd test2-->假如复制多个文件,那么目标必须是目录
cp: target `test2‘ is not a directory
cp file1 file2 file3
一个文件到一个文件
多个文件到一个目录
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
mv: move
移动文件
mv SRC DEST
mv -t DEST SRC
[[email protected] test_cp]# mv test2/installActions2014-12-20_09-55-25PM.log ../test_cp/
[[email protected] test_cp]# ls
installActions2014-12-20_09-55-25PM.log test2
[[email protected] test_cp]# mv installActions2014-12-20_09-55-25PM.log installActions-->重命名
[[email protected] test_cp]# ls
installActions test2
[[email protected] test_cp]# mv test2/ installActions -->不能使用一个目录去覆盖一个文件
mv: cannot overwrite non-directory `installActions‘ with directory `test2/‘
[[email protected] test_cp]# mv ora installActions -->覆盖文件,但目录之间不存在覆盖
mv: overwrite `installActions‘? y
[[email protected] test_cp]#
install
-d DIRECOTRY ... :创建目录
SRC(文件,不能是目录) DEST
install -t DIRECTORY SRC...(文件,不能是目录)
[[email protected] test_cp]# install -d dir-->建立目录相当于mkdir
[[email protected] test_cp]# ls
dir installActions test2
[[email protected] test_cp]# install dir/ test2/-->install不存在复制目录
install: omitting directory `dir/‘
[[email protected] test_cp]# install installActions test2/
[[email protected] test_cp]# ls -l test2/
total 4
-rwxr-xr-x 1 root root 0 Jan 29 06:16 installActions-->复制文件默认是rwxr-xr-x
-rw-r----- 1 root root 117 Jan 29 01:42 oraInstall2014-12-20_09-55-25PM.out
[[email protected] test_cp]# install -o oracle -m -rw-rw-rw test2/oraInstall2014-12-20_09-55-25PM.out ./
[[email protected] test_cp]# ls -l
total 12
drwxr-xr-x 2 root root 4096 Jan 29 06:15 dir
-rw-r----- 1 root root 0 Jan 29 01:42 installActions
---------- 1 oracle root 117 Jan 29 06:18 oraInstall2014-12-20_09-55-25PM.out
drwxr-x--- 2 root root 4096 Jan 29 06:16 test2
[[email protected] test_cp]#