第一章 Linux基础
1.终端terminal
查看当前用户终端
[19:21:49 root@yp ~]#tty
/dev/pts/0
2.SHELL
#显示当前使用的SHELL
[19:45:27 root@yp ~]#echo $SHELL
/bin/bash
#显示当前系统可使用的所有shell
[19:48:03 root@yp ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
3.设置主机名
#主机名临时生效
[19:48:47 root@yp ~]#hostname yp
#设置主机名永久生效
centos7及以上修改方法:
[19:53:26 root@yp ~]#hostnamectl set-hostname NAME
centos6和Ubuntu修改方法:
[19:14:23 root@yp ~]#vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yuan.localdomain
注:主机名不支持下划线。
4.命令提示符
#显示提示符格式
[19:23:32 root@yuan ~]#echo $PS1
\[\e[1;33m\][\t \u@\h \W]\$\[\e[0m\]
修改范例:
PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
提示符格式说明:
\e 控制符
\u 当前用户
\h 主机名称简称
\H 主机名称全称
\w 当前工作目录
\W当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
!历史命令数
\# 开机后命令历史数
在centos中永久修改命令提示符颜色:
[19:58:27 root@yuan ~]#echo 'PS1="\[\e[1;33m\][\t \u@\h \W]\$\[\e[0m\]"' > /etc/profile.d/env.sh
[20:00:26 root@yuan ~]#cat /etc/profile.d/env.sh
PS1="\[\e[1;33m\][\t \u@\h \W]\\$\[\e[0m\]"
[20:01:08 root@yuan ~]#exit
在Ubuntu中修改提示符格式:
root@yp:~# echo 'PS1="\[\e[1;31m\][\t \u@\h \W]\$\[\e[0m\]"' >> .bashrc
root@yp:~# exit
5.执行命令
内部命令:是shell自带的命令,通过某些命令形式提供
外部命令:在文件系统路径下有对应的可执行文件
区别指定命令是外部命令或内部命令:
type COMMAND
范例:
[21:48:07 root@yp ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
内部命令相关:
help:内部命令列表
enable:管理内部命令
-enable cmd 启用内部命令
-enable -n cmd 禁用内部命令
-enable -n 查看所有禁用内部命令
6.hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在经执行,如果不存在,将会去PATH路径下找,利用hash缓存表可大大提高命令的调用速率。
hash命令常见用法:
hash 显示hash缓存
hash -l 显示hash缓存,可作为输入使用
hash -p path name 将命令全路径path起别名为name
hash -t name 打印缓存中中的name路径
hash -d name 清除name缓存
hash -r 清除所有缓存
7.别名命令
对于经常执行的较长命令,可自定义简单名称,方便执行
List item
-
显示当前shell所有可用的别名:
alias
定义别名NAME,其命令相当于执行命令VALUE:
alias NAME='VALUE'
范例:
[21:48:16 root@yp ~]#echo "alias free='free -h'" >> .bashrc
-
撤销别名:
unalias
-
取消所有别名:
unalias -a
8.常见命令
- 查看硬件信息
lscup或cat /proc/cpuinfo
范例:
[22:37:02 root@yp ~]#lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1 #每个core有几个线程
Core(s) per socket: 4 #每个槽位有4个core
Socket(s): 2 #服务器版面上有2个cpu槽位
NUMA node(s): 2 #nodes的数量
Vendor ID: GenuineIntel
CPU family: 6
Model: 126
Model name: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
Stepping: 5
CPU MHz: 1497.600
BogoMIPS: 2995.20
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 48K
L1i cache: 32K
L2 cache: 512K
L3 cache: 8192K
[22:45:25 root@yp ~]#cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 126
model name : Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
stepping : 5
microcode : 0x78
cpu MHz : 1497.600
cache size : 8192 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 27
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid avx512f avx512dq rdseed adx smap clflushopt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xsaves arat pku ospke avx512_vpopcntdq md_clear flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs
bogomips : 2995.20
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management:
- 查看内存大小
free或 cat /proc/memihfo
范例:
[22:37:05 root@yp ~]#free
total used free shared buff/cache available
Mem: 816188 219012 331584 5736 265592 462972
Swap: 2097148 0 2097148
[22:44:24 root@yp ~]#cat /proc/meminfo
MemTotal: 816188 kB
MemFree: 331664 kB
MemAvailable: 463080 kB
Buffers: 4300 kB
Cached: 223616 kB
SwapCached: 0 kB
Active: 182464 kB
Inactive: 131496 kB
Active(anon): 86448 kB
Inactive(anon): 5328 kB
Active(file): 96016 kB
Inactive(file): 126168 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 84056 kB
Mapped: 80212 kB
Shmem: 5736 kB
KReclaimable: 37708 kB
Slab: 100384 kB
SReclaimable: 37708 kB
SUnreclaim: 62676 kB
KernelStack: 4508 kB
PageTables: 6372 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2505240 kB
Committed_AS: 321716 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 14336 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 132992 kB
DirectMap2M: 915456 kB
DirectMap1G: 0 kB
- 查看硬盘分区情况
[22:46:09 root@yp ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 152G 0 part
├─cl-root 253:0 0 100G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-data 253:2 0 50G 0 lvm /data
sr0 11:0 1 7G 0 rom
[22:47:21 root@yp ~]#cat /proc/partitions
major minor #blocks name
8 0 209715200 sda
8 1 1048576 sda1
8 2 159391744 sda2
11 0 7377920 sr0
253 0 104857600 dm-0
253 1 2097152 dm-1
253 2 52428800 dm-2
- 查看系统版本信息
[22:48:26 root@yp ~]#uname -r
4.18.0-147.el8.x86_64
- Centos8查看操作系统发行版本
[22:49:37 root@yp ~]#cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[22:56:30 root@yp ~]#cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
[22:56:38 root@yp ~]#lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 8.1.1911 (Core)
Release: 8.1.1911
Codename: Core
- Ubuntu查看发行版本
[20:51:12 root@yp ~]$cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[22:59:52 root@yp ~]$cat /etc/issue
Ubuntu 20.04 LTS \n \l
[23:00:04 root@yp ~]$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
- 日期和时间
Linux的两种时钟
----系统时钟:由Linux内核通过CPU的工作频率进行的
----硬件时钟:主板
date 显示和设置系统时间
[23:00:16 root@yp ~]$date +%s
1596121446
[23:04:06 root@yp ~]$date -d @`date +%s`
Thu 30 Jul 2020 11:04:58 PM CST
clock,hwclock:显示硬件时钟
-s 以硬件时间为准,校准系统时钟
-w以系统时间为准,校准硬件时钟
[19:52:37 root@yp ~]#timedatectl list-timezones
[19:50:59 root@yp ~]#timedatectl set-timezone Asia/Shanghai
[19:52:37 root@yp ~]#timedatectl status
Local time: Fri 2020-07-31 19:53:29 CST
Universal time: Fri 2020-07-31 11:53:29 UTC
RTC time: Fri 2020-07-31 11:53:29
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[19:57:13 root@yp ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 21 17:34 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
- 日历
[19:59:36 root@yp ~]#cal -y
2020
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5 6 7
5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14
12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21
19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28
26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
- 用户登录信息查看命令
whoami:显示当前有效登录用户
who:系统当前所有登录的会话
w:提醒哦那个当前所有的会话登录及所做操作
- 会话管理
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口
终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。
(1) 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3) 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4) 它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux
- screen
利用screen 可以实现会话管理,如:新建会话,共享会话等。
注意:CentOS7 来自于base源,CentOS8 来自于epel源
centos7 安装screen:
[19:59:40 root@yp ~]#yum -y install screen
centos8 安装creen:
[20:12:05 root@yp ~]#yum -y install epel-release
[20:12:54 root@yp ~]#yum -y install screen
screen 常见用法:
1.创建新screen会话
screen –S [SESSION]
2.加入screen会话
screen –x [SESSION]
3.退出并关闭screen会话
exit
4.剥离当前screen会话
Ctrl+a,d
5.显示所有已经打开的screen会话
screen -ls
6.恢复某screen会话
screen -r [SESSION]
- Tmux
Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,
功能:
它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。它可以让新窗口"接入"已经存在的会话。
它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
它还支持窗口任意的垂直和水平拆分
安装 :
[20:19:17 root@yp ~]#yum -y install tmux
tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
分离会话:
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
tmux detach
接入会话:
tmux attach 命令用于重新接入某个已存在的会话。
tmux attach -t <session-name>
杀死会话:
tmux kill-session -t <session-name>
切换会话:
tmux switch -t <session-name>
上下分窗格:
tmux split-window
ctrl+b,"
左右分窗格:
tmux split-window -h
ctrl+b,%
窗格快捷键:
Ctrl+b %:划分左右两个窗格
Ctrl+b ":划分上下两个窗格
Ctrl+b :光标切换到其他窗格。是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓
Ctrl+b ;:光标切换到上一个窗格
Ctrl+b o:光标切换到下一个窗格。
Ctrl+b {:当前窗格左移
Ctrl+b }:当前窗格右移
Ctrl+b Ctrl+o:当前窗格上移
Ctrl+b Alt+o:当前窗格下移
Ctrl+b x:关闭当前窗格
Ctrl+b !:将当前窗格拆分为一个独立窗口
Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小
Ctrl+b q:显示窗格编号
- 输出信息 echo
echo 命令可以将后面跟的字符进行输出
功能:
显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号.
选项:
-E (默认) 不支持 \ 解释功能
-n 不自动换行
-e 启用 \ 字符的解释功能
9.字符集和编码
- ASCII码
查看ascii码表
[20:37:26 root@yp ~]#yum -y install man-pages
[20:37:26 root@yp ~]#man ascii
- Unicode
编码方案:
UTF-8:变长,1到4个字节
UTF-16:变长,2或4个字节
UTF-32:固定长度,4个字节
编码转换和查询:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode
10. 命令行扩展和被括起来的集合
- 命令行扩展:` ` 和 $()
比较 " ", ’ ’ , ` ` 的区别:
[root@centos8 ~]#echo "echo $HOSTNAME"
echo centos8.localdomain
[root@centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]#echo `echo $HOSTNAME`
centos8.localdomain
结论:
单引号:六亲不认,变量和命令都不识别,都当成了普通的字符串
反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续
双引号:不能识别命令,可以识别变量
范例:
[09:18:04 root@centos8 data]#echo "This system's name is $(hostname)" This system's name is centos8.magedu.org
[09:18:55 root@centos8 data]#echo "I am `whoami`"
I am root
[09:15:37 root@centos8 data]#touch $(date +%F).log
[09:16:29 root@centos8 data]#ls
2019-12-13.log
[09:16:31 root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
[09:16:34 root@centos8 data]#touch `date +%F`.txt
[09:17:14 root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
-rw-r--r--. 1 root root 0 Dec 13 09:17 2019-12-13.txt
[09:17:15 root@centos8 data]#touch `hostname`-`date +%F`.log
[09:18:02 root@centos8 data]#ll
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
-rw-r--r--. 1 root root 0 Dec 13 09:17 2019-12-13.txt
-rw-r--r--. 1 root root 0 Dec 13 09:18 centos8.magedu.org-2019-12-13.log
[root@centos8 ~]#touch `date +%F_%H-%M-%S`.log
[root@centos8 ~]#touch `date -d '-1 day' +%F`.log
- 括号扩展:{ }
{}可以实现打印重复字符串的简化形式
[root@centos8 ~]#echo {a..z..2}
a c e g i k m o q s u w y
[root@centos8 ~]#echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
第二章 文件管理和重定向相关
1.列出目录内容-ls
-a 包含隐藏文件
-l 显示额外的信息
-R 目录递归
-ld 目录和符号链接信息
-1 文件分行显示
-S 按从大到小排序
-t 按mtime排序
-u 配合-t选项,显示并按atime从新到旧排序
-U 按目录存放顺序显示
-X 按文件后缀排序
-F 对不同类型文件显示时附加不同的符号:*/=>@|
-C 文件多时,以多列的方式显示文件,默认是一列(标准输出)
2.查看文件状态 stat
每个文件有三个时间戳:
- access time -atime 访问时间,读取文件内容
- modify time -mtime 修改时间,改变文件内容
- change time -ctime 改变时间,元数据发生改变
[21:11:12 root@yp ~]#stat /etc/passwd
File: /etc/passwd
Size: 1211 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 134551871 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2020-07-31 17:55:32.787596470 +0800
Modify: 2020-07-31 17:55:32.719596070 +0800
Change: 2020-07-31 17:55:32.743596211 +0800
3.文件通配符
常见通配符:
- 匹配零个或多个字符,但不匹配 “ . ” 开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~ yp 用户yp家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字0-9
[a-z]、[A-Z] 匹配字母范围
[yp] 匹配所有yp字母
[^yp] 匹配除yp以外的所有字母
[^a-z] 匹配除a-z意外的所有字母
4. 创建新文件和刷新文件时间-touch
选项:
-a 仅改变atime和ctime
-m 仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c如果文件不在,则不予创建
5.复制文件和目录-cp
常用选项:
-i 如果目标已存在,覆盖前提示
-n 不覆盖
-r,-R 递归复制目录及内部所有的内容
-a 归档
-d 不复制原文件,只复制链接名
-p 复制权限
-v 显示复制过程
-f 强制
-u 只复制比原文件更新或不存在的文件
-b 如目标存在,覆盖前先备份,默认只保留最近一个
–backup=number 目标存在,覆盖前先备份加数字后缀,可保留多个备份
6.移动和重命名文件-mv
常用选项:
-i 交互式
-f 强制
-b 目标存在,覆盖前线备份
7.删除文件-rm
常用选项:
-i 交互式
-f 强制删除
-r 递归
–no-preserve-root 删除/
8.目录操作
- 显示目录树tree
-d 只显示目录
-L level 指定显示的层级目录
- 创建目录mkdir
-p 存在于不报错,且可自动创建所需目录
-v 显示创建详细信息
-m MODE 创建目录时置界指定权限
- 删除空目录mkdir
-p 递归删除父空目录
-v 显示删除信息
注意:rmdir 只能删除空目录,如果向删除非空目录,可以使用 rm-r 命令,递归删除目录树
9.软硬链接
- 硬链接
ln filename [ linkname ]
- 软链接
ln -s filename [ linkname ]
#绝对路径
ln -s /data/dir /data/dirlink
#相对路径
cd /data
ln -s ../data/dir /root/dirlink
rm-rf /data/dirlink #删除软连接本身,不擅长目录内容
rm- rf /data/dirlink/ #删除目录文件,不删除软连接
软硬区别:
- 本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件- 跨设备
硬链接:不支持
软链接:支持- inode
硬链接:相同
软链接:不同- 链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少软链接:创建或删除,链接数不会变化- 文件夹
硬链接:不支持
软链接:支持- 相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径- 删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问- 文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关
10.IO重定向
- 标准输入和输出
标准输入(STDIN):默认接受来自终端窗口的输入 -0
标准输出(STDOUT):默认输出到终端窗口 -1
标准错误(STDERR):默认输出到终端窗口 -2
- 标准输出和错误重定向
将默认的输入输出,或错误对应的设备改变,指向新的目标
1>或> 标准输出重定向到文件
2> 标准错误重定向到文件
&> 把所有输出重定向到文件
2>&1 将标输出误重定向为标准错误
1>&2 将标准错误重定向为标准输出
- 追加
把输出和错误重定向追加到文件
>> 标准输出追加
2>> 标准错误追加
11.管道
管道符左边必须有标准输出,右边必须是标准输入
格式:
命令1 | 命令2 | 命令3 | …
范例:
[22:44:45 root@yp data]#ls
d1 link yp yp.txt
[22:44:46 root@yp data]#ls /data /xxx | tr 'a-z' 'A-Z' # 查看data和xxx文件内容 并且将输出结果中的a-z转换为A-Z
ls: cannot access '/xxx': No such file or directory
/DATA:
D1
LINK
YP
YP.TXT