Linux運維之基礎拾遺

第一部分 Linux經常使用文件管理命令

1.1 cp

文件複製node

經常使用選項python

-i  # 覆蓋以前提醒用戶確認
-f  # 強制覆蓋目標文件
-r  # 遞歸複製目錄
-d  # 複製符號連接自己而非其指向的源文件
-a  # 遞歸複製目錄,保留文件的全部屬性

示例linux

[root@Bj-1-141 ~]# cp /etc/fstab /tmp/
[root@Bj-1-141 ~]# ls -l /tmp/fstab 
-rw-r--r-- 1 root root 501 Dec  9 21:19 /tmp/fstab
[root@Bj-1-141 ~]# cp -a /etc/fstab /tmp/
cp: overwrite ‘/tmp/fstab’? y
[root@Bj-1-141 ~]# ls -l /tmp/fstab 
-rw-r--r--. 1 root root 501 Dec  4 18:13 /tmp/fstab
[root@Bj-1-141 ~]# cp -r /var/log/ /tmp/

1.2 mv

移動或重命名文件shell

示例centos

[root@Bj-1-141 tmp]# mv fstab fstab.bak
[root@Bj-1-141 tmp]# ls
fstab
[root@Bj-1-141 tmp]# mv fstab{,.bak}
[root@Bj-1-141 tmp]# ls
fstab.bak

1.3 rm

刪除文件或目錄bash

示例post

[root@Bj-1-141 tmp]# rm -fr log/
[root@Bj-1-141 tmp]# rm -f fstab.bak

第二部分 命令行展開和執行狀態返回值

2.1 執行狀態返回值

bash命令行中命令執行成功返回值爲0,錯誤返回值爲1-255之間的隨機數;centos7

$?:shell中獲取命令的狀態返回值使用$?;echo $?命令行

2.2 命令行展開

~ :自動展開爲用戶的家目錄,或指定用戶的家目錄3d

{}:可承載一個逗號分隔的路徑列表,並將其展開爲多個路徑

例如:/tmp/{a,b}至關於/tmp/a , /tmp/b

2.3 示例

建立/tmp目錄下的:a_c, a_d, b_c, b_d

[root@Bj-1-141 ~]# mkdir /tmp/{a,b}_{c,d}
[root@Bj-1-141 ~]# ll /tmp/
total 4
drwxr-xr-x 2 root root   6 Dec  9 22:07 a_c
drwxr-xr-x 2 root root   6 Dec  9 22:07 a_d
drwxr-xr-x 2 root root   6 Dec  9 22:07 b_c
drwxr-xr-x 2 root root   6 Dec  9 22:07 b_d

建立/tmp/mylinux目錄下的:

/tmp/mylinux/
|-- bin
|-- boot
|   `-- grub
|-- dev
|-- etc
|   |-- rc.d
|   |   `-- init.d
|   `-- sysconfig
|       `-- network-scripts
|-- lib
|   `-- modules
|-- lib64
|-- proc
|-- sbin
|-- sys
|-- tmp
|-- usr
|   `-- local
|       |-- bin
|       `-- sbin
`-- var
    |-- lock
    |-- log
    `-- run
    
[root@Bj-1-141 ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

第三部分 練習

3.1 文件的元數據有哪些,分別表示什麼含義,如何查看?如何修改文件的時間戳信息。

3.1.1 文件的元數據

文件類型-權限-硬連接次數-屬主-屬組-文件大小-時間-文件名

每一個文件都有三個時間戳(centos7是4個還有一個建立時間):

Access: 2016-12-06 22:03:52.372987896 +0800     # 查看內容就表明最近訪問
Modify: 2015-12-09 17:59:15.000000000 +0800     # 新增或刪除內容就是更改
Change: 2016-12-04 18:13:31.613001987 +0800     # 改動是表示元數據發生改變

3.1.2 如何查看文件的元數據

[root@Bj-1-141 ~]# stat /etc/issue
  File: ‘/etc/issue’
  Size: 23          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67109017    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-06 22:03:52.372987896 +0800
Modify: 2015-12-09 17:59:15.000000000 +0800
Change: 2016-12-04 18:13:31.613001987 +0800
 Birth: -

3.1.3 如何修改時間戳

touch命令:修改文件的時間戳,若是文件不存在則建立一個空文件。

經常使用選項

-c:# 指定的文件路徑不存在時不建立對應的空文件
-a:# 僅修改access時間
-m:# 僅修改modify時間
-t STAMP:# 指定一個時間,將目標文件修改成指定的時間,一般配合-a或者-m使用

3.1.4 示例

[root@Bj-1-141 ~]# stat test.txt 
  File: ‘test.txt’
  Size: 13          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 136103861   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-06 22:11:57.754537389 +0800
Modify: 2016-12-06 22:11:22.323537042 +0800
Change: 2016-12-06 22:11:22.323537042 +0800
 Birth: -
[root@Bj-1-141 ~]# touch -a -t 201612092030 test.txt
[root@Bj-1-141 ~]# stat test.txt 
  File: ‘test.txt’
  Size: 13          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 136103861   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-09 20:30:00.000000000 +0800
Modify: 2016-12-06 22:11:22.323537042 +0800
Change: 2016-12-09 20:26:56.383277275 +0800
 Birth: -

3.2 如何定義一個命令的別名,如何在命令中引用另外一個命令的執行結果?

3.2.1 如何定義命令別名

alias NAME="command"    # 定義命令別名
[root@Bj-1-141 ~]# alias cls="clear"

3.2.2 如何引用命令執行結果

$(COMMAND)或者使用``反引號

[root@Bj-1-141 ~]# current_time=$(date +%Y-%m-%d-%H-%M-%S)
[root@Bj-1-141 ~]# echo $current_time
2016-12-09-20-33-25
[root@Bj-1-141 ~]# current_time=`date +%Y-%m-%d-%H-%M-%S`
[root@Bj-1-141 ~]# echo $current_time
2016-12-09-20-34-0

3.3 顯示/var目錄下全部以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(能夠有其餘字符)的文件或目錄

[root@Bj-1-141 ~]# touch /var/ltest3data
[root@Bj-1-141 ~]# mkdir /var/ltest4data
[root@Bj-1-141 ~]# ls -dl /var/l*[0-9]*[[:lower:]]
-rw-r--r-- 1 root root 0 Dec  9 09:11 /var/ltest3data
drwxr-xr-x 2 root root 6 Dec  9 09:11 /var/ltest4data

3.4 顯示/etc 目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄

[root@Bj-1-141 ~]# touch /etc/6testdata
[root@Bj-1-141 ~]# mkdir /etc/7testdata
[root@Bj-1-141 ~]# ls -d /etc/[0-9]*[a-z]
/etc/6testdata  /etc/7testdata

3.5 顯示/etc 目錄下,以非字母開頭,後面跟了一個字母以及其餘任意長度任意字符的文件或目錄

[root@Bj-1-141 ~]# ls -d /etc/[^a-z][a-z]*
/etc/6testdata  /etc/7testdata

3.6 在/tmp目錄下建立以tfile開頭,後跟當前日期和時間的文件,文件名如: tfile-2016-05-27-09-32-22。

[root@Bj-1-141 ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[root@Bj-1-141 ~]# ll /tmp/tfile-2016-12-09-09-21-44 
-rw-r--r-- 1 root root 0 Dec  9 09:21 /tmp/tfile-2016-12-09-09-21-44

3.7 複製/etc/目錄下全部以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。

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

3.8 複製/etc/目錄下全部以.d結尾的文件或目至/tmp/mytest2目錄中。

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

3.9 複製/etc目錄下全部以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

[root@Bj-1-141 ~]# mkdir /tmp/mytest3
[root@Bj-1-141 ~]# cp -v  /etc/[lmn]*.conf /tmp/mytest3
[root@Bj-1-141 ~]# ls /tmp/mytest3
ld.so.conf     libuser.conf  logrotate.conf  mke2fs.conf
libaudit.conf  locale.conf   man_db.conf     nsswitch.conf
相關文章
相關標籤/搜索