Linux 课堂笔记

2018-05-11 课堂笔记

2018-05-14  本文已影响0人  chocolee911

目录

一、FHS(Filesystem Hierarchy Standard)
二、特殊目录 & 绝对路径 & 相对路径
三、环境变量 PATH
四、文件、目录的权限(ls、umask)
五、基础命令(tree、file、which、man)
六、文件、目录权限管理(chown、chgrp、chmod)
七、文件、目录基本操作(cd、pwd、mkdir、rmdir、rm、cp、mv)
八、文件内容查看(cat、more、less、head、tail、wc)
九、命令别名(alias)
十、操作小技巧


一、FHS(Filesystem Hierarchy Standard)

是否发现 Linux 的每种发行版的目录组成都基本相同?不管使用哪种发行版都基本上不用再花时间去熟悉其目录结构。 ——归功于 文件系统层次化标准(FHS)

/bin:相当于 Windows 下的 Program Files,存放了大量的命令,但其实该目录只是软链接至/usr/bin
/sbin:存放了root 才能使用的命令,但其实该目录只是软链接至/usr/sbin
/dev:存放了所有设备
/home:存放了所有普通用户的家目录,如:/home/user1、/home/user2
/root:root 用户的家目录
/mnt:养成习惯,一般把临时挂载放在这个目录
/media:软盘、光盘、U 盘等设备都暂挂载于此
/proc:虚拟文件系统,其中的数据都在内存中,包括系统内核、进程、外部设备的状态、网络状态等
/run:进程产生的临时文件,重启后消失
/sys:同/proc 都是虚拟文件系统,数据在内存中,主要存储与内核相关的信息
/srv:存放网络服务所需要的数据
/tmp:临时目录,供一般用户或者正在执行的程序暂时放置文件的地方
/var:存放经常变化的文件,如缓存、日志、数据库等
/boot:主要放置系统启动时所需的文件,grub 也在该目录下
/etc:系统主要的配置文件都在该目录下。一般来说该目录下的文件只有 root 用户能修改,普通用户仅能查看
/opt:放置第三方软件
/usr:大量的软件都安装在该目录,包括/bin 和/sbin 都是链接到该目录下的,该目录类似 c:\windows\ 和 c:\Progarm Files
/lib:32位软件所需的库文件
/lib64:64位软件所需的库文件

ps. CentOS 7 后不再区分x64和x86,全部采用 x64。 x86和x64一个最大的区别就是内存识别的大小。


二、特殊目录、绝对路径 & 相对路径

1. 特殊的目录

.代表当前目录
.. 代表上一级目录
~代表当前用户家目录
~<username>代表 username 用户的家目录

2. 绝对路径 & 相对路径

顾名思义
绝对:放之四海皆准
相对:那就要看情况了

绝对路径:从根目录写起的文件 or 目录
如:/home/chocolee/.bashrc

相对路径:不是从根目录写起的文件 or 目录
如:../root

ps. 相对路径使用起来较为方便,但是编写脚本时尽量使用绝对路径来指明命令


三、环境变量 PATH

为何系统提供的命令,不需要使用绝对路径或相对路径来指定即可正常使用?
为何自己编写的脚本必须要在脚本所在目录下使用 ./xxx.sh才能使用?
—— 系统的环境变量 PATH

1. PATH 变量的内容

[root@localhost ~]# echo $PATH      #PATH 只是个变量名,要想使用该变量的内容是需要用$PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

2. PATH变量的作用

只有在PATH所列目录下的二进制执行文件才能在不使用绝对路径或相对路径来指定的情况下被使用。
即:执行命令时,系统会搜寻$PATH所包含的这些目录中的二进制执行文件。

3. 修改PATH变量


四、文件、目录的权限

1. 用户的三种角色

owner: 所有者
group:所属组
other:其他人

ps. 同一个用户可以属于不同的 group

2. 每种角色的三种权限

r: read,读权限
w: write,写权限
x: excute,执行权限

3. 三种权限对于文件与目录的不同意义

对于文件
r:可以读取该文件的内容
w:可以修改、编辑该文件的内容
x:可以执行该文件(但能否执行成功,取决于它是否是个可执行文件)

对于目录
r:是否可以使用ls查看该目录下的内容
w:能否对目录下的文件本体(而不是内容)进行操作,如:删、移、重命名等
x:是否可以 cd到该目录,使其成为工作目录

4. 权限查看命令——ls(当然,这个命令可不止查看权限,但真不知道该把他放哪章去)

-aall,查看所有文件,包括隐身的文件(Linux 中,以.开头的文件为隐身文件)

-llist,以列表的方式查看

-ddirectory,查看所指定的目录本身,而不是目录下的内容

-hhuman-readable,以较为人性化的单位显示文件大小,需要配合-l选项一起使用

-iinode,查看文件的 inode,inode 相当于一个文件在硬盘中的索引,如果两个文件的 inode 相同,其实这两个文件指向硬盘上的同一个存储区域,其实就是同一个文件

-t:以时间进行排序,近期的在上。

5. 默认权限与umask

每次新建的文件或目录,权限为何都是一样的?
—— umask

[root@choco-01 tmp]# umask
0022
[root@choco-01 tmp]# umask -S
u=rwx,g=rx,o=rx
[root@choco-01 tmp]# umask 000
[root@choco-01 tmp]# umask
0000

五、基础命令(tree、file、which、man)

1. tree

其实ls命令也有个能够递归查看目录下多层文件的选项-R,但是显示结果非常不直观;tree命令就不同了

一查到底:

[root@choco-01 ~]# tree /root/
/root/
├── anaconda-ks.cfg
└── expect-test
    ├── aaa
    ├── password-change.sh
    ├── test-dir
    │   └── test.file                        # #test-dir下的子文件也显示了
    └── test.sh
2 directories, 5 files

指定层级:

[root@choco-01 ~]# tree -L 2 /root/
/root/
├── anaconda-ks.cfg
└── expect-test
    ├── aaa
    ├── password-change.sh
    ├── test-dir                              ##不再显示 test-dir 下的子文件
    └── test.sh

2 directories, 4 files

2. file

之前讲ls命令的时候,提到过文件类型,不仅可已通过ls -l中显示信息的第一列查看文件类型,还可以直接用 file命令查看详细的文件类型说明

[root@choco-01 dev]# file /dev/sr0 ; file /dev/tty ; file /dev/block/ ; file /dev/stdin 
/dev/sr0: block special
/dev/tty: character special
/dev/block/: directory
/dev/stdin: symbolic link to `/proc/self/fd/0'

3. which

[root@choco-01 expect-test]# which cd
/usr/bin/cd
[root@choco-01 expect-test]# which ls
alias ls='ls --color=auto'               #ls有两个,一个是带选项的别名,一个是命令的绝对路径
    /usr/bin/ls

4. man

不知道一个命令的具体用法?
不知道一个命令有哪些选项?
不知道某个选项具体能做什么?
——用 man


b. man 一下 ls

六、文件、目录权限管理(chown、chgrp、chmod)

1. chown 命令

a. 同时修改所有者及所属组:chown <owner>:<group> <file or dir>
b. 仅修改所有者:chown <owner> <file or dir>
c. 仅修改所属组:chown :<group> <file or dir>

[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root   812 5月   8 00:17 anaconda-ks.cfg
-rw-r--r--. 1 root root   0 5月  13 23:54 test
[root@localhost ~]# chown nobody:nobody test && ll 
总用量 4
-rw-------. 1 root root   812 5月   8 00:17 anaconda-ks.cfg
-rw-r--r--. 1 nobody nobody   0 5月  13 23:54 test                ## owner 和 group 都改了
[root@localhost ~]#

2. chgrp 命令

因为 chown 对于所有人及所属组都能修改,所以 chgrp 基本上没啥用

[root@localhost ~]# ll
总用量 3
-rw-------. 1 root root   812 5月   8 00:17 anaconda-ks.cfg
-rw-r--r--. 1 root nobody   0 5月  13 23:54 test
[root@localhost ~]# chgrp root test && ll
总用量 3
-rw-------. 1 root root 812 5月   8 00:17 anaconda-ks.cfg
-rw-r--r--. 1 root root   0 5月  13 23:54 test                        ## group 已更改

3. chmod 命令

修改最重要的读写权限,可以使用数字化的方式,也可以使用字母的方式进行权限的变更

a. 使用数字指定:chmod 777 /root/test
b. 使用字母指定:chmod u=rwx,g=rwx,o=rwx /root/test
c. 使用字母增减:chmod u-x /root/test

[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  13 23:54 test
[root@localhost ~]# chmod 777 test && ll             ##数字方法修改权限为777
总用量 0
-rwxrwxrwx. 1 root root 0 5月  13 23:54 test
[root@localhost ~]# chmod u=r,g=r,o=r test && ll   ##字母方式修改权限为 三种角色都只能 read
总用量 0
-r--r--r--. 1 root root 0 5月  13 23:54 test
[root@localhost ~]# chmod u+w test                ## 字母方式增加用户的写权限
[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  13 23:54 test

七、文件、目录基本操作(cd、pwd、mkdir、rmdir、rm、cp、mv)

1. cd命令

a. 通过绝对路径、相对路径进行切换:cd /dev/

[root@choco-01 ~]# cd /dev/
[root@choco-01 dev]# 

b. 切换至当前用户的家目录:cd

[root@choco-01 /]# cd         ##直接cd,不加任何目标目录,将切换至当前用户家目录
[root@choco-01 ~]# 


[root@choco-01 /]# cd ~       ##cd至~,即切换至当前用户家目录
[root@choco-01 ~]# 

c. 切换至刚才最近使用过的工作目录:cd -

[root@choco-01 ~]# cd -         #当前在root的家目录,切换至上一个工作目录 /
/
[root@choco-01 /]# cd -         #当前已在/,切换至上一个工作目录 /root/
/root
[root@choco-01 ~]#

d. 切换至某个普通用户的家目录:cd ~chocolee911

[root@choco-01 ~]# cd ~chocolee911
[root@choco-01 chocolee911]# 

2. pwd命令

[root@choco-01 grub.d]# pwd
/etc/grub.d

3. mkdir

a. -p的使用

[root@choco-01 test]# clear
[root@choco-01 test]# pwd
/tmp/test
[root@choco-01 test]# ls
[root@choco-01 test]# mkdir level-1/level-2/level-3
mkdir: 无法创建目录"level-1/level-2/level-3": 没有那个文件或目录      ##不加-p会报错
[root@choco-01 test]# mkdir -p level-1/level-2/level-3 && tree     ##加了-p后会建立整串目录
.
└── level-1
    └── level-2
        └── level-3

3 directories, 0 files

b. -v的使用

[root@choco-01 test]# mkdir -pv level-1/level-2/level-3 && tree
mkdir: 已创建目录 "level-1"
mkdir: 已创建目录 "level-1/level-2"
mkdir: 已创建目录 "level-1/level-2/level-3"
.
└── level-1
    └── level-2
        └── level-3

3 directories, 0 files

4. rmdir命令

[root@choco-01 test]# rmdir level-1/
rmdir: 删除 "level-1/" 失败: 目录非空

5. rm命令

双刃剑
删的时候很爽,啥都能删,命令还短
删错的时候很惨,是真的很惨。。。

a. -i选项

[root@choco-01 tmp]# rm -ri test/
rm:是否进入目录"test/"? y
rm:是否进入目录"test/level-1"? y
rm:是否进入目录"test/level-1/level-2"? y
rm:是否删除目录 "test/level-1/level-2/level-3"?y
rm:是否删除目录 "test/level-1/level-2"?y
rm:是否删除目录 "test/level-1"?y
rm:是否删除目录 "test/"?y

b. -f选项(不进行提示,且忽略-i选项)

[root@choco-01 tmp]# tree test/
test/
└── level-1
    └── level-2
        └── level-3

3 directories, 0 files
[root@choco-01 tmp]# rm -rif test/
[root@choco-01 tmp]# 

c. -r选项(不加该选项无法删除目录,加后可递归删除目录)

[root@choco-01 tmp]# tree test/
test/
└── level-1
    └── level-2
        └── level-3

3 directories, 0 files
[root@choco-01 tmp]# rm -f test/
rm: 无法删除"test/": 是一个目录           ## see?不加 -r 没法删目录
[root@choco-01 tmp]# rm -rf test/       ##加了之后顺利删除
[root@choco-01 tmp]# 

6. cp命令

使用cp 复制时,若不加任何选项,复制产生的文件的ownergroup会变为执行cp命令的用户

a. 原封不动地拷贝文件

[root@choco-01 test]# cp -a test-1/a test-2/ && ll test-1 test-2
test-1:
总用量 0
-rw-r--r--. 1 root root 0 5月  14 12:08 a

test-2:
总用量 0
-rw-r--r--. 1 root root 0 5月  14 12:08 a
[root@choco-01 test]# 

b. 拷贝的同时改名

 [root@choco-01 test]# cp -a test-1/a test-2/b && ll test-1 test-2   ## 将a拷贝为b
test-1:
总用量 0
-rw-r--r--. 1 root root 0 5月  14 12:08 a

test-2:
总用量 0
-rw-r--r--. 1 root root 0 5月  14 12:08 a
-rw-r--r--. 1 root root 0 5月  14 12:08 b
[root@choco-01 test]# 

c. 目录的复制-r

[root@choco-01 test]# ll;cp -r test-1/ test-3;tree     ##可以递归地将整个test-1目录及其下内容一起复制为test-3
总用量 0
drwxr-xr-x. 2 root root 15 5月  14 12:08 test-1
drwxr-xr-x. 2 root root 24 5月  14 13:45 test-2
.
├── test-1
│   └── a
├── test-2
│   ├── a
│   └── b
└── test-3
    └── a

3 directories, 4 files
[root@choco-01 test]# 

d. 保留owner、group、timestamp等属性-p-a

不加选项

[root@choco-01 test]# clear
[root@choco-01 test]# ll
总用量 0
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 aaa
[root@choco-01 test]# 
[root@choco-01 test]# 
[root@choco-01 test]# cp aaa bbb;ll
总用量 0
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 aaa
-rw-r--r--. 1 root        root        0 5月  14 13:50 bbb         
##以root身份执行了无选项的cp,结果复制得到的文件owner、group都已变为root,且时间被更新

加了-p选项

[root@choco-01 test]# cp -p aaa ccc;ll
总用量 0
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 aaa
-rw-r--r--. 1 root        root        0 5月  14 13:50 bbb
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 ccc    ## ccc文件与aaa文件完全相同
[root@choco-01 test]# 

注意:使用cp、mv等命令时,如果是对目录进行操作,那么在指定目录名时要在末尾加上斜杠

7.mv命令

a. 完整移动

[root@choco-01 test]# ll -R    
./test1:
总用量 0
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 ccc
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 ddd

./test2:
总用量 0
-rw-r--r--. 1 root root 0 5月  14 13:50 bbb


[root@choco-01 test]# mv test1/ccc test2/;ll -R   ## 目标文件中不写文件名,则保留源文件的文件名
./test1:
总用量 0
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 ddd

./test2:
总用量 0
 -rw-r--r--. 1 root        root        0 5月  14 13:50 bbb
-rw-rw-r--. 1 chocolee911 chocolee911 0 5月  14 13:49 ccc   ## mv不像cp,mv不会改变文件的属性
[root@choco-01 test]# 

b. 改名

[root@choco-01 test1]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 14:13 aaa
[root@choco-01 test1]# mv aaa bbb;ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 14:13 bbb

c. 移动目录

[root@choco-01 test]# tree
.
├── test1
│   └── bbb
└── test2
    ├── bbb
    ├── ccc
    └── kkk

2 directories, 4 files
[root@choco-01 test]# mv test1 test2/;tree
.
└── test2
    ├── bbb
    ├── ccc
    ├── kkk
    └── test1
        └── bbb

    2 directories, 4 files

八、文件内容查看

查看文件内容的工具很多,但各自查看的重点不同

1. cat

查看特殊字符(-A):

[root@choco-01 etc]# cat -A /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet$
PROXY_METHOD=none$
BROWSER_ONLY=no$
BOOTPROTO=static$
DEFROUTE=yes$
.
.

显示行号(-n):

[root@choco-01 etc]# cat -n /etc/sysconfig/network-scripts/ifcfg-ens33
 1  TYPE=Ethernet
 2  PROXY_METHOD=none
 3  BROWSER_ONLY=no
 4  BOOTPROTO=static
 5  DEFROUTE=yes

2. more

3. less (less is more)

4. head

5. tail

6. wc

[root@choco-01 tmp]# cat test 
one
two
three four
five
[root@choco-01 tmp]# wc -l < test
4
[root@choco-01 tmp]# wc -w < test
5

九、命令别名(alias、unalias)

为了方便用户执行命令,将某些命令或带选项的命令添加了别名

1. 查看自己系统的alias

[root@choco-01 tmp]# 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'

2. 临时设置alias

alians <alias_name>='<command> <option> <para>'

[root@choco-01 tmp]# alias choco='/bin/ls -l'
[root@choco-01 tmp]# choco
总用量 36
-rw-r--r--. 1 root        root            0 5月  14 11:31 aaa.txt
-rw-r--r--. 1 root        root            0 5月  14 11:32 bbb.txt
-rw-r--r--. 1 chocolee911 chocolee911     0 5月  14 11:32 ccc.txt
-rw-r--r--. 1 chocolee911 chocolee911     0 5月  14 11:31 ddd.txt
-rw-r--r--. 1 chocolee911 chocolee911     0 5月  14 11:31 eee.txt

3. 取消alias(unalias

unalias <alias_name>

[root@choco-01 tmp]# alias
alias choco='/bin/ls -l'
alias cp='cp -i'
alias ls='ls --color=auto'
[root@choco-01 tmp]# unalias choco
[root@choco-01 tmp]# alias
alias cp='cp -i'
alias cp='cp -i'
alias ls='ls --color=auto'

3. 永久设置alias

将临时设置alias的语句,写入 /etc/profile 中,该文件为系统每次加载时都会读取的环境配置文件


十、操作小技巧

1. 使用上一条命令

!!上箭头

[root@choco-01 tmp]# clear
[root@choco-01 tmp]# ls /root
anaconda-ks.cfg  expect-test
[root@choco-01 tmp]# !!            ## 此时 !! 代表 ls /root
ls /root
anaconda-ks.cfg  expect-test

2. 使用最近一条以<keyword>开头的命令

!<keyword>

[root@choco-01 tmp]# tree /root/
/root/
├── anaconda-ks.cfg
└── expect-test
    ├── aaa
    ├── password-change.sh
    ├── test-dir
    │   └── test.file
    └── test.sh

2 directories, 5 files
[root@choco-01 tmp]# !tre    ## 叹号加上所需命令的头几个字母即可
tree /root/
/root/
├── anaconda-ks.cfg
└── expect-test
    ├── aaa
    ├── password-change.sh
    ├── test-dir
    │   └── test.file
    └── test.sh

2 directories, 5 files
[root@choco-01 tmp]# 

3. 使用上一条命令的最后一个参数

!$

[root@choco-01 tmp]# tree -L 1 /root/
/root/
├── anaconda-ks.cfg
└── expect-test

1 directory, 1 file
[root@choco-01 tmp]# ls !$       ## 此时!$ 代表 /root/
ls /root/
anaconda-ks.cfg  expect-test
[root@choco-01 tmp]# 
上一篇下一篇

猜你喜欢

热点阅读