首页 > 代码库 > 文件管理命令详解

文件管理命令详解

Linux03

Linux03_01?文件管理命令详解

作业1:
1、创建目录/backup
# mkdir -v /backup
2、复制目录/etc至/backup目录中,并重命名为“etc-当前日期”,如etc-2013-02-26;要求保留文件原来的属性,保持链接文件;
cp
     -r
     -p
     -d
# cp -a /etc /backup/etc-2013-02-28

命令替换
    
3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行;
# cp /etc/inittab  /tmp/inittab.new
# nano /tmp/inittab.new

作业2:
1、思考:ls命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小?
[root@localhost ~]# ls -lh
total 64K
-rw------- 1 root root  885 Dec 21 03:15 anaconda-ks.cfg
-rw-r--r-- 1 root root    0 Jan 28 18:22 C
drwxr-xr-x 2 root root 4.0K Jan  7 18:12 Desktop
2、通过帮助手册,学习使用du命令;
# du
     -s:展现目录总的大小
     -h:展现每个目录带有单位的大小
[root@localhost ~]# du -s test_cp/
20     test_cp/
[root@localhost ~]# du -h test_cp/
8.0K     test_cp/test2
4.0K     test_cp/dir
20K     test_cp/

3、通过帮助,学习read命令;
变量:内存空间,有名称
变量赋值:

变量替换

作业3:
描述GPL, BSD, Apache三个开源协定的大体联系及区别。

自由软件
开源协定,版权描述


作业4:
1、如何获取Linux当前最新的内核版本号?
     www.kernel.org
2、列出你所了解的Linux发行版,并说明其跟Linux内核的关系。
     Linux, GNU: GNU/Linux, 源代码
    
     发行版:Fedora, RedHat(CentOS), SUSE, Debian(Ubuntu, Mint), Gentoo, LFS(Linux From Scratch)
    
C, Tom, AMD, Jerry,
编译:就是把程序在特定硬件环境下,进行编译成二进制,所以与硬件相关
RedHat: 通用格式:就是在第版本的cpu下编译,而在高版本的cpu下安装运行

奔腾:


运行程序
设备管理
软件管理
进程管理
网络管理


目录管理:
ls、cd、pwd、mkdir、rmdir、tree

文件管理:
touch、stat、file、rm、cp、mv、nano

日期时间:
date、clock、hwclock、cal

查看文本:
cat、tac(反向显示)、more、less、head、tail

cat:连接并显示
     -n:显示行号
     -E:显示Linux系统中文本文件每行的行结束符为$符,而在window中为$符+回车/换行符(假如把Linux中文本复制到window中并不会换行)
[root@localhost ~]# cat -n -E /etc/issue /etc/fstab
     1     Red Hat Enterprise Linux Server release 5.5 (Tikanga)$
     2     Kernel \r on an \m$
     3     $
     4     LABEL=/ ...$-->这个属于fsttab中内容,所以连接两个文件的内容一起显示
    
Ctrl+c

分屏显示:
more、less

more: 向后翻,翻到最后退出
less: 支持man的操作,翻到最后不退出

head:查看前n行
tail:查看后n行
     -n :显示多少行
    
tail -f: 查看文件尾部,不退出,等待显示其他进程在后续追加至此文件的新内容;

[root@localhost ~]# cut -d : -f1-3 /etc/passwd
root:x:0
bin:x:1

Linux03_02? bash命令详解

文本处理:
cut(剪切)、join(联合)、sed、awk

database:数据库

关系型数据库:
表:二维表

文本文件:
Tom:23:male:2013/05/06

cut:
     -d: 指定字段分隔符,默认是空格
     -f: 指定要显示的字段
          -f 1,3:离散表示法
          -f 1-3:连续表示法
     -s, --only-delimited
              do not print lines not containing delimiters
              表示不打印不包含的行
文本排序:sort:默认是使用字符排序
     -n:数值排序
     -r: 降序
     -t: 字段分隔符
       -t, --field-separator=SEP
              use SEP instead of non-blank to blank  tran-
              sition-->指定字符分割符
     -k: 以哪个字段为关键字进行排序
     -k, --key=POS1[,POS2]
              start  a key at POS1, end it at POS2 (origin)
     -u: 排序后相同的行只显示一次
     -f: 排序时忽略字符大小写
     [root@localhost test_cp]# sort -t : -k 3 /etc/passwd
          root:x:0:0:root:/root:/bin/bash
          avahi-autoipd:x:100:101:avahi-autoipd:/
          uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
          operator:x:11:0:operator:/root:/sbin/nologin

uniq: 重复是指相邻的重复的行,只显示一次,而对于不相邻的则不视为重复
     -c: 显示文件中行重复的次数
     -d: 只显示重复的行
               [root@localhost test_cp]# cat test.sort
               12
               12
               43
               523
               123
               12
               525
               [root@localhost test_cp]# uniq -c test.sort
                     2 12
                     1 43
                     1 523
                     1 123
                     1 12
                     1 525
               [root@localhost test_cp]# uniq -d test.sort
               12
               [root@localhost test_cp]#
文本统计:wc (word count)
     -l:行
     -w:单词数
     -c字节数
     -L:最长的一行包含多少个字符
[root@localhost test_cp]# wc /etc/fstab
  7    42      532   /etc/fstab
  行  字符数 字节数
字符处理命令:tr —— 转换或删除字符
tr [OPTION]... SET1 [SET2]
     -d: 删除出现在字符集中的所有字符
               [root@localhost test_cp]# tr ‘a-z‘ ‘A-Z‘ <  oraInstall2014-12-20_09-55-25PM.out
               YOU CAN FIND THE LOG OF THIS INSTALL SESSION AT:
               /U01/APP/ORAINVENTORY/LOGS/INSTALLACTIONS2014-12-20_09-55-25PM.LOG
               [root@localhost test_cp]# 上面是通过<重定向文件,tr本身并不能跟文件
               [root@localhost test_cp]# tr ‘abc‘ ‘ABC‘
               aaa
               AAA
               bad
               BAd
              
               [root@localhost test_cp]# tr -d ‘abc‘
               aa
              
               abbafa
               f
              
               [root@localhost test_cp]#

bash及其特性:
shell:shell在用户登录以后启动,shell也是可执行程序;退出就终止了
shell: 外壳
GUI:Gnome, KDE, Xfce
CLI: sh, csh, ksh, bash, tcsh, zsh-->可以相互嵌套

root, student
程序:进程

进程:在每个进程看来,当前主机上只存在内核和当前进程
进程是程序的副本,进程是程序执行实例

用户工作环境:
bash:
     #
     $
    
     tom, jerry
    
shell,子shell
[root@localhost test_cp]# pstree
|-sshd-+-sshd---bash---pstree               <<--
     |      `-sshd---bash---man---sh---sh---less
     |-syslogd
     |-twm
     |-udevd
     |-vino-server
     |-vmtoolsd
     |-vmtoolsd---{vmtoolsd}
     |-2*[vncconfig]
     |-xfs
     |-2*[xterm---bash]
     `-yum-updatesd
[root@localhost test_cp]# bash -->子shell
[root@localhost test_cp]# bash -->子shell的子shell
[root@localhost test_cp]# pstree
|-sshd-+-sshd---bash---bash---bash---pstree     <<--
     |      `-sshd---bash---man---sh---sh---less
     |-syslogd
     |-twm
[root@localhost ~]# bash
[root@localhost ~]# csh
[root@localhost ~]# ksh
# export LANG=en
# pstree
     |-udevd
     |-vino-server
     |-vmtoolsd
     |-vmtoolsd---{vmtoolsd}
     |-2*[vncconfig]
     |-xfs
     |-2*[xterm---bash]
     `-yum-updatesd
     |-sshd---sshd---bash---bash---csh---ksh---pstree <--shell的嵌套
     |-syslogd
     |-twm
     |-udevd
     |-vino-server
     |-vmtoolsd
     |-vmtoolsd---{vmtoolsd}
     |-2*[vncconfig]
     |-xfs
     |-2*[xterm---bash]
     `-yum-updatesd



bash: shell允许用户对其进行装饰
1、命令历史、命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程

命令行编辑:
光标跳转:
     Ctrl+a:跳到命令行首
     Ctrl+e:跳到命令行尾
     Ctrl+u: 删除光标至命令行首的内容
     Ctrl+k: 删除光标至命令行尾的内容
     Ctrl+l: 清屏
     Ctrl+ < > :光标跳过单词
命令历史:默认会保存在家目录中的.bash_history 文件中
查看命令历史:history
     -c:清空命令历史
     -d OFFSET [n]: 删除指定位置的命令
     -w:保存命令历史至历史文件中
    
环境变量
PATH:命令搜索路径
HISTSIZE: 命令历史缓冲区大小
[root@localhost ~]# echo $H
$HISTCMD       $HISTFILESIZE  $HOME          $HOSTTYPE
$HISTFILE      $HISTSIZE      $HOSTNAME     
[root@localhost ~]# echo $HISTFILESIZE
1000

命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
按Esc后松开再按 .
Alt+.    
上面两个是获取上个命令中的参数

命令补全:Tab Tab,Tab
     PATH:在PATH路径中搜索补全的
路径补全:从你打头的路径下搜索

Linux03_03? bash命令详解

文本相关的命令
查看:cat, tac, more, less, head, tail
统计:wc
处理:tr, cut, join
排序:sort
uniq

bash特性:
命令行编辑:
命令历史:
     history
          -c
          -w
          -d:删除某个记录
     HISTSIZE
     ~/.bash_history

!n, !-n, !!, !string, !$

命令补全,路径补全
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;


命令别名
alias CMDALIAS=‘COMMAND [options] [arguments]‘-->假如定义中有空格需要引起来‘‘
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
alias:本身是shell的内置命令,单独敲alias为显示所有别名命令

ualias CMDALIAS:取消命令别名

\CMD:在shell中不适用别名效果  \ls


命令替换: $(COMMAND),
[root@localhost test_cp]# echo ‘this direcotry is $(pwd)‘
this direcotry is $(pwd)
[root@localhost test_cp]# echo "this direcotry is $(pwd)"
this direcotry is /root/test_cp
反引号:`COMMAND`
[root@localhost test_cp]# echo "this directory is `(pwd)`"
this directory is /root/test_cp

把命令中某个子命令替换为其执行结果的过程
[root@localhost test_cp]# touch ./file-$(date +%F-%H-%M-%S).txt
[root@localhost test_cp]# ls
dir
file-2015-01-29-23-32-52.txt


bash支持的引号:
``: 命令替换
"": 弱引用,可以实现变量替换
‘‘: 强引用,不完成变量替换


文件名通配, globbing
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
     [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
     [:space:]:空白字符集合
     [:punct:]:标点符号集合
     [:lower:]:小写字母集合
     [:upper:]: 大写字母集合
     [:alpha:]: 大小写字母集合
     [:digit:]: 数字集合
     [:alnum:]: 数字和大小写字母集合
    
# man 7 glob -->查看通配
[^]: 匹配指定范围之外的任意单个字符
匹配字母开头结尾中间有空白字符如下:
[[:alpha:]]*[[:space:]]*[^[:alpha:]]


练习:
1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;
2、显示所有以a或m开头的文件;
ls [am]*
3、显示所有文件名中包含了数字的文件;
ls *[0-9]*
ls *[[:digit:]]*
4、显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9]   ?????????
5、显示文件名中包含了非字母或数字的特殊符号的文件;
ls *[^[:alnum:]]*

Linux03_04? Linux用户和权限详解

用户、组、权限
明确:进程是操作计算的代理,所以进程一定是以发起该进程的用户的身份在运行
所以是否可以访问某个文件取决于该进程发起者所具有的权限和该文件所需要的权限而决定的。
这个过程的判断当然是由资源安全管理机制来完成的(内核
安全上下文(secure context):

权限:
r, w, x

文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;

目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建文件;对于修改文件取决于文件自身
x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;

默认应该让文件不具有可执行文件,而对于目录就应该有可执行能力(假如文件默认可以执行,假如写了恶意的命令则会出现恶劣后果)


rwx:
     r--:只读
     r-x:读和执行
     ---:无权限
    
0 000 ---:无权限
1 001 --x: 执行
2 010 -w-: 写
3 011 -wx: 写和执行
4 100 r--: 只读
5 101 r-x: 读和执行
6 110 rw-: 读写
7 111 rwx: 读写执行

755:rwxr-xr-x

rw-r-----: 640

660:rw-rw----
rwxrwxr-x:775


User Identify用户:UID, /etc/passwd
oracle:x:501:501:(一般为空的,这里就是):/home/oracle:/bin/bash
用户名:密码:用户ID: 组ID:用户详细信息: 用户工作目录:所使用的shell
Group Identify用户组:GID, /etc/group
dba:x:502:oracle,monkey
组名:密码:组ID:组成员

影子口令:
用户:/etc/shadow
组:/etc/gshadow

用户类别:
管理员:0
普通用户: 1-65535
     系统用户:1-499
          (之所以会出现系统用户是因为:在系统启动时,用户还未登录就已经在后台跑起来许多系统进程,
          而进程是否可以访问资源取决于进程所属的用户所拥有的权限和资源所需要的权限,
          那么系统的某些进程该属于哪个用户的呢?假如你说属于root显然不合适,
          因为root权限太大对于这样的进程没有办法去控制而且危险性很强,
          所以为了维护这种访问资源的机制就创建了一些不需要登录的系统用户来管理这些系统进程
          :例如web服务器进程,需要创建系统进程来维护这个进程)
     一般用户:500-60000

对于组本身  用户组类别:
                    管理员组:
                    普通组:
                         系统组:
                         一般组:
    
对于用户     用户组类别:
                    私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
                    基本组:用户的默认组
                    附加组,额外组:默认组以外的其它组
    
安全上下文:我系统中每个进程,都是从可执行文件被执行而被运行起来的
               因此每个文件被执行都先被用户进程访问再执行的,因此是通过用户进程
               所具有的权限和所被执行的文件所需要的权限来判断是否执行而运行该进程
               当进程运行起来以后,以后该进程所具有的权限跟文件没有关系
               而跟发起该进程的用户所具有的权限有关系。
进程:tom tom
对象:rwxrw-r--  jerry tom a.txt

tom: ls
rwxr-xr-x root root /bin/ls

ls

/etc/passwd
account: 登录名
password: 密码
UID:
GID:基本组ID
comment: 注释
HOME DIR:家目录
SHELL:用户的默认shell

安全shell:
[root@localhost test_cp]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/usr/bin/ksh
/usr/bin/pdksh

/etc/shadow
lvyongwen:$1$DxJ53wWP$3ZpbWEjFJMgqzMMFgECOQ.:16425:0:99999:7:::
         -md5- -杂质-- -----密码加密结果---
$之间的表示:使用了md5加密方式,其中掺杂了8个字符的杂质,最后才是密码+杂质加密的结果
-------------------------------------------------------
nobody:*:16425:0:99999:7:::
nscd:!!:16425:0:99999:7:::
If the password field contains some string that is not
valid result of crypt(3), for instance ! or *, the user
will not be able to use a unix password to log in, subject
to pam(7).
上面的表示要想锁定用户可以把password改为*/!就可以了
-------------------------------------------------------------
[root@localhost test_cp]# which useradd
/usr/sbin/useradd
[root@localhost test_cp]# ls -l useradd -->列出的是文件,所以只在当前目录下查找
ls: useradd: No such file or directory
[root@localhost test_cp]# ls -l `which useradd`
-rwxr-x--- 1 root root 79288 Nov 27  2009 /usr/sbin/useradd
[root@localhost test_cp]# ls -l $(which adduser)
lrwxrwxrwx 1 root root 7 Dec 21 02:57 /usr/sbin/adduser -> useradd
[root@localhost test_cp]#

加密方法:
     对称加密:加密和解密使用同一个密码
     公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
     单向加密(指纹加密),散列加密:提取数据特征码,常用于数据完整性校验
          3、不可逆
          1、雪崩效应/蝴蝶效应:初始条件微小改变导致结构的巨大改变
          2、定长输出
               MD5:Message Digest, 128位定长输出
               SHA1:Secure Hash Algorithm, 160位定长输出

[root@localhost ~]# file  /etc/default/useradd
/etc/default/useradd: ASCII text-->说明是纯文本可以cat了
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file-->useradd m默认配置如下
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@localhost ~]# 
















文件管理命令详解