Linux系统基础(二)

一、Linux文件管理命令及其常用方法

1、cd(切换目录)这个命令应该是Linux中用的最频繁的一个命令之一了,因为我们经常需要进行目录的切换。在详解这个命令之前,首先得补充一个重要的知识,就是我们常用的一些比较特殊的目录:
.        代表当前目录
..        代表上一层目录
-        代表前一个工作目录
~        代表【目前用户身份】所在的自家目录
~account  代表 account 这个用户的自家家目录
通过下面的示例看下具体的用法:
[root@baoman ~]# cd /home         # 此时我们进入到了home目录下
[root@baoman home]# cd .          # .表示当前目录,所以当前还是在home目录下
[root@baoman home]# cd ..         # ..表示上一层目录,所以此时就进入到了 / 目录下
[root@baoman /]# cd ~             #~表示【目前用户身份】所在的自家目录,当前用户就是root,所以就进入到了root这个目录下
[root@baoman ~]# cd ~baoman       #~account表示 account 这个用户的自家家目录 ,我如果想进入 baoman 这个用户的主目录,输入 cd ~xiaoluo即可
[root@baoman baoman]# cd -/root   #-表示前一个工作目录,我们的前一个工作目录就是在root下,所以此时又会进入到root这个目录下
[root@baoman ~]# cd ../usr        #如果我们需要进入到usr目录下,这里可以写成相对路径形式也可以写成绝对路径形式
2.pwd (显示当前所在的目录)

这个命令对于我们来说也是一个很重要的命令,因为在Linux下我们都是通过在命令行输入命令,所有如果进入到了一个目录下,就不会像windows那样直观的显示出当前所在的路径,此时我们就可以输入 pwd 这个命令来显示我们当前所在的目录。
[root@baoman ~]# pwd [-P]参数:
-P  :显示出确实的路径,而非使用链接 (link) 路径。(P是大写)
范例:
[root@baoman ~]# pwd/root   <== 显示出当前所在的目录
[root@baoman ~]# cd /var/mail
[root@baoman mail]# pwd
/var/mail
[root@baoman mail]# pwd -P /var/spool/mail   <== 怎么回事?有没有加 -P 差很多
[root@baoman mail]# ls -l /var/mail
lrwxrwxrwx.  1 root root   10 3月  30 10:37 mail -> spool/mail    #看到这里应该知道为啥了吧?因为 /var/mail 是连结文件,连结到 /var/spool/mail # 所以,加上 pwd -P 的参数后,会不以连结文件的数据显示,而是显示正确的完整路径!
3、mkdir(建立新目录)
[root@baoman ~]# mkdir [-mp] 目录名称参数:
-m :配置文件目录的权限!我们可以自己设定自己想要的权限,而不需要使用umask定义的默认权限
-p :帮助你直接将所需要的目录递归建立起来!
范例:
[root@baoman ~]# cd /home
[root@baoman home]# mkdir test    <== 建立一名为 test 的新目录
[root@baoman home]# mkdir test1/test2/test3/test4mkdir: 无法创建目录"test1/test2/test3/test4": 没有那个文件或目录
[root@linux tmp]# mkdir -p test1/test2/test3/test4    # 加了这个 -p 的参数,可以自行帮我们建立多层目录!
[root@baoman home]# mkdir -p test1/test2/test3/test4
[root@baoman home]#  mkdir -m 711 test2
[root@baoman home]#  ls -ldrwxr-xr-x.  2 root    root         4096 4月  21 13:08 test
drwxr-xr-x.  3 root    root         4096 4月  21 13:10 test1
drwx--x--x.  2 root    root         4096 4月  21 13:11 test2# 仔细看上面的权限部分,如果没有加上 -m 来强制设定属性,系统会使用默认属性。如果加上了-m 这个参数,我们就可以自己定义权限了
4、rmdir(删除“空”目录)
[root@baoman ~]# rmdir [-p] 目录名称参数:
-p :连同上层『空的』目录也一起删除
范例:
[root@baoman home]# ls -l
drwxr-xr-x.  2 root    root         4096 4月  21 13:08 test
drwxr-xr-x.  3 root    root         4096 4月  21 13:10 test1
drwx--x--x.  2 root    root         4096 4月  21 13:11 test2
[root@baoman home]# rmdir test
[root@baoman home]# rmdir test1rmdir: 删除 "test1" 失败: 目录非空
[root@baoman home]# rmdir -p test1/test2/test3/test4/
[root@baoman home]# ls -ldrwx--x--x.  2 root    root         4096 4月  21 13:11 test2# 利用 -p 这个参数,立刻就可以将 test1/test2/test3/test4 一次删除~# 不过要注意的是,这个 rmdir 仅能【删除空的目录】!
5、ls(查看文件和目录)
[root@baoman ~]# ls [-aAdfFhilRS] 目录名称
[root@baoman ~]# ls [--color={none,auto,always}] 目录名称
[root@baoman ~]# ls [--full-time] 目录名称
参数:
-a  :全部的文件,连同隐藏文件( 开头为 . 的目录) 一起列出来~
-A  :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录,一起列出来~
-d  :仅列出目录本身,而不是列出目录内的文件数据
-f  :直接列出结果,而不进行排序 (ls 预设会以文件名排序!)
-F  :根据文件、目录等信息,给予附加数据结构,例如:      *:代表可执行文件; /:代表目录; =:代表 socket 档案; |:代表 FIFO 文件;
-h  :列出文件的打小(例如GB、KB等等)
-i  :列出 inode 位置,而非列出文件属性;
-l  :长数据串行出,包含文件的属性等等数据;
-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在账号管理提到!)
-r  :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R  :连同子目录内容一起列出来;
-S  :以文件容量大小排序!
-t  :依时间排序
   --color=never  :不要依据文件特性给予颜色显示;
   --color=always :显示颜色--color=auto   :让系统自行依据设定来判断是否给予颜色
   --full-time    :以完整时间模式 (包含年、月、日、时、分) 输出
   --time={atime,ctime} :输出 access 时间或 改变权限属性时间 (ctime) 
                       而非内容变更时间 (modification time)
6、cp(复制)
[root@baoman ~]# cp [-adfilprsu] 源文件(source) 目的文件(destination)
[root@baoman ~]# cp [options] source1 source2 source3 .... directory
参数:
-a  :相当于 -pdr 的意思;
-d  :若来源文件为链接文件的属性(link file),则复制链接文件属性而非档案本身;
-f  :为强制 (force) 的意思,若有重复或其他疑问时,不会询问使用者,而强制复制;
-i  :若目的文件(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l  :进行硬式连结 (hard link) 的连结文件建立,而非复制文件本身;
-p  :连同文件的属性一起复制过去,而非使用默认属性;
-r  :递归持续复制,用于目录的复制行为;
-s  :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u  :若 destination 比 source 旧才更新 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』
cp的常用用法:
实例一:将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@baoman home]# cd /tmp
[root@baoman tmp]# cp ~/.bashrc bashrc
[root@baoman tmp]# cp -i ~/.bashrc bashrc cp:是否覆盖"bashrc"? n# 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y !# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!实例二:将 /var/log/wtmp 复制到 /tmp 底下
[root@baoman tmp]# cp /var/log/wtmp 
[root@baoman tmp]# ls -l /var/log/wtmp wtmp 
-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 /var/log/wtmp
-rw-r--r--. 1 root root 204288 4月  21 13:33 wtmp         #注意到了吗?!在不加任何参数的情况下,文件的所属者会改变,连权限也跟着改变了# 这是个很重要的特性!要注意!还有,连文件建立的时间也不一样了!# 如果您想要将文件的所有特性都一起复制过来,可以加上 -a 参数即可![root@baoman tmp]# cp -a /var/log/wtmp wtmp2[root@baoman tmp]# ls -l /var/log/wtmp wtmp2-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 /var/log/wtmp
-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 wtmp2        #此时我们看到在加上 -a 这个参数以后,文件的所有属性都会被复制过来。
实例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下
[root@baoman tmp]# cp /etc/ /tmpcp: 略过目录"/etc/"    -->> 如果我们复制的是目录,此时必须要加上 -r 这个参数才行
[root@baoman tmp]# cp -r /etc/ /tmp# 还是要再次的强调! -r 是可以复制目录,但是,档案与目录的权限会被改变# 所以,也可以利用 cp -a /etc /tmp 来下达指令!    使用-a 参数相当于同时使用了 -pdr 参数
7、rm(删除)
[root@baoman ~]# rm [-fir] 文件或目录
参数:
-f  :就是 force 的意思,强制移除;
-i  :互动模式,在删除前会询问使用者是否动作
-r  :递归删除!最常用在目录的删除了

示例:

[root@baoman tmp]# rm bashrc 
rm:是否删除普通文件 "bashrc"?y
[root@baoman tmp]# rm wtmp wtmp2   
rm:是否删除普通文件 "wtmp"?yrm:是否删除普通文件 "wtmp2"?y
[root@baoman tmp]# rm -rf etc/  -->> 这个就会强制将etc这个目录以及里面的所有子目录、文件删除掉
8、mv(移动文件与目录、文件重命名)
[root@baoman ~]# mv [-fiu] source destination
[root@baoman ~]# mv [options] source1 source2 source3 .... directory参数:
-f  :force 强制的意思,强制直接移动而不询问;
-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u  :若目标文件已经存在,且 source 比较新,才会更新 (update)

实例一:复制一档案,建立一目录,将档案移动到目录中
[root@baoman tmp]# cp ~/.bashrc bashrc
[root@baoman tmp]# mkdir mvtest
[root@baoman tmp]# mv bashrc mvtest/
[root@baoman tmp]# cd mvtest/
[root@baoman mvtest]# lsbashrc     # 将某个档案移动到某个目录去,就是这样做!
实例二:将刚刚的目录名称更名为 mvtest2
[root@baoman tmp]# mv mvtest mvtest2  <== 这样就更名了!
# 其实在 Linux 底下还有个命令令,名称为 rename ,# 该命令就是专门用来对文件或者目录进行重命名的镇明路!可以参阅 man rename 了解其更多的用法 !
9、basename(获取路径的文件名)dirname(获取路径的目录名)
[root@baoman ~]# basename /etc/inittab inittab  -->>这个就是我们的文件名
[root@baoman ~]# dirname /etc/inittab /etc    -->>这个就是我们的目录名

二、bash命令状态返回值

Linux下一条命令或一个进程执行完成会返回一个一个状态码。

0   ===   成功执行

非0   ===  执行过程中出现异常或非正常退出,范围是1-255

在Shell脚本中 最后执行的一条命令将决定整个shell脚本的状态. 此外 shell的内部命令exit也可以随时终止shell脚本的执行,返回Shell脚本的状态码

当shell脚本执行结束前 的最后一个命令是不带参数的exit ,那么 shell脚本的最终返回值 就是 exit 语句前一条语句的返回值,根据这个值可以判断脚本成功执行与否。

查看紧邻的上一条命令执行状态的命令是:echo $?

三、命令行展开 在非引号内的内容,如果用花括号包括,而且里面用逗号分隔(至少包含一个逗号,可以是空内容),这样花括号里的内容会被展开成用空格分开的一个列表,花括号前后可以紧随前缀和后缀(前后缀都是可选的)。

[root@localhost usr]# echo {a,b,c}a b c
[root@localhost usr]# echo a{b,c}
ab ac
[root@localhost usr]# echo {a,b}{c,d}
ac ad bc bd
[root@localhost usr]# echo a{,,,,,}b
ab ab ab ab ab ab

四、命令行展开示例:

[root@baoman ~]# mkdir /tmp/{a,b}_{c,d}[root@baoman ~]# ls /tmpa_c  a_d  b_c  b_d

[root@baoman ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr,var/{lock/{bin,sbin},log,run}}[root@baoman ~]# tree /tmp/mylinux//tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
└── var
    ├── lock
    │   ├── bin
    │   └── sbin
    ├── log
    └── run23 directories, 0 files

五、文件的元数据信息查看及修改 1、任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元 数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者时间戳以及文件数据 块的分布信息(inode…)等等

[root@baoman ~]# stat /tmp/mylinux/
  文件:"/tmp/mylinux/"
  大小:4096      	块:8          IO 块:4096   目录
设备:fd00h/64768d	Inode:3298        硬链接:14权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2016-09-24 17:48:51.122124573 +0800最近更改:2016-09-24 17:48:25.770123626 +0800最近改动:2016-09-24 17:48:25.770123626 +0800创建时间:-
3、修改
touch命令:
touch - change file timestamps

touch [OPTION]... FILE...
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m:仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]

六、定义别名,引用另一个命令的执行结果

[root@baoman ~]# alias grep='grep --auto'  #创建别名,也可以把命令写入环境变量中
[root@baoman ~]# alias   #查看当前shell下的别名alias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='ls --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'引用一个命令的执行结果有两种方法:
    方法一:``:反斜线
    方法二:$()
    [root@baoman ~]# ifconfig 
                eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.10.10  netmask 255.255.255.0  broadcast 172.16.10.255
        inet6 fe80::20c:29ff:fe3c:5102  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:3c:51:02  txqueuelen 1000  (Ethernet)
        RX packets 23046  bytes 29348499 (27.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8983  bytes 806119 (787.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 4  bytes 340 (340.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 340 (340.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
        [root@baoman ~]# ifconfig | awk 'NR==2{print$2}'
            172.16.10.10
        [root@baoman ~]# echo `ifconfig | awk 'NR==2{print$2}'`
            172.16.10.10
        [root@baoman ~]# echo $(ifconfig | awk 'NR==2{print$2}')
            172.16.10.10

七、显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一个数字(可以有其他字符)的文件或目录:

[root@baoman ~]# touch /var/123abc
[root@baoman ~]# mkdir /var/1pam2c
[root@baoman ~]# ls  -d /var/1*[0-9]*[[:lower:]]
/var/123abc  /var/1pam2c

八、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录;

[root@baoman ~]# touch /etc/1a
[root@baoman ~]# mkdir /etc/22222zZ
[root@baoman ~]# ls /etc/[0-9]*[^0-9]/etc/1a

/etc/22222zZ:
[root@baoman ~]# ls -d /etc/[0-9]*[^0-9]
/etc/1a  /etc/22222zZ

九、显示/etc目录下,以非字母开头,后面跟一个字母以及其他任意长度任意字符的文件或目录;

[root@baoman ~]# ls -d /etc/[^a-z][a-z]*
/etc/1a

十、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名如:tfile-2016-05-27-09-32-22;

[root@baoman ~]# mkdir /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[root@baoman ~]# ls /tmp/
tfile-2016-09-24-18-17-18

十一、复制/etc目录下所有以P开头,以非数值结尾的文件或目录到/tmp/mytest1目录下;

[root@baoman tmp]# mkdir mytest1
[root@baoman tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1/
[root@baoman tmp]# ls /tmp/mytest1/
pam.d  passwd  passwd-  pki  plymouth  pm  popt.d  postfix  ppp  prelink.conf.d  printcap  profile  profile.d  protocols  python

十二、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中;

[root@baoman tmp]# mkdir mytest2
[root@baoman tmp]# cp -r /etc/*.d /tmp/mytest2/
[root@baoman tmp]# ls /tmp/mytest2/
bash_completion.d  cron.d     dracut.conf.d  init.d        logrotate.d     my.cnf.d  prelink.conf.d  rc1.d  rc4.d  rc.d       statetab.d  tmpfiles.dbinfmt.d           depmod.d   gdbinit.d      latrace.d     modprobe.d      pam.d     profile.d       rc2.d  rc5.d  rsyslog.d  sudoers.d   xinetd.dchkconfig.d        dnsmasq.d  grub.d         ld.so.conf.d  modules-load.d  popt.d    rc0.d           rc3.d  rc6.d  rwtab.d    sysctl.d    yum.repos.d

十三、复制/etc目录下所有以1或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

[root@baoman tmp]# cp  /etc/{1,m,n}*.conf /tmp/mytest3/
cp: 无法获取"/etc/1*.conf" 的文件状态(stat): 没有那个文件或目录
[root@baoman tmp]# ls /tmp/mytest3/
man_db.conf  mke2fs.conf  nsswitch.conf

原创文章,作者:jbm,如若转载,请注明出处:http://www.178linux.com/48814

(0)
jbmjbm
上一篇 2016-09-23
下一篇 2016-09-24

相关推荐

  • 搭建双主模型lpvs的高可用集群

    一、实验要求: 1、基于LVS-DR模型上实践; 2、调度器高可用(双主模型); 二、实验拓扑图: 三、实验步骤: 1、  设置RS (a)设置http主页 Yum install httpd Vim /var/www/html/index.html <h1>172.18.24.3 server 1或者172.18.24.5server…

    2017-05-15
  • 系统基础之shell脚本编程详解3(函数)

    shell脚本编程详解3:    在前两节我们分别介绍了shell脚本编程的基础和循环,判断的知识,今天我们分享脚本的另一种用法,函数. 概论:     函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。    它与shell…

    Linux干货 2016-08-22
  • inode 与 block

    iNode:索引节点(index node) iNode是用来存储数据属性信息的,iNode包含的属性包括:文件大小属组归属的用户组读写权限文件类型修改时间指向文件实体的指针功能(iNode节点和block的对应关系)但是,iNode不包括文件名 iNode小结: 磁盘分区格式化为ext4文件系统后会生成一定数量的iNode和block iNode是索引节点…

    Linux干货 2017-07-18
  • 简单的shell脚本结合awk实现防止对web服务的dos攻击

    一 实验环境         鄙人使用的是centos 6.8操作系统   需要安装iptables(常见的linux系统貌似都会自动安装iptables)这条可以忽略   awk也需要安装没有的话就用yum装下吧       &…

    2017-04-24
  • Hadoop hdfs 分布式文件系统

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2015-08-05
  • bash变量和逻辑运行

    bash 特性及bash脚本编程初步       终端,附着在终端的接口程序:      GUI:KDE,GNome,Xfce      CLI: /etc/shells              b…

    Linux干货 2016-12-23