Linux学习笔记



Linux学习笔记

1. 基础命令
1.1命令模式下的命令的执行
[username@www ~]# command [-options] parameter1 parameter2 ...
                  命令      选项        参数1        参数2   ....
  • 一行命令中第一个输入的部分绝对是命令可执行文件
  • 中括号[]并不存在与实际的命令中,表示是可选的,而加入选项设置时,通常选项前会带-号,例如-h;有时候会使用选项的完整全名,则选项前带有号,例如--help
  • 命令、选项、参数等几个东西的中间以空格来区分,不论空几格shell都视为一格,所以空格是很重要的特殊字符
  • 按下回车键后,该命令就立即执行,回车键代表着一行命令的开始启动
  • 命令行太长时,可以使用\来进行转义回车,使命令连续到下一行。注意,反斜杠后立刻接着特殊字符才能转义
  • 在Linux下,英足字母的大小写是不一样的
1.2 几个重要的热键
1.2.1 [tab]键
  • [tab]键具有命令补全以及文件补齐的功能,它可以避免我们打错命令或者文件名,但是[tab]键在不同的地方输入,会有不一样的结果
 [username@www ~]# ca[tab][tab]

​ 当输入上述命令时,其会自动补齐命令,输出如下

[root@centos-linux lib]# ca[tab][tab]
cacertdir_rehash     cal                  cancel
cache_check          ca-legacy            cancel.cups
cache_dump           calibrate_ppa        capsh
cache_metadata_size  caller               captoinfo
cache_repair         callgrind_annotate   case
cache_restore        callgrind_control    cat
cache_writeback      canberra-boot        catchsegv
cairo-sphinx         canberra-gtk-play    catman

​ 当输入如下命令的时候,[tab]键的功能又有所不同

  [username@www ~]# ls -al ~/.bash[tab][tab]

此时,在该目录下面所有以.Bash为开头的文件名都会被显示出来

[root@centos-linux usr]# ls -al ~/.bash
.bash_history  .bash_logout   .bash_profile  .bashrc   

在某些特殊的命令下,[tab]键具有[参数/选项补齐]的功能,例如date命令

[root@centos-linux usr]# date --[tab][tab]

则会输出date这个命令可以使用的参数有哪些

[root@centos-linux usr]# date --
--date        --help        --reference=  --rfc-3339=   --universal
--date=       --iso-8601    --rfc-2822    --set=        --version

综上,[tab]键在一串命令的第一个字段的后面,则为**【命令补全】,在一串命令的第二个字段后面【文件补全】,在某些特殊的命令后面,具有【选项/参数补齐】**等功能

1.2.2[Ctrl]-c按键
  • 当按下[Ctrl]-c按键后,这个命令可以使当前运行的程序中断,且会立即将当前正在运行的命令中断
1.2.3[Ctrk]-d按键
  • 这个组合件代表着:键盘输入结束,它也可以取代exit的输入,例如你想要直接离开命令行模式,可以直接按下[Ctrl]-d就能直接离开(相当于输入exit)
1.3观察系统的使用状态
  • 如果要查看谁在线,可以执行who命令
  [root@centos-linux usr]# who
  sheldonpang :0           2019-07-07 08:16 (:0)
  root     pts/0        2019-07-07 08:18 (10.211.55.2)
  • 如果要查看网络的联机状态,可以执行netstat -a命令
  [root@centos-linux usr]# netstat -a
  Active Internet connections (servers and established)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State      
  tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
  tcp        0      0 0.0.0.0:x11             0.0.0.0:*               LISTEN     
  tcp        0      0 centos-linux.sha:domain 0.0.0.0:*               LISTEN     
  tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
  tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
  tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
  tcp        0      0 centos-linux.shared:ssh 10.211.55.2:51394       ESTABLISHED
  tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
  tcp6       0      0 [::]:x11                [::]:*                  LISTEN     
  tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      
  • 查看后台执行的程序,可以使用ps-aux命令
  [root@centos-linux usr]# ps -aux
  USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  root         1  0.0  0.3 128540  7188 ?        Ss   08:16   0:02 /usr/lib/system
  root         2  0.0  0.0      0     0 ?        S    08:16   0:00 [kthreadd]
  root         3  0.0  0.0      0     0 ?        S    08:16   0:00 [ksoftirqd/0]
  root         5  0.0  0.0      0     0 ?        S<   08:16   0:00 [kworker/0:0H]
  root         7  0.0  0.0      0     0 ?        S    08:16   0:00 [migration/0]
  root         8  0.0  0.0      0     0 ?        S    08:16   0:00 [rcu_bh]
  root         9  0.0  0.0      0     0 ?        S    08:16   0:02 [rcu_sched]
1.4正确的关机方法
  • 关机常用的是shutdown这个命令,这个命令会通知系统内的各个进程(processes),并且将通知系统中的一些服务来关闭,shutdown可以完成如下的工作:1、自由选择关机模式(关机或者重启) 2、设置关机时间 3、自定义关机信息 4、可以仅发出警告信息
    [root@study ~]# shutdown -h now
       立刻关机,其中now相当于时间为0的状态
    [root@study ~]# shutdown -h 20:25
       系统在今天的20:25关机,若在21:25才执行此命令,则隔天关机
    [root@study ~]# shutdown -h +10
       系统户在过10分钟后自动关机
    [root@study ~]# shutdown -r now
        系统立刻重新开机
    [root@study ~]# shutdown -r +30 'The system will reboot'
        再过30分钟系统会重新启动,并显示后面的信息给所有在线者
    [root@study ~]# shutdown -k now 'The system will reboot'
        仅发出警告邮件的参数,系统并不会关机
    [root@study ~]# shutdown -c 
        取消已经在进行的shutdown命令内容
2.文件权限与目录配置
2.1 Linux文件属性
2.1.1 查看文件属性
  • 输入命令ls -al即可显示当前目录的文件的文件名与相关属性,-al表示列出所有文件的详细地权限与属性
  [root@localhost usr]# ls -al
  总用量 228
  drwxr-xr-x.  13 root root  4096 6月  29 13:27 .
  dr-xr-xr-x.  18 root root  4096 6月  29 13:36 ..
  dr-xr-xr-x.   2 root root 61440 6月  29 13:38 bin
  drwxr-xr-x.   2 root root  4096 4月  11 2018 etc
  drwxr-xr-x.   2 root root  4096 4月  11 2018 games
  drwxr-xr-x.  40 root root  4096 6月  29 13:30 include
  dr-xr-xr-x.  43 root root  4096 6月  29 13:37 lib
  dr-xr-xr-x. 145 root root 86016 6月  29 13:38 lib64
  drwxr-xr-x.  52 root root 12288 6月  29 13:31 libexec
  drwxr-xr-x.  12 root root  4096 6月  29 13:27 local
  dr-xr-xr-x.   2 root root 20480 6月  29 13:38 sbin
  drwxr-xr-x. 245 root root 12288 6月  29 13:31 share
  drwxr-xr-x.   4 root root  4096 6月  29 13:27 src
  lrwxrwxrwx.   1 root root    10 6月  29 13:27 tmp -> ../var/tmp

如上所述,当输入ls -al后,显示了当前目录下的所有文件的相关属性与权限,文件属性的示意图可按下面这样理解

  文件类型权限    链接数   文件拥有者   文件所属用户组   文件大小  文件最后被修改的时间  文件名
  dr-xr-xr-x.     2       root          root       61440     6月  29 13:38     bin
2.1.2 文件类型权限
  • 第一个字符代表这个文件是目录、文件或者链接文件等

  • 当为[ d ]则是目录

  • 当为[ - ]则是文件;

  • 若是[ l ]则表示为链接文档(link file);

  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

  • 接下来的字符中,以三个为一组,且均以【rwx】的三个参数的组合。其中【r】代表可读**(read)【w】代表可写(write)【x】代表可执行(execute)**。要注意,这三个权限的位置不会改变,如果没有权限,就会出现减号[-]

  • 第一组为文件拥有者可具备的权限,第二组为加入此用户组账号的权限,第三组为非本人且没有加入本用户组的其他账号的权限

2.1.3 链接数
  • 每个文件都会将它的权限与属性记录到文件系统的inode中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多不用的文件名链接到相同的一个inode号码
2.1.4 文件拥有者
  • 第三栏表示这个文件(目录)的拥有者账号
2.1.5 文件的所属用户组
  • 第四栏表示这个文件的所属用户组,在linux系统中,一个账号可以加入一个或多个的用户组中
2.1.6 文件的大小
  • 文件大小的默认单位为Bytes
2.1.7 文件最后被修改的时间
  • 第六栏为这个文件的创建日期或是最近的修改日期,这一栏的内容分别为日期(月/日)及时间,如果这个文件被修改的时间距离现在太久,那么时间部分会仅显示年份而已,如果想要显示完整地时间格式,可以利用ls的选项,即
[root@localhost usr]# ls -l --full-time
总用量 220
dr-xr-xr-x.   2 root root 61440 2019-06-29 13:38:47.042213188 +0800 bin
2.1.8文件名
  • 第七栏为文件名,比较特殊的是:如果文件名之前多一个【.】,则代表这个文件为隐藏文件
2.2 修改文件属性与权限
2.2.1 修改所属用户组
  • 使用chgrp(change group)即可修改一个文件的用户组
[root@study ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R: 进行递归修改,亦即连同子目录下的所有文件、目录都更新成为这个用户组之意,常常用在修改某一个目录内所有的文件之情况
范例:
[root@study ~]# chgrp users xxx.cfg
即可将xxx.cfg的用户组改变为users
2.2.2 修改文件拥有者
  • 使用chown(change owner) 即可修改文件的拥有者
[root@study ~]# chown [-R] 账号名称 文件或目录
[root@study ~]# chown [-R] 账号名称:用户组名称 文件或目录
选项与参数
-R: 进行递归修改,亦即连同子目录下的所有文件都修改
范例:
[root@study ~]# chown bin xxx.cfg
即可将xxx.cfg的文件拥有者改为bin
[root@study ~]# chown root:root xxx.cfg
即可将xxx.cf的文件拥有者和所属用户组改为root
2.2.3 修改文件的权限
  • 数字类型修改文件权限

    ​ Linux文件的基本权限就有9个,分别是拥有者(owner)、所属群组(group)、其他人(others)三种身份各有自己的读(read)、写(write)、执行(execute)权限,各权限的数字对照表如下:

  r:4
  w:2
  x:1	

​ 每种身份(owner、group、others)各自的三个权限(r、w、x)数字需要累加的,例如当权限为:(-rwxr-x—),数字则是:

owner = rwx = 4 + 2 + 1 = 7
group = r-x = 4 + 0 + 1 = 5
others = --- = 0 + 0 + 0 = 0

修改权限的命令chmod的语法是:

[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz:数字类型的权限属性,为rwx属性数值的相加
-R: 进行递归修改,亦即连同子目录下的所有文件都会修改	
范例:
[root@study ~]# chmod 777 xxx.xyz
即可将xxx.xyz的权限改为 -rwxrwxrwx
[root@study ~]# chmod -R 777 xxx
即可将xxx目录下的所有文件的权限属性改为 -rwxrwxrwx
  • 使用符号类型修改文件权限

    ​ 九个权限分别是(1)user、(2)group、(3)others三种身份,那么我们就可以藉由u、g、o来代表三种身份的权限,此外a代表全部的身份,命令可以如下的方式进行表示

            |    u       |    +(加入)    |    r   |
  chmod     |    g       |    -(移除)    |    w   |    文件或者目录名	
            |    o       |    =(设置)    |    x   |
            |    a       |              |        |

+-的状态下,没有指定到修改的权限并不会变动,而=下则会改变。修改的事例如下:

  假如需要设一个文件的权限成为 -rwxr-xr-x时,修改的命令为:
  [root@study ~]# chmod u=rwx,go=rx filename
  # 因为 group和others具有相同的权限,故可以使用无空格进行连接
  假如需要设一个文件的权限成为 -rwxr-xr--时,修改的命令为:
  [root@study ~]# chmod u=rwx,g=rx,o=r filename
  假如并不知道原文件的属性,但是需要为每一个人都添加写的权限,即可执行:
  [root@study ~]# chmod a+w filename
  如果去掉他人所有的执行权限,即执行:
  [root@study ~]# chmod a-x filename 
2.3 Linux目录配置
2.3.1 三层目录
/(root,根目录):与启动系统有关
/usr(unix software re-source) : 与软件安装/执行有关
/var(variable): 与系统运行过程有关
2.3.2 根目录
  • 根目录是 整个系统最重要的一个目录,因为不但所有的目录都由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关
目录应放置文件内容
/bin系统有很多存放执行文件的目录,但/bin比较特殊,因为**/bin防放置的是在单人维护模式下还能够被使用的命令**
/boot这个目录主要在放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件
/dev在Linux系统下,任何设备与接口设备都是以文件的姓氏存在于这个目录当中,只要通过读写这个目录下面的某个文件,就相当于读写某个设备
/etc系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但只有root有权利修改。
/srvsrv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要的数据目录,常见的服务例如WWW、FTP等
2.3.3 /usr目录
  • /usr里面放置的数据属于可分享不可变动,此中存放的是操作系统软件资源所放置的目录
2.3.4 /var目录
  • /var会在系统运行以后渐渐占用硬盘容量,因为/var目录主要针对经常性变动的大文件,包括缓存(cache)日志文件(log file)以及某些软件运行所产生的文件
3. 文件与目录管理
3.1 绝对路径与相对路径
  • 绝对路径

​ 由**根目录(/)**开始写起的文件名或目录名称,例如/home/sheldonpang

  • 相对路径

​ 相对于目前路径的文件名写法或者目录名称

. : 代表当前目录,也可以使用 ./ 来表示
.. : 代表上一层目录,也可以使用 ../ 来表示
##### 3.2 目录的相关操作
cd : 切换目录
pwd : 显示当前目录
mkdir : 建立一个新目录
rmdir : 删除一个 【空】 目录	
3.1.1 mkdir命令
[root@study ~]# mkdir [-mp]  目录名称
选项与参数:
-m : 设置文件的权限。直接设置,不使用默认权限(umask)
-p : 帮助你直接将所需要的目录(包含上层目录)递归创建
范例:
到/tmp目录下面尝试建立数个新目录
[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir test

[root@localhost tmp]# mkdir -p test1/test2/test3/
# 在默认的情况下,所需要的目录得一层一层地建,如果使用 -p 这个选项,则可以自动建立多层目录

使用默认权限(umask)建立一个目录
[root@localhost tmp]# mkdir test3
建立权限为 rwx--x--x的目录
[root@localhost tmp]# mkdir -m 711 test2

两者的权限对比为:
[root@localhost tmp]# ls -ld test*
drwx--x--x. 2 root root 4096 7月   7 21:27 test2
drwxr-xr-x. 2 root root 4096 7月   7 21:29 test3
3.1.2 rmdir(删除"空"目录)
  • 目录需要一层一层地删除,而且被删除的目录里面必定不能存在其他的目录或文件,这也就是所谓的空目录的意思,如果需要将所有目录下的东西都删除,这个时候必须使用rm -r 文件名来进行删除
3.2 文件与目录管理
3.2.1 文件与目录的查看:ls
[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称
[root@study ~]# ls [--full-time] 文件或者目录名称
选项与参数:
-a : 全部的文件,连同隐藏文件(开头为 . 的文件)一起列出来
-d : 仅列出目录本身,而不是列出目录内的文件数据
-l : 详细信息显示,包含文件的属性与权限等数据

--color=never :不要依据文件特性给予颜色显示
--color=always : 显示颜色
--color=auto : 让系统自行依据设置来判断是否给予颜色

--full-time : 以完整时间模式(包含年、月、日、时、分)输出
3.2.2 cp(复制文件或目录)
[root@study ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination)
[root@study ~]# cp [options] source1 source2 source3 ... directory
选项与参数:
-a : 相当于 -dr --preserve=all 的意思
-i : 若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行
-p : 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
-r : 递归复制,用于目录的复制操作
--preserve=all : 除了 -p 的权限相关参数外,还加入SELinux的属性、links、xattr等也复制
  • cp(复制)这个命令在不同身份者执行的情况下会有不同的结果产生,尤其是 -a-p的选项,对于不同身份来说,结果差异非常大。
  • 在默认的条件中,cp的源文件与目标文件的权限是不同的,目标文件的拥有者通常会是命令操作者本身,由于这个特性,因此当我们备份的时候,某些需要特别注意的特殊权限文件,不能直接以cp复制过来,而必须加上-a或者-p等可以完整复制文件权限的选项才行
[root@localhost tmp]# cp /var/log/wtmp .
[root@localhost tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 27648 7月   7 15:02 /var/log/wtmp
-rw-r--r--. 1 root root 27648 7月   8 08:41 wtmp
# 在不加任何选项的情况下,文件的某些属性/权限会改变,文件的建立时间也发生了改变,这是一个很重要的特性。

[root@localhost tmp]# cp -a /var/log/wtmp wtmp_2
[root@localhost tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 27648 7月   7 15:02 /var/log/wtmp
-rw-rw-r--. 1 root utmp 27648 7月   7 15:02 wtmp_2
#当加入 -a 选项之后,文件的所有属性都会复制过来,在备份的过程中,特别需要注意特殊权限文件
  • 当使用非root身份复制相关文件的时候,由于这个身份不能随意修改文件的拥有者与用户组,因此虽然能够复制文件的相关权限与时间等属性,但是与拥有者、用户组相关,原本这个身份无法进行的操作,即时加上了-a选项,也是无法完成完整地权限复制,例如:
[sheldonpang@localhost ~]$ cp -a /var/log/wtmp /tmp/wtmp_test
[sheldonpang@localhost ~]$ ls -l /var/log/wtmp /tmp/wtmp_test
-rw-rw-r--. 1 root        utmp        28800 7月   8 08:54 /var/log/wtmp
-rw-rw-r--. 1 sheldonpang sheldonpang 28800 7月   8 08:54 /tmp/wtmp_test
3.2.3 rm(删除文件或目录)
[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f :  就是force的意思,忽略不存在的文件,不会出现警告信息
-i : 交互模式,在删除前会询问使用者是否操作
-r : 递归删除,最常用语目录的删除,这是一个危险的选项
范例:
[root@localhost tmp]# rm -i wtmp
rm:是否删除普通文件 "wtmp"?y
# 当使用了-i模式下,会进行询问

[root@localhost tmp]# rm -i wtmp*
rm:是否删除普通文件 "wtmp_2"?y
rm:是否删除普通文件 "wtmp_test"?y
# *通配符代表0到无穷多个任意字符
3.2.4 mv(移动文件与目录,或重命名)
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 ... directory
选项与参数:
-f : force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i : 若目标文件(destination)已经存在时,就会询问是否覆盖
-u : 若目标文件已经存在,且source比较新,才会更新(update)

范例:
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]#mv bashrc mvtest
# 这样就将某个文件移动到某个目录

[root@study tmp]# mv mvtest mvtest2
# 这样就将文件进行重命名,Linux下还有个命令为rename,但该命令专职对多个文件名的同时命名,并非针对单一文件名的修改

  • 注意,如果有多个源文件或目录,则mv的目标文件一定是目录
3.2.5 获取路径的文件名与目录名
  • 每个文件的完整文件名包含了前面的目录与最终的文件名,而每个文件名的长度都可以达到255个字符,可以使用basnamedirname来进行获取
[root@localhost ~]# basename /etc/sysconfig/network
network
# 获取最后的文件名
[root@localhost ~]# dirname /etc/sysconfig/network
/etc/sysconfig
# 获取目录名
3.3 文件内容
3.3.1 直接查看文件内容
  • 直接查看文件内容可以使用cat/tac/nl这几个命令
  • cat(正向列示)
[root@study ~]# cat [-AbEnTv] 文件
选项与参数:
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号
-n : 打印出行号,连同空白行也会有行号,与 -b 的选项不同
范例:
[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m
  • tac(反向列示)
[root@localhost ~]# tac /etc/issue
Kernel \r on an \m
\S
# 与 cat 相比,反向输出
  • nl(添加行号打印)
[root@study ~]# nl [-bnw] 文件
选项与参数:
-b : 指定行号指定的方式,主要有两种:
    -b a : 表示不论是否为空行,也同样列出行号(类似于 cat -n)
    -b t : 如果有空行,空的那一行不要列出行号(默认值)
-n : 列出行号表示的方式,主要有三种:
   -n ln :行号在屏幕的最作坊显示
   -n rn :行号在自己栏位的最右方显示,且不加0
   -n rz :行号在自己栏位的最右方显示,且加0
-w  : 行号栏位的占用字符数
3.3.2 可翻页查看
  • more
[root@localhost ~]# more /etc/man_db.conf
# 
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man
#---------------------------------------------------------
--More--(18%)

当more后面接的文件内容行数大于屏幕输出的航舒适,就会出现在最后一行显示出目前显示的百分比,还可以在最后一行输入一些有用的命令,这些命令是:

空格键 : 代表向下翻一页
Enter :  代表向下翻一行
/字符串 : 代表在这个显示的内容当中,向下查找字符串这个关键词
:f  :立刻显示出文件名以及目前显示行数
q : 代表立刻离开more,不再显示该文件内容
b 或者 [ctrl]-b : 代表往回翻页,不过这操作只对文件有用,对管道无用
  • less
[root@localhost ~]# less /etc/man_db.conf

# 
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
#
.......
:   <== 这里可以等待你输入命令

less的用法比more更具有弹性,使用less不仅可以向前翻,还可以向后翻,而且可以向前、向后进行查找,在less模式下可以输入的命令有:

空格键 : 向下翻动一页
[pagedown] : 向下翻动一页
[pageup] : 向上翻动一页
/字符串 : 向下查找字符串的功能
?字符串 : 向上查找字符串的功能
n : 重复前一个查找(与 / 或 ? 有关)
N : 反向的重复前一个查找 (与 / 或 ? 有关)
g : 前进到这数据的第一行
G :前进到这个数据的最后一行
q :离开less这个程序
3.3.3 数据截取
  • head(取出前面几行)
[root@study ~]# head [-n number] 文件
选项与参数:
-n : 后面接数字,代表显示几行的意思
范例:
[root@localhost ~]# head -n 5  /etc/man_db.conf
# 
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
-------------------------------
# 如果后面100行都不打印,只打印100行之前的所有数据
[root@localhost ~]# head -n -100 /etc/man_db.conf
# 
# This file is used by the man-db package to configure the man and cat paths.
# --------------------------------------------------------
# MANDATORY_MANPATH			manpath_element
....

  • tail(取出后面几行)
[root@study ~]# tail [-n number] 文件
选项与参数:
-n : 后面接数字,代表显示几行的意思
-f : 表示持续刷新显示后面所接文件中的内容,要等到按下[ctrl]-c才会结束
范例:
#默认情况下,显示最后的10行
#若要显示最后的20行,则
[root@localhost ~]# tail -n 10  /etc/man_db.conf
# 如果不知道文件有多少行,却只想列出100行以后的数据时
[root@localhost ~]# tail -n +100  /etc/man_db.conf
3.3.5 非纯文本文件:od
  • 当需要查看非文本文件时,可以使用od命令来进行读取
[root@study ~]# od [-t TYPE] 文件
-t : 后面可以接各种[类型(TYPE)]的输出,例如:
   a        : 利用默认的字符来输出
   c        : 利用ASCII字符来输出
   d[size]  : 利用十进制(decimal)来输出数据,每个整数占用size Bytes
   f[size]  : 利用浮点数值(floating)来输出数据,每个数占用size Bytes
   o[size]  : 利用八进制(octal)来输出数据,每个整数占用size Bytes
   x[size]  : 利用十六进制(hexadecimal)来输出数据,每个整数占用size Bytes
范例:
#将/usr/bin/passwd的内容使用ASCII方式来显示
[root@localhost ~]# od -t c /usr/bin/passwd
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020 003  \0   >  \0 001  \0  \0  \0 364   3  \0  \0  \0  \0  \0  \0
0000040   @  \0  \0  \0  \0  \0  \0  \0   x   e  \0  \0  \0  \0  \0  \0
....
# 最左边第一列是以八进制来表示Bytes
# 第二行0000020代表开头是第十六个byte(2*8)的内容之意
-------------------------
# 将/etc/issue这个文件的内容以八进制列出存储值与ASCII的对照表
[root@localhost ~]# od -t oCc /etc/issue
0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040
          \   S  \n   K   e   r   n   e   l       \   r       o   n    
0000020 141 156 040 134 155 012 012
          a   n       \   m  \n  \n
0000027
# 每个字符可以对应到八进制的数值,S对应的数值是123 即(1*8^2+2*8+3)=83的数值
--------------
# 通过管道命令可立刻找到某个字符串的ASCII对照
[root@localhost ~]# echo sheldonPeng | od -t oCc
0000000 163 150 145 154 144 157 156 120 145 156 147 012
          s   h   e   l   d   o   n   P   e   n   g  \n
0000014
3.3.6 修改文件时间或创建新文件:touch
  • 三个时间参数

    • 修改时间(modification time , mtime):当该文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限
    • 状态时间(status time,ctime): 当该文件的【状态(status)】改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间
    • 读取时间(access time, atime) :当【该文件的内容被读取】时,就会更新这个读取时间(access),举例来说,当我们使用cat去读取/etc/man_db.conf,就会更新该文件的atime
  #当前时间
  [root@localhost ~]# date
  2019年 07月 08日 星期一 11:29:13 CST
  # mtime 修改时间或建立时间
  [root@localhost ~]# ls -l /etc/man_db.conf 
  -rw-r--r--. 1 root root 5171 10月 31 2018 /etc/man_db.conf
  # atime 上一次读取的时间
  [root@localhost ~]# ls -l --time=atime  /etc/man_db.conf
  -rw-r--r--. 1 root root 5171 7月   7 19:19 /etc/man_db.conf
  # ctime 上一次更新状态的时间
  [root@localhost ~]# ls -l --time=ctime /etc/man_db.conf
  -rw-r--r--. 1 root root 5171 6月  29 13:31 /etc/man_db.conf
  • 修改文件时间
[root@study ~]# touch [-acdmt] 文件
选项与参数:
-a : 仅自定义access time(读取时间)
-c : 仅修改文件的时间,若该文件不存在则不建立新文件
-d : 后面可以接欲定义的日期而不使用目前的日期,也可以使用 --date="日期或时间"
-m : 仅修改mtime
-t : 后面可以接欲自定义的时间而不使用目前的时间,格式为[YYYYMMDDhhmm]
  • 注意,通过touch我们可以轻易地自定义文件的日期与时间,并且也可以建立一个空文件,不过,即使我们复制一个文件时复制了所有的属性,也没有办法复制ctime这个属性
  • touch命令常用的情况是:1) 建立一个空间 2)将某个文件日期自定义为目前(mtime和atime)
3.4 文件与目录的默认权限与隐藏权限
3.4.1 文件默认权限umask
  • umask就是制定目前用户在建立文件或目录时的权限默认值,查看方式为:
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
[root@localhost ~]# umask
0022
  • 在默认权限的属性上,目录与文件是不一样的,x权限对于目录是非常重要的,但是一般文件的建立则不应该有执行的权限,因为一般文件通常是用于数据的记录,所以,两者的默认权限为:
#若用户建立为文件,那么默认没有x权限,即只有 r w 两个权限,也就是最大为666,即默认权限为:
-rw-rw-rw
#若用户建立为目录,则由于x权限与能否进入目录有关,因此默认为所有权限开房,也就是777,即默认权限为:
drwxrwxrwx
  • umask的数字指的是该默认值需要减掉的权限,因为r、w、x分别代表4、2、1,所以022的意思就是 user并没有被拿掉权限,而groupother被拿掉了w的权限,那么当用户
#建立文件时:
(-rw-rw-rw) - (-----w--w-) ==> -rw-r--r--
#建立目录时:
(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
  • 如果默认为022的时候,意思为新建的数据只有用户自己具有w权限,同用户组的人只有r这个可读的权限,并无法修改,所以,当我们需要新建文件给同用户组的用户共同编辑的时候,umask 最好设置为 002
3.4.2 文件的特殊权限 :SUID、SGID、SBIT
  • SUID(Set UID)的限制与功能:
- SUID权限仅对二进制程序有效
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
  • SGID(Set GID)可以只对文件或目录设置,对文件来说其具有如下功能
- SGID对二进制程序有用
- 程序执行者对于该程序来说,需要具备x权限
- 执行者在执行的过程中将会获得该程序用户组的支持

如果对目录来说,具有如下功能

- 用户若对于此目录具有r与x权限时,该用户能够进入此目录
- 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组
- 用途:若用户在此目录下具有w权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同
  • SBIT(Sticky Bit)仅针对目录有效,其对于目录的功能是
- 当用户对于此目录具有w、x权限,即具有写入的权限
- 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件

# 如果将A目录加上了SBIT的权限选项时,则甲只能针对自己建立的文件或目录进行删除、更名、移动等操作。而无法删除他人的文件
3.5 命令与文件的查找
3.5.1 脚本文件的查找
  • which(查找【执行文件】)
[root@study ~]# which [-a] command
选项与参数:
-a : 将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称
范例:
[root@localhost ~]# which ifconfig
/usr/sbin/ifconfig

which这个命令是根据**【PATH】**这个环境变量所规范的路径,去查找执行文件的文件名,所以重点是找出执行文件而已,且which后面接的是完整的文件

3.5.2 文件的查找
  • whereis(由一些特定的目录中查找文件)
[root@study ~]# whereis [-bmsu] 文件或目录名
选项与参数:
-l : 可以列出whereis会去查询的几个主要目录
-b : 只找二进制格式的文件
-m : 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 查找不在上述三个项目当中的其他特殊文件
范例:
[root@localhost ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

whereis只找几个特定的目录,并没有全系统地去查询,whereis主要是针对/bin/sbin下面的执行文件,以及/usr/share/man下面的man page文件,跟几个比较特定的目录来处理,如果想知道whereis到底查了多少目录,可以使用whereis -l来确认一下

  • locate / updatedb
[root@study ~]# locate [-ir] keyword
选项与参数:
-i : 忽略大小写的差异
-c : 不输出文件名,仅计算找到的文件数量
-l : 仅输出几行的意思,例如输出五行则是 -l 5
-S : 输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
-r : 后面可接正则表达式的显示方式
范例:
[root@localhost ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

locate寻找数据特别快,这是因为locate寻找的数据是由已建立的数据/var/lib/mlocate里面的数据所查找到的,不用直接从硬盘中读取数据,但其也有限制,因为它是经由数据库来查找的,而数据库的建立默认是在每天执行一次,所以当新建立起的文件无法查找,这个时候输入updatedb更新locate数据库后进行查找

  • find
[root@study ~]# find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项 : 共有 -atime、 -ctime、 -mtime
   以 -mtime说明
     -mtime n  : n为数字,意义为在n天之间的[一天之内]被修改过内容的文件
     -mtime +n : 列出在n天之前(不含n天本身)被修改过内容的文件
     -mtime -n : 列出在n天之内(含n天本身)被修改过内容的文件
  -newer file :file为一个存在的文件,列出比file还要新的文件
  范例:
  [root@localhost ~]# find /etc -mtime 0
  /etc
  /etc/resolv.conf
2. 与使用者或用户组名称有关的参数
  -uid n : n为数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面与账号名称对应的数字
  -gid n : n为数字,这个数字是用户组名称的ID,亦即GID,这个GID记录在/etc/group
  -user name : name为使用者账号名称
  -group name : name为用户组名称
  -nouser : 查找文件的拥有者不在/etc/passwd中
  -nogroup : 查找文件的拥有用户组不存在于/etc/group的文件,当你自行安装软件时,很可能该软件的属性当中并没有文              件拥有者,在这个时候,使用 -nouser 与 -nogroup进行查找
4. shell与shell script
4.1 vim
4.2 BASH
1. 管道命令
  • 管道命令使用的|这个界定符号,管道命令|仅能处理经由前面一个命令传来的正确信息,也就是标准输出信息,对于标准错误并没有直接处理的能力
  • 在每一个管道后面接的第一个数据必定是【命令】,而且这个命令必须要能够接收标准输入的数据才行,这样的命令才可为管道命令,例如lessmoreheadtail等都是可以接收标准输入的管道命令
1.1.1 选取命令 cutgrep
  • cut命令可以将一段信息的某一段切出来,其处理的信息是以【行】为单位
[root@study ~]# cut -d '分隔符' -f fields  <==用于有特定的分隔字符
[root@study ~]# cut -c 字符区间     <==用于排列整齐的信息
选项与参数:
-d : 后面接分隔字符,与 -f 一起使用
-f : 根据 -d 的分隔字符将一段信息划分为数段,用 -f 取出第几段的意思
-c : 以字符(characters)的单位取出固定字符区间
范例:
# 将PATH变量取出,找出第五个路径
[root@localhost bin]# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost bin]# echo ${PATH} | cut -d ':' -f 5
/root/bin
  • grep是分析一行信息,若当中有我们所需要的信息,就将该行拿出来
[root@study ~]# grep [-acinv] [--color=auto] '查找字符' filename
选项与参数:
-a : 将二进制文件以文本文件的方式查找数据
-c : 计算找到'查找字符'的次数
-i : 忽略大小写的不用,所以大小写视为相同
-n : 顺便输出行号
-v : 反向选择,亦即显示出没有'查找字符'内容过得那一行
--color=auto : 可以将找到的关键字部分加上颜色的显示
范例:
# 查找last,有出现root的那一行就取出
[root@localhost bin]# last | grep 'root'
root     pts/0        192.168.1.100    Mon Jul  8 10:36   still logged in   
root     pts/0        192.168.1.100    Mon Jul  8 08:52 - 08:54  (00:01) 
# 查找last,没有出现root的那一行就取出
[root@localhost bin]# last | grep -v 'root'
sheldonp pts/0        192.168.1.100    Mon Jul  8 08:54 - 09:12  (00:17)    
sheldonp pts/2        192.168.1.102    Sun Jul  7 14:11 - 14:12  (00:01)    
# 查找last,在取出root之后再用cut命令进行截取
[root@localhost ~]# last | grep 'root' | cut -d ' ' -f 1
root
root
1.1.2 排序命令:sort、wc、uniq
  • sort可以帮我们进行排序,而且可以根据不同的数据形式来排序,排序的字符与语系的编码有关
[root@study ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f : 忽略大小写的差异,例如A与a视为编码相同
-b : 忽略最前面的空格字符部分
-M : 以月份的名字来进行排序,例如JAN、DEC等的排序方法
-n : 使用[纯数字]来进行排序(默认是以文字形式来排序)
-r : 反向排序
-u : 相同的数据中,仅出现一行代表
-t : 分隔字符,模式是用[tab]键来进行分隔
-k : 以哪个区间(field)来进行排序的意思
范例:
[root@localhost ~]# cat /etc/passwd | sort
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
....

  • uniq将重复的数据仅列出一个显示
[root@study ~]# uniq [-ic]
选项与参数:
-i : 忽略大小写字符的不同
-c :进行计数
范例:
[root@localhost ~]# last | cut -d ' ' -f 1 | sort | uniq
reboot
root
sheldonp
wtmp
---------
[root@localhost ~]# last | cut -d ' ' -f 1 | sort | uniq -c
      8 reboot
     16 root
     20 sheldonp
      1 wtmp
  • wc计算输出信息的整体数据
[root@study ~]# wc [-lwm]
选项与参数:
-l : 仅列出行
-w : 仅列出多少字(英文字母)
-m : 多少字符
范例:
[root@study ~]# wc [-lwm]
选项与参数:
-l : 仅列出行
-w : 仅列出多少字(英文字母)
-m :多少字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值