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)
上一篇 2016-09-23 21:45
下一篇 2016-09-24 15:21

相关推荐

  • Linux 第七天: (08月05日) 练习和作业

    Linux 第七天: (08月05日) 练习和作业       1 找出ifconfig命令结果中本机的所有IPv4地址 ifconfig | tr -cs '[0-9].''\n' | sort -ut '.' -k3 -n 或ifconfig | head -2 |…

    Linux干货 2016-08-08
  • N27_第一周作业

    一、描述计算机的组成及其功能 计算机由CPU、内存、输入设备和输出设备组成。 CPU:运算器、控制器、寄存器、缓存 *运算器:进行数字运算和逻辑运算。 *控制器: A、从内存中取出一条指令,并指出下一条指令在内存中的位置; B、对指令进行译码或测试,并产生相应的操作控制信号; C、控制并控制CPU、内存和输入/输出设备之间数据流动的方向。 *寄存器:暂存指令…

    Linux干货 2017-09-04
  • linux终端类型

    终端分为:             ∟  物理终端         定义:可将显示器,键盘,鼠标直接接入主机接口的终端;     &nbsp…

    Linux干货 2016-10-18
  • 马哥教育网络班22期+第1周课程练习

    Linux的发行版以及不同发行版之间的联系与区别    Linux发行版主要的大分支有三个:dibian  S.U.S.E  redhat 一个操作系统由kernel和application组成。编译封装的时候根据不同的application,可以编译成不同的发行版本。 所有的linux发行版都是基于GPL的版权,它们…

    Linux干货 2016-08-15
  • Homework Week-9 bash脚本之顺序、选择、循环

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash #Elephant echo "nologin users:" user1=$(cat /etc/passwd&n…

    Linux干货 2016-10-17
  • 网络管理3

    一、知识整理 1、跨网络通信:路由 路由的分类:主机路由;网络路由;默认路由。 将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。 2、网络配置文件:IP、MASK、GW、DNS相关配置文件 /etc/sysconfig/network-scripts/ifcfg-IFAC…

    Linux干货 2016-09-13