您好,登錄后才能下訂單哦!
Linux命令 文件管理 用戶管理
一、linux命令
命令語法通用格式 #COMMAND OPTION ARGUMENTS
1、命令的含義:發起一命令:就是請求內核將某個二進制程序運行為一個進程; 命令是一個可執行的二進制程序文件, 有可能會調用共享文件庫。
[root@localhost tmp]# file /bin/ls -----查看ls文件類型 /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xec333a104e045327c5e3d0ca6dda16c610a210f3, stripped
程序-->進程 靜態-->動態 (有生命周期)
file 文件: 查詢文件類型信息; ldd:可以查看一個可執行程序依賴的共享庫;
[root@localhost tmp]# ldd /bin/ls linux-vdso.so.1 => (0x00007fffb81fe000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f7882e89000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f7882c84000) libacl.so.1 => /lib64/libacl.so.1 (0x00007f7882a7a000) libc.so.6 => /lib64/libc.so.6 (0x00007f78826b9000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f7882458000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f7882253000) /lib64/ld-linux-x86-64.so.2 (0x00007f78830c3000) libattr.so.1 => /lib64/libattr.so.1 (0x00007f788204e000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7881e32000)
庫: 別人寫好的現有的,成熟的,可以復用的代碼,可以使用但要遵守許可協議; 靜態庫的后綴是.a; 動態庫(共享庫)的后綴是.so,它由gcc加特定參數編譯產生;
如何定位共享庫文件?新安裝一個庫之后如何讓系統識別?Linux中如何創建靜態庫和動態庫,以及使用它們?
詳細可參考: https://www.cnblogs.com/yangg518/p/5842651.html
2、系統程序存放路徑: /bin; /sbin; /usr/bin; /usr/sbin; /usr/local/bin; /usr/local/sbin; 普通命令:/bin; /usr/bin; /usr/local/bin; 管理命名:/sbin; /usr/sbin; /usr/local/sbin; 共享庫文件: /lib; /lib64; /usr/lib;/usr/lib64; /usr/local/lib; /usr/local/lib64; 注意:并非所有的命令都有一個在某個目錄與之對應的可執行程序文件。
3、命令的類別:以是否有可執行文件來區分。
查看命令的類型及位置:type COMMAND 內置命令: 由shell程序自帶的命令; builtin [root@localhost bin]# type printf printf is a shell builtin
外部命令: 獨立的可執行程序文件,文件即命令: [root@localhost bin]# type zip zip is /bin/zip
4、shell
shell程序是獨特的程序,負責解析用戶提供的命令;
環境變量:PATH
[root@localhost bin]# echo $PATH /usr/java/jdk1.6.0_45/bin:/bin:/usr/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
PATH:從路徑中查找用戶鍵入的命令字符串所對應的命令文件:查找的順序是,自左向右,以第一次查找到的命令為止。 OPTIONS: 兩種表現形式: 短選項; 如 -l -d (注意有些選項沒有-);可合并,如 -ld; 長選項: 如 --word ; 不能合并;
ARGUMENTS: 命令作用對象,對何生效 部分可以帶多個參數,以空白字符分開,如
[root@localhost bin]# ls /tmp /etc/ssh /etc/ssh: moduli ssh_host_ecdsa_key ssh_host_ed25519_key.pub ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub /tmp: 2004-02-29 16:21:42 script 2017-02-29 16:21:42 sort.txt 2017-4-5 systemd-private-1f0c154d3be34ae4bc6670cd76168c21-colord.service-NOKmzL cat systemd-private-1f0c154d3be34ae4bc6670cd76168c21-rtkit-daemon.service-ekYjoA fatabmy vmware-root functions yum_save_tx.2019-06-24.08-11.VV74Ze.yumtx glfstab yum_save_tx.2019-06-25.16-52.9YerbK.yumtx magedu.com
語法格式: 尖括號< >:必選參數,實際使用時應將其替換為所需要的參數 大括號{ }:必選參數,內部使用,包含此處允許使用的參數 方括號[ ]:可選參數,在命令中根據需要加以取舍 小括號( ):指明參數的默認值,只用于{ }中 豎線|:a|b|C ;用于分隔多個互斥參數,含義為“或”,使用時只能選擇一個。 省略號...:任意多個參數。
5、獲取命令幫助
內置命令: help COMMAND 所有命令: 1) 命令自帶簡要格式的使用幫助 # COMMAND --help
[root@localhost bin]# mke2fs --help mke2fs: invalid option -- '-' Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size] [-i bytes-per-inode] [-I inode-size] [-J journal-options] [-G flex-group-size] [-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os] [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory] [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]] [-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]
2) 手冊查詢幫助: manual COMMAND 或者 man COMMAND 手冊位于: /usr/share/man ----需要有手冊 手冊為壓縮格式文件,有章節CHAPTER之分: man1; man2; man3...... 1: 用戶命令 2: 系統調用 3: C庫調用 4: 設備文件及特殊文件 5: 文件格式(配置文件格式) 6: 游戲使用幫助; 7: 雜項 8: 管理工具及守護進程;系統管理員手冊。
# whatis COMMAND ---查詢命令有哪個CHAPTER手冊 # man CHAPTER COMMAND ---指定查詢CHAPTER的手冊; -M /PATH/ ---到指定目錄查找手冊;
[root@localhost bin]# whatis passwd sslpasswd (1ssl) - compute password hashes passwd (1) - update user's authentication tokens passwd (5) - password file [root@localhost bin]# man 5 passwd PASSWD(5) Linux Programmer's Manual PASSWD(5) NAME passwd - password file
手動更新man的數據庫: # makewhatis
# info COMMAND 查看該命令的info幫助文檔
應用程序自帶文檔: /usr/share/doc/APP-VERSION
google 搜索查詢: keyword filetype :pdf 指定文檔類型; keyword site:domain 指定網站;
6、命令別名
外部命令可以起別名,可以與原名相同,若相同,則原名被隱藏。
[root@localhost dev]# type ls ls is aliased to `ls --color=auto' -----ls是ls --color=auto的別名 [root@localhost dev]# alias -----查詢別名 alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=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@localhost dev]# unalias ls -----撤銷別名 [root@localhost dev]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --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@localhost dev]# type ls ----看到了ls是外部命令, ls is hashed (/bin/ls) [root@localhost dev]# alias ls='ls --color=auto' -----加回去
要執行別名的原命令,使用\COMMAND; 別名設置是對當前的shell有效
7、常用命令
pwd: 當前目錄
cd: cd 或者 cd ~ 切換到家目錄 cd - 切換到上一個目錄 隱含了兩個變量: $PWD; $OLDPWD
[root@localhost tmp]# echo $PWD /tmp [root@localhost tmp]# echo $OLDPWD /bin [root@localhost tmp]# cd - /bin [root@localhost bin]# cd - /tmp
ls:ls [OPTION]... [FILE]...
-l
如:
-rw-r--r--. 1 root root 18281 Jun 4 06:08 functions
文件類型: -; d; b; c; l; s; p
-rw-rwxr--: 權限
左: user; 宿主;
中: group 宿組;
右: other 其它用戶;
18281: 字節;(注意,目錄的大小不代表它下一級所有文件的大小之和,謹代表它自己)
4: 硬連接數;
-h 文件大小換算;
-d 查看目錄自身
[root@localhost tmp]# ls -ld /tmp
drwxrwxrwt. 13 root root 4096 Jul 7 01:29 /tmp
-r 逆序顯示;
-R 遞歸顯示所有;
cat:查看文本文件(去看二進制文件,亂碼一堆)
cat [OPTION]... [FILE]...
-n: 編行號顯示;
-E: 顯示結束符;
tac:cat的逆序;
file: 查看文件類型;
echo:
echo [SHORT-OPTION]... [STRING]...
-e 顯示轉義字符 \n 換行 \t 制表符
STING 用單引號和雙引號
單引號: 強引用 變量引用不執行替換;
雙引號: 弱引用 變量引用會被替換
wall : 發消息
日期命令:
date
顯示系統時間
+FORMAT
+%F ;full date; same as %Y-%m-%d
+%T : time; same as %H:%M:%S
+%S :seconds since 1970-01-01 00:00:00 UTC
- : (hyphen) do not pad the field
[root@localhost script]# date Sun Jul 7 02:00:35 PDT 2019 [root@localhost script]# date +%F 2019-07-07 [root@localhost script]# date +%T 02:05:31 [root@localhost script]# date +%s 1562490341
設定系統時間
date [MMDDhhmm[[CC]YY][.ss]
Linux系統啟動從硬件讀取時間和日期,讀取完成后,這日期時間就不再與硬件項相關聯了。
系統時鐘:
硬件時鐘:
hwclock : query or set the hardware clock 顯示或設置硬件時鐘
-s : Set the System Time from the Hardware Clock 硬為準
-w : Set the Hardware Clock to the current System Time 系統為準
cal; display a calendar
cal [options] [[[day] month] year]
練習:在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost mk]# echo "tfile-/date" -----命令date無執行,引用命令結果要$(COMMAND) tfile-/date [root@localhost mk]# echo "tfile-$(date)" ----- date的格式要處理 tfile-Sun Jul 7 07:24:53 PDT 2019 [root@localhost mk]# echo "tfile-$(date +%F-+%H-+%M-+%S)" ----- 這個+一個就足夠了 tfile-2019-07-07-+07-+25-+45 [root@localhost mk]# echo "tfile-$(date +%F-%H-%M-%S)" ----- 結果快出來了 tfile-2019-07-07-07-25-59 [root@localhost mk]# touch "tfile-$(date +%F-%H-%M-%S)" [root@localhost mk]# ls mydir tfile-2019-07-07-07-26-18
二、文件管理
1. 文件類型
- 常規文件,即file
d 目錄文件
b block device 即塊設備文件,如硬盤;支持以block為單位進行隨機訪問
c character device 即字符設備文件,如鍵盤支持以character為單位進行線性訪問
major number: 主設備號,用于標識設備類型,加載驅動;
minor number: 次設備號,用于標識同一設備類型的不同設備.
[root@localhost dev]# ls -l /dev |grep sda brw-rw----. 1 root disk 8, 0 Jul 3 07:14 sda brw-rw----. 1 root disk 8, 1 Jul 3 07:14 sda1 brw-rw----. 1 root disk 8, 2 Jul 3 07:14 sda2 brw-rw----. 1 root disk 8, 3 Jul 3 07:14 sda3
l symbolic link 即符號鏈接文件,又稱軟鏈接文件
p pipe 即命名管道文件
s socket 即套接字文件,用于實現兩個進程進行通信 -----這個套接字當時寫TCP通訊程序非常熟悉,現在全忘了!
2、常用命令
mkdir: make directories創建目錄
-p : 自動創建父目錄
[root@localhost tmp]# mkdir /tmp/mk/mydir mkdir: cannot create directory ‘/tmp/mk/mydir’: No such file or directory [root@localhost tmp]# mkdir -p /tmp/mk/mydir -----創建成功
-v : verbose 顯示創建過程
-m : 設置權限
rmdir: remove empty directories 刪除目錄
-P : 刪除某目錄,若父輩為空,則一并刪除;rmdir -p a/b/c' is similar to 'rmdir a/b/c a/b a'
tree : 顯示目錄層次
-L level 顯示指定層組,如 tree -L 3
練習:
1)創建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b。
利用{}分組,可承載以逗號為分割的路徑列表
[root@localhost mk]# mkdir /tmp/a{1{a,b},2} [root@localhost mk]# cd /tmp/ [root@localhost tmp]# tree ├── a1a ├── a1b ├── a2 [root@localhost tmp]# mkdir -pv /tmp/a{1/{a,b},2} ----r若不帶p,則顯示mkdir:cannotcreate directory ‘/tmp/a1/a’: No such file or director mkdir: created directory ‘/tmp/a1’ mkdir: created directory ‘/tmp/a1/a’ mkdir: created directory ‘/tmp/a1/b’ mkdir: created directory ‘/tmp/a2
2)在/tmp目錄下創建目錄:x_y, x_z, q_y, q_z
[root@localhost tmp]# mkdir -pv /tmp/{x,q}/{y,z} mkdir: created directory ‘/tmp/x’ mkdir: created directory ‘/tmp/x/y’ mkdir: created directory ‘/tmp/x/z’ mkdir: created directory ‘/tmp/q’ mkdir: created directory ‘/tmp/q/y’ mkdir: created directory ‘/tmp/q/z’ [root@localhost tmp]# mkdir -pv /tmp/{x,q}_{y,z} mkdir: created directory ‘/tmp/x_y’ mkdir: created directory ‘/tmp/x_z’ mkdir: created directory ‘/tmp/q_y’ mkdir: created directory ‘/tmp/q_z’
3、文件的數據信息及查詢
文件查看工具:
cat;tac; less; more; head; tail;
tail : - output the last part of files 顯示文件尾部n行,默認10行。
tail -20 somefile
-f : output appended data as the file grows; -----通常用于追蹤轉化為后臺應用程序的日志;
文件包含兩類數據: 元數據+正文實際數據
元數據Metadata:描述數據的數據,即數據屬性(property)信息,
如大小、權限、宿主宿組、時間戳、數據塊的分布信息(inode)等
時間戳:
access time : ATime 數據最后一次讀取時間;
modify time : MTime 數據最后一次更改時間;
(當實際數據更改了,并不一定會產生讀取!,如重定向>>輸入)
change time : CTime 元數據最后一次更改時間;
(實際數據更改了,這個就一定會跟著變,但是如果你是用touch去修改數據戳,就不會跟著變)
查看文件數據信息: stat file
[root@localhost tmp]# stat glfstab File: ‘glfstab’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2019-06-23 06:31:29.863083244 -0700 Modify: 2019-06-23 06:31:29.863083244 -0700 Change: 2019-06-23 08:40:41.242916831 -0700 Birth: -
修改文件時間戳的信息:
touch [OPTION]... FILE... 改變時間戳,默認為當下,CTime無法指定更換, 文件不存在則創建文件
-a ATime;
-m MTime;
human readable date string such as "Sun, 29 Feb2004 16:21:42 -0800" or "2004-02-29 16:21:42" or
even "next Thursday"
-c CTime do not create any files
-t 指定時間; [[CC]YY]MMDDhhmm[.ss]
[root@localhost tmp]# touch -t 201707070707 glfstab [root@localhost tmp]# stat glfstab File: ‘glfstab’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0674/-rw-rwxr--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2017-07-07 07:07:00.000000000 -0700 Modify: 2017-07-07 07:07:00.000000000 -0700 Change: 2019-07-06 22:38:48.310288863 -0700 Birth: - [root@localhost tmp]# echo "be a test" >> glfstab (用vim修改,Atime必然跟著MTime而變,用>>,ATim不變) [root@localhost tmp]# stat glfstab File: ‘glfstab’ Size: 28 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0674/-rw-rwxr--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2019-07-06 22:40:43.228353962 -0700 Modify: 2019-07-06 22:42:30.142275224 -0700 Change: 2019-07-06 22:42:30.142275224 -0700 Birth: -
4.文件管理工具
cp:
單--->單(可重命名) ----通常用來備份文件
多(用{})--->目錄
-i :交互
-n : do not overwrite an existing file
-f :強制復制,不詢問覆蓋性的復制
-R -r: 遞歸復制目錄
mv: move (rename) files -----你說這東西拷到一半出故障了,目錄兩邊各一部分內容,怎么還原呢?
ctrl+c ctrl+V 比直接ctrl+X安全
-b : like --backup but does not accept an argument -----這個也安全
rm:remove files or directories -----危險動作,還是先mv到臨時文件夾,過段時間在臨時文件夾rm安全
-i : 交互
-f : force
-R -r : recursive;遞歸刪除
刪除目錄 rm -rf
嚴重警告 :
在root的權限下輸入此命令,極容易出現rm -rf / 的操作,所有都沒有了,因此最后對其限制或者用別名。
root權限危險,rm危險,兩者結合很危險。
練習:復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
[root@localhost tmp]# cp -rv /etc/[p]*[^[[:digit:]]] /tmp cp: cannot stat ‘/etc/[p]*[^[[:digit:]]]’: No such file or directory [root@localhost tmp]# cp -rv /etc/[p]*[^[:digit:]] /tmp ‘/etc/pam.d’ -> ‘/tmp/pam.d’ ‘/etc/pam.d/config-util’ -> ‘/tmp/pam.d/config-util’ ‘/etc/pam.d/other’ -> ‘/tmp/pam.d/other’ ‘/etc/pam.d/chfn’ -> ‘/tmp/pam.d/chfn’ ‘/etc/pam.d/chsh’ -> ‘/tmp/pam.d/chsh 。。。。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。