Linux 内核是什么

  1. Linux 内核,即 Linux 操作系统的核心。它主要由以下模块组成:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    进程管理
    定时器
    中断管理
    内存管理
    模块管理
    虚拟文件系统接口
    文件系统
    设备驱动程序
    进程间通信
    网络管理
    系统引导
  2. Linux 默认有 7 个运行级,从运行级 0 到运行级 6,每一个运行级所对应的含义如下:

    1
    2
    3
    4
    5
    6
    7
    运行级0:关机。
    运行级1:单用户模式,系统出现问题时可使用这种模式进入系统维护,典型的使用场景是在忘记root密码时可进入此模式修改root密码。
    运行级2:多用户模式,但是没有网络连接。
    运行级3:完全多用户模式,这也是Linux服务器最常见的运行级。
    运行级4:保留未使用。
    运行级5:窗口模式,支持多用户,支持网络。
    运行级6:重启
  3. 通过多种方式来访问和使用 Shell

    1
    2
    3
    终端——Linux桌面提供基于GUI的登录系统。一旦登录你就可以通过运行X终端(XTerm)、Gnome终端(GTerm)或KDE终端(KTerm)应用程序来访问Shell。
    安全Shell连接(SSH)——可以通过它远程登录服务器或工作站来访问其Shell。
    控制台——一些Linux系统同样提供基于文本的登录系统。通常情况下,登录系统后就可以直接访问Shell。
  4. 以使用如下命令查看系统中所有可用的 Shell:cat /etc/shells

    1
    2
    3
    4
    5
    6
    7
    #显示如下
    /bin/sh
    /bin/bash
    /sbin/nologin
    /bin/tcsh
    /bin/csh
    /bin/ksh
  5. Shell 脚本是 Linux/Unix 编程环境的基本组成部分。Shell 脚本一般由以下几部分构成:

    1
    2
    3
    4
    5
    6
    Shell关键字——例如ifelsefor dodone
    Shell命令——例如exportechoexitpwdreturn
    Linux命令——例如datermmkdir
    文本处理功能——例如awk,cut,sed,grep。
    函数——通过函数把一些常用的功能放在一起。例如,/etc/init.d目录中的大部分或全部系统Shell脚本所使用的函数都包含在文件/etc/init.d/functions中。
    控制流语句——例如ifthenelse或执行重复操作的Shell循环。

chmod 755 myScript.sh 755 将给你读写和执行的权限,其他人将只有读和执行的权限 如果你希望你的脚本是私有的(即,只有你可以读写和 执行),则请使用 700 替代

Bash Shell

  1. Bash 是一个与 Bourne Shell 兼容的、执行从标准输入设备或文件读取的命令的命令语言解释器。Bash 是 Bourne-Again Shell 的缩写。

  2. 与登录 Shell 相关的文件

    1
    2
    3
    4
    5
    6
    7
    8
    /etc/profile——系统级的初始化文件,定义了一些环境变量,由登录Shell调用执行。
    /etc/bash.bashrc或/etc/bashrc——其文件名根据不同的Linux发行版而异,每个交互式Shell的系统级的启动脚本,定义了一些函数和别名。
    /etc/bash.logout——系统级的登录Shell清理脚本,当登录Shell退出时执行。部分Linux发行版默认是没有此文件。
    $HOME/.bash_profile、$HOME/.bash_login、
    $HOME/.profile——用户个人初始化脚本,由登录Shell调用执行。这三个脚本只有一个会被执行,按照此顺序查找,第一个存在的将被执行。
    $HOME/.bashrc——用户个人的每个交互式Shell的启动脚本。
    $HOME/.bash_logout——用户个人的登录Shell清理脚本,当登录Shell退出时执行。
    $HOME/.inputrc——用户个人的由readline使用的启动脚本,定义了处理某些情况下的键盘映射

Bash 命令常识

  1. 当用户登录时,登录 Shell 会调用如下脚本:

    1
    2
    3
    4
    5
    /etc/profile——当用户在运行级别3登录系统时首先运行
    /etc/profile.d——当/etc/profile运行时,会调用该目录下的一些脚本
    $HOME/.bash_profile、$HOME/.bash_login和$HOME/.profile——在/etc/profile运行后,第一个存在的被运行
    $HOME/.bashrc ——上述脚本的中一个运行后即调用此脚本
    /etc/bashrc或/etc/bash.bashrc——由$HOME/.bashrc调用运行
  2. 当一个交互式的非登录 Shell 启动时,Bash 将读取并运行如下脚本:

    1
    2
    3
    4
    $HOME/.bashrc——如果此文件存在即被运行。
    /etc/bashrc——将被$HOME/.bashrc调用运行。
    /etc/profile.d——此目录下的脚本将被/etc/bashrc或
    /etc/bash.bashrc调用运行
  3. Bash 启动脚本主要设置的环境有:

    1
    2
    3
    4
    5
    6
    设置环境变量PATH和PS1
    通过变量EDITOR设置默认的文本编辑器
    设置默认的umask(文件或目录的权限属性)
    覆盖或移除不想要的变量或别名
    设置别名
    加载函数
  4. Bash 退出脚本

    1
    2
    3
    4
    5
    当登录Shell退出时,如果$HOEM/.bash_logout脚本存在的话,Bash会读取并执行此脚本的内容
    此脚本主要用途:
    使用clear命令清理你的终端屏幕输出;
    移除一些临时文件
    自动运行一些命令或脚本等
  5. Shell 中的变量

    1
    2
    3
    4
    5
    变量是任何程序或脚本的重要组成部分。变量为程序或脚本访问内存中的可被修改的一块数据提供了简单的方式。

    Linux Shell中的变量可以被指定为任意的数据类型,比如文本、或是数值。你也可以通过修改Shell中的变量来改变Shell的样式。

    接下来就让我们来了解和学习一下Shell中的变量。
  6. Shell 中变量的类型
    Shell 中有两种变量的类型:系统变量(环境变量)和用户自定义的变量(本地变量或 Shell 变量)。
    系统变量是由 Linux Bash Shell 创建和维护的变量。你可以通过修改系统变量,如 PS1、PATH、LANG、HISTSIZE 和 DISPLAY 等,配置 Shell 的样式。
    ![](1-Shell 学习/d5315f89a299bc8d0a2318a6ae359453.png)

Shell 变量赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1. varName=VaeValue 赋值语句=两边不能有空格
2. 注意Shell的默认赋值是字符串赋 如
var=1
var=$var+1
echo $var
输出 1+1
3. 在Bash中,如果要将算术表达式的数值赋值给一个变量,可以使用let命令
let var=2+1
echo $var
输出 3
4. 将命令的执行结果赋值给变量,如下所示:
var='pwd'
echo $var
输出 /home/yantaol
5. 或者也可以使用$(…)来实现同样的功能:
var=$(pwd)
echo $var
输出 /home/yantaol
6. Bash的内置命令read读入的内容赋值给变量
echo -n "输入变量值:"; read var
Enter var:123
echo $var
输出 123
7. export语句的使用
Bash的内置命令export会将指定给它的变量或函数自动输出到后续命令的执行环境。export命令的语法如下所示:
export [-fnp] [变量或函数名称]=[变量设置值]
-f选项表示export一个函数;
-n选项表示将export属性从指定变量或函数上移除;
-p选项打印当前Shell所有输出的变量,与单独执行export命令结果相同。
8. 删除变量
unset 变量名
9. 命令历史 (命令历史保存在缓冲区或是默认文件~/.bash_history中,其保存命令的多少由环境变量 HISTSIZE 定义 )
history
ctrl+r组合键后输入相应的关键字可以搜索历史命令
Shell命令行提示符下,可以简单地输入!!,来重复执行上一条执行过的命令
8. 回调最近一次执行的以指定字符开头的命令,如下所示:

![](1-Shell 学习/b7b5a1a2362c3ad780ef51257866e848.png)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
9. 以使用由history命令列出的列表的行号来重新调用相应的历史命令
$ history
……
990  uptime
991  uptime
992  man svn
993  history
994  pwd
995  history
#调用991行命令
$ !991

10. Shell中扩展的方式有8
按扩展的先后顺序排序:
大括号扩展、
波浪号扩展、
参数和变量扩展、
命令替换、
算术扩展、
进程替换、
单词拆分
文件名扩展
大括号扩展是一种能够生成任意字符串的机制
$ echo a{b,c,d}e
abe ace ade
波浪号扩展
$ echo {a..z}            #按字母表顺序显示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
大括号扩展也可以是嵌套的。每个扩展字符串的结果是不排序的
$ echo {a,b{1..3},c}
a b1 b2 b3 c
波浪号扩展可用来指代你自己的主目录,或其他人的主目
$ cd ~     #进入你自己的主目录
$ cd ~fred            #进入用户fred的主目录
如果波浪号前缀是“~+”,则它会被Shell变量PWD的值代替
$ echo ~+
/tmp
如果波浪号前缀是“~-”,则它会被Shell变量LODPWD的替代
echo ~-
/home/yantaol
命令替换是用命令的输出替换命令本身,命令替换有如下两种形式:
$(COMMAND)
或者
'COMMAND'
Bash进行这个扩展时,先执行命令,然后用命令的标准输出结果取代命令替换,命令的标准输出结果中最后面的换行符会被删除
$ echo $(uptime)
17:10:35 up 2 days, 11:070 users, load average: 0.000.000.00
如果Bash中没有设置-f选项,就会支持文件名扩展。Bash支持以下三种通配符来实现文件名扩展
* ——匹配任何字符串,包括空字符串。
? ——匹配任意单个字符。
[…]——匹配方括号内的任意字符。

  1. 命令别名
    为了方便,对于频繁使用的命令可以在文件 ~/.bashrc 文件下为这些命令创建别名,创建别名语法如下

    1
    2
    3
    4
    5
    alias name='command'
    name——用户定义的用于别名的任意简短的名字。
    command——任意Linux命令
    #alias不带任何参数即列出所有别名
    $ alias
  • Bash 的内置命令 set 和 shopt 可以用于设置 Shell 选项
  • 每次登录时自动设置你的 Shell 提示符, 需要将环境变量 PS1 放在你的~/.bashrc 文件中,并使用 export 命令将其输出到其他子命令

查看文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
ll 、cat -n 、cat test test1 > test2、more /etc/inittab、
cat README | more 、less /etc/fstab、
head -n 5 /etc/inittab
tail -n 10 /etc/inittab

$ file /etc/inittab
/etc/inittab: ASCII English text
使用用-i选项,可以MIME类型的格式显示文件类型的信息
使用-N选项,输出的队列可以以在文件名之后无空白填充的形式显示,其格式对比 如下:
$ file -N *

wc命令用于查看文件的行数、单词数和字符数等信息。其语法类似如下所示:
wc filename
X  Y Z filename

X:表示行数。
Y:表示单词数。
Z:表示字节数。
filename:表示文件名
wc /etc/inittab
53  229 1666 /etc/inittab

find
find /etc -name inittab

在当前目录下,查找名称为inittab的文件:
find . -name inittab
找出当前目录下,文件名不区分大小写是example的所有文件:
$ find . -iname example
找出当前目录下,目录名是tmp的目录:
find . -type d -name tmp
找出当前目录下,文件权限是777的所有文件:
find . -type f -perm 0777
找出当前目录下,文件权限不是777的所有文件:
find . -type f ! -perm 777
找出/etc/目录下所有只读文件:
find /etc -type f ! -perm /a+w
找出你账号的主目录下的所有可执行文件:
find ~ -type f -perm /a+x
出/tmp目录下的.log文件并将其删除:
find /tmp/ -type f -name "*.log" -exec rm -f {} \;
找出当前目录下的所有空文件:
find . -type f -empty
找出当前目录下的所有空目录
find . -type d –empty
找出/tmp目录下的所有隐藏文件:
find /tmp/ -type f -name ".*"
找出/tmp目录下,所有者是root的文件和目录:
find /tmp/ -user root
找出/tmp目录下,用户组是developer的文件和目录:
find /tmp/ -group developer
找出你账号的主目录下,3天前修改的文件:
find ~ -type f -mtime 3
找出你账号的主目录下,30天以前修改的所有文件:
find ~ -type f -mtime +30
找出你账号的主目录下,30天以前60天以内修改的所有文件:
find ~ -type f -mtime +30 -mtime -60
找出/etc目录下,一小时以内变更过的文件:
find /etc -type f –cmin -60
找出/etc目录下,一小时以内访问过的文件:
find /etc -type f -amin -60
找出你账号的主目录下,大小是50MB的所有文件:
find ~ -type f -size 50MB
找出你账号的主目录下,大于50MB小于100MB的所有文件:
find ~ -type f -size +50MB -size -100MB

操作文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
touch命令实例:创建文件
touch命令就可用于创建、变更和修改文件的时间戳。它是
Linux操作系统的标准程序。touch命令有如下选项。
-a:只改变访问时间。
-c:不创建任何文件。
-m:只改变修改时间。
-r:使用指定文件的时间替代当前时间。
-t:使用[[CC]YY]MMDDhhmm[.ss]替代当前时间。
你可以同时使用-c和-t选项,来明确设置文件的时间,命令格式如下所示:
touch -c -t YYMMDDHHMM filename
如果想使用文件myeffyl的时间戳更新文件effyl的时间戳,那么可以使用-r选项:
touch -r myeffyl effyl

mkdir -p /home/yantaol/backup/old
mkdir -p -m a=rwx backup/old

cp
使用-p选项,可以使复制一个文件到新文件时,保留源文件的所有者、用户组、权限、修改和访问时间,以及一些扩展属性等信息:
使用-R或-r选项,可以递归地复制一个目录,即将一个目录及其下的所有文件和子目录都复制到另一个目录
cp -a * /home/yantaol/backup
-a:存档模式。相当于-dpR。
-d:保留软链接。
-p:保留权限、所有权和时间戳等信息。
-R:递归地复制目录。

ln
软链接又称符号链接,是一类特殊的文件,这个文件包含了另一个文件或目录的路径名(绝对路径或相对路径)。在对符号文件进程读或写操作时,系统会自动把该操作转换为对源文件或目录的操作,但输出链接文件时,系统仅仅删除链接文件,而不删除源文件或目录本身。软链接可以链接不同文件系统的文件
硬链接可以理解为一个文件的一个或多个文件名。它引用的是文件在文件系统中的物理索引(也称为inode)。当你移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果你删除的文件有相应的硬链接,那么这个文件依然会被保留,直到所有对它的引用都被删除,即硬链接数为0。硬链接只能链接同一文件系统中的文件。
使用-s选项,可以创建一个软链接
ln -s /full/path/of/original/file /full/path/of/symbolic/link/file

ls -l /home/yantaol/lib/ library.so
在目录/home/yantaol/lib下创建一个软链接library.so,链接到/home/yantaol/src/ library.so:
ln -s /home/yantaol/src/library.so /home/yantaol/lib
当前目录下,创建文件src_original.txt的硬链接,名称为dst_link.txt。两个文件的inode编码应该相同:
ln src_original.txt dst_link.txt
#注意: Linux 不允许给目录创建硬链接

mv命令实例:重命名文件或目录

rm命令实例:删除文件或目录

管理文件或目录权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ls -l:显示文件和目录权限
# chmod 命令根据相应的模式修改每个给定文件的权限。
# 这里的模式有两种:一种是符号表达式模式,另一种是八进制位模式。
chmod \[OPTION\]…\[ugoa\]\[\[+-=\]\[rwxug\]\]\[,...\] FILE…
字母“ugoa”的组合控制哪些用户对文件的访问权限将被改
u:指文件或目录的所有者。
g:指文件或目录的用户组的成员。
o:指不在文件或目录的用户组中的其他用户。
a:指所有用户,即(ugo)

操作符“+-=”表示权限的授予或撤销。
+:选定的权限将被添加。
-:选定的权限将被移除。
=:文件只拥有选定的权限。

注意:如果使用 chmod 命令的符号表达式模式时,不给出“ugoa”的组合,则得到的结果和使用“a”相同。

1
2
3
4
5
6
7
8
9
10
11
赋予所有人对文件读、写和执行的权限:
chmod ugo+rwx example.sh
chmod 777 example.sh
# 赋予文件的所有者和用户组成员读写权限,其他用户只读权限:
chmod 664 example.sh
# 使用-R 选项,chmod 命令可以递归地修改目录权限 如:
chmod -R 755
# 将 chmod 命令与 find 命令结合使用
find . -type d -exec chmod -R 775 {} \


chown 命令用于修改文件或目录的所有者和用户组信息

1
2
3
4
5
6
7
chown [OPTION]… [OWNER][:[GROUP]] FILE
# 将文件 example.sh 的所有者修改为 root
chown root example.sh
# 同时修改文件 example.sh 的所有者和用户组:
chown yantaol:yantaol example.sh
# chown 不能修改软连所指向目录的所有者或者用户组 需要使用 `-H` 选项:
chown -R -H yantaol:yantaol linux_symlnk

chgrp 命令与 chown 类似,只是不能修改其所有者
setuid(设置用户标识)是允许用户以文件所有者的权限执行一个程序的权限位
setgid(设置组标识)是允许用户以用户组成员的权限执行一个程序的权限位

文本处理

locale 配置

sort、uniq 等命令的输出结果,会受到 linux 系统中 locale 配置的影响。而大部分 linux 系统的默认 locale 配置,要么为空,要么为 “en_US.utf-8”。

顾名思义,locale 代表本地化的意思,它定义了系统运行时所依赖的语言环境。所以,不同的区域设置,注定会导致程序运行的输出格式不一致。

让我们来看下,locale 配置究竟包含哪些变量。输入 locale 命令,查看当前系统的环境设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
...
LC_IDENTIFICATION="en_US.UTF-8"LC_ALL=


# 其中
LANG:用于设定LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则会默认使用该值
LC_COLLATE:变量,决定排序能否正常执行
LC_ALL:是一个宏,如果该值指定了,则会覆盖所有LC_*的值。注意,LANG值并不受该宏的影响
locale设置的优先级关系:LC_ALL > LC_* > LANG

# locale 包含了一组 LC_开头的变量,但 LC_ALL 除外。
# 在终端中直接 echo $LC_COLLATE 等变量,可以输出对应变量的值。
# echo $LC_ALL,抱歉,啥都没有。因为它根本就不是一个变量!

# $LC_ALL 是 glibc(祖宗级别的 c 函数库,linux 系统中最底层的 api)中定义的一个宏,LC_ALL = C 实际上是调用了 setlocale 函数,把所有以 LC_*开头的变量设置了一遍。

# 所以,在中文处理场景下,使用 sort、uniq 等命令时,建议在 shell 脚本中,添加 export LC_ALL = C ,保证程序可以输出正确的的执行结果。

# 乱码问题
LC_ALL=C sort a.txt | LC_ALL=C uniq

sort 命令实例:文本排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 不使用任何选项,sort命令简单地将文件内容按字母顺序排序:
$ sort example.txt
abc
def
def
ghi
jkl
mno
# 使用-u 选项(uniq),sort命令可以移除所有重复的行(上例中,重复的记录“def”被移除)
# 使用-n选项,可以使sort命令将数字按数值的大小排序:(否则按照首字母排序,100 会排到20前面)
# 使用-r选项,可以使sort命令以倒序方式排序

# 如果一个文件有多个列(例中,每列以逗号“,”分隔)
# 指定sort命令按照第二列的字符串顺序将文件内容排序:
sort -t ',' -k2,2 example.txt
# -t选项用于指定列的分隔 ,默认使用空格作为分隔符
# -k选项用于指定进行排序的

# -k选项的具体语法格式,如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
# 语法格式可以被其中的逗号( , )分为两大部分,Start部分和End部分。
# Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。
# 我们重点说说Start部分的FStart和C.Start。
# 1. FStart.CStart,其中FStart就是表示使用的域
# 2. 而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
# 3. CStart也是可以省略的,省略的话就表示从本域的开头部分开始。
# 4. 同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”

# 指定sort命令按照第二列的数值顺序的倒序将文件内容排序:
sort -t ',' -k2nr,2 example.txt

# 按第1列的第二、三个字符,按数字逆序排序
sort -k 1.2, 1.3nr example.txt



uniq 文本去重

uniq 命令用于移除或发现文件中重复的条目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
使用uniq命令,不带有任何选项时,它将移除文件中重复的行并显示单一行:
uniq example.txt 
使用-c选项,可以统计重复行出现的次数:
uniq -c example.txt
2 aaa
3 bbb
1 ccc
使用-d选项,只显示文件中有重复的行并只显示一次:
uniq -d example.txt
aaa
bbb
使用-D选项,与-d选项类似,但它显示文件中所有重复的行
uniq -D example.txt
aaa
aaa
bbb
bbb
bbb
使用-u选项,只显示文件中不重复的行:
uniq -u example.txt
ccc
cat example.txt
使用-w选项,可以限制uniq命令只比较每行的前N个字符。例如,下面的实例中,限制uniq命令只比较每行的前3个字符是否重复:
uniq -w 3 example.txt
使用-s选项,可以避免uniq命令比较每行的前N个字符,即跳过每行的前N个字符,只比较后面的字符。例如,下面的实例中,避免uniq命令比较每行的前3个字符,只比较后面的字符是否重复:
uniq -s 3 example.txt
使用-f选项,可以避免uniq命令比较前N列,即跳过前N列(这里列以空格分隔),只比较后面的字符。
避免uniq命令比较第一列的内容,只比较后面的字符是否重复:
uniq -f 1 example.txt

tr 命令:替换或删除字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
tr命令语法
tr [OPTION]... SET1 [SET2]
tr功能:转换字符,如果把SET1和SET2同时指定,并没有指定-d选项,那么tr命令将把每个s1的都换成s2的
下面将所有小写转换为大写
echo LinuxShell | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
LINUXSHELL
下面的实例同样可以将字符串中的所有小写字母转换为大写字母:
echo linuxShell | tr [:lower:] [:upper:]
echo linuxShell | tr a-z A-Z
使用tr命令转换一个文件中的内容,并将转换的结果输出到另一个文件:
tr '{}' '()' < inputfile > outputfile
使用-s选项压缩重复的空格
使用-d选项删除指定字符
echo "The Linux Shell" | tr -d a-z
T L S
#删除数字
echo "my username is yantaol123" | tr -d [:digit:]
my username is yantaol
将-c和-d选项结合使用,删除字符串中除数字以外的所有字符:
echo "my username is yantaol123" | tr -cd [:digit:]

grep 命令 查找字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
grep [OPTION]… PATTERN [FILE]…
grep [OPTION]… [ -e PATTERN | -f FILE] [FILE]…
使用-i选项,可以强制grep命令忽略搜索关键字的大小写:
grep -i YantaoL /etc/passwd
使用-r选项,可以递归搜索指定目录下的所有文件
grep -r yantaol /etc/
grep -R yantaol /etc/
将-r选项与-l选项结合使用,grep命令可以只打印输出包含匹配指定模式的行的文件的名字:
grep -rl yantaol /etc/
/etc/passwd
/etc/shadow
使用-w选项,就可以强制grep命令只匹配包含指定单词的行,,查找文件/etc/passwd中只包含指定单词yantao
grep -w yantaol /etc/passwd
使用-c选项,grep命令可以报告文件或文本中模式被匹配的次数
使用-n选项,grep命令可以显示每一个匹配的行的行号
使用-v选项,grep命令可以输出除匹配指定模式的行以外的其他所有行:
用--color选项,grep命令在输出中将匹配的字符串以彩色的形式标出

diff 命令实例:比较两个文件

1
2
3
4
5
6
7
8
diff命令语法
diff [OPTION]… from-file to-file
使用-w选项,diff命令将在比较两个文件时忽略空格
使用-y选项,diff命令可以并排的格式输出两个文件的比较结果
使用-y选项时,每行显示的内容不完整,可以与-W选项结合使用,指定并列输出格式的列宽,使每行的内容可以完整地显示
diff -yw –W 160 nsswitch.conf nsswitch.conf.org
使用-c选项,diff命令会以上下对比的格式输出两个文件的比较结果:
diff -cw nsswitch.conf nsswitch.conf.org

其他常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
hostname
使用hostname命令修改你的系统的主机名:
hostname yantaol-system
注意:上述命令只是临时地修改系统的主机名。当系统重启后,这个新修改的主机名将不会被使用
w命令用于显示登录的用户及他们当前运行的进程
命令输出的第一行内容与uptime命令默认输出的内容相同。第三行分别显示的是:登录账号的用户名、tty名称、从哪台主机登录、登录时间、空闲时间、tty上的所有进程所使用的CPU时间、当前进程所使用的CPU时间以及当前运行的进程。
who命令的语法如下所示:(who与w相似,比w强大)
who [OPTION]… [ FILE | ARG1 ARG2 ]
直接使用who命令,不知道任何参数,将显示当前登录的所有用户的信息
使用-b选项,who命令可以显示系统的启动时间
使用-l选项,who命令会显示出系统登录进程
使用-m选项,who命令将只显示与当前标准输入关联的用户信息
使用-r选项,who命令将显示系统的运行级别
使用-q选项, who命令将只显示所有登录用户的用户名和登录的用户数
uptime 查看系统运行时间
uname 查看系统信息
使用-n选项,uname命令将只打印系统的主机名,其输出与hostname命令相同
使用-r选项,uname命令将打印内核版本信息
使用-m选项,uname命令将打印系统的硬件名
使用-p选项,uname命令将打印系统的处理器类型的信息
使用-i选项,uname命令将打印系统的硬件平台信息
使用-a选项,uname命令将打印上述所有示例中的信息

date
使用-d或--date选项,你可以指定日期和时间的字符串值,date命令会将此输入的字符串转换为相应的日期时间格式:
date --date="10/1/2013"
使用-f或--file选项,date命令可以从文件中读取多个日期时间字符串,并将其转换为相应的日期时间格式打印输出
date --file=datefile
使用-s或--set选项,date命令可以设定系统的日期和时间
使用-u或--utc或--universal选项,date命令将打印输出世界标准时间
使用-r选项,date命令可以打印输出指定文件的最近修改时间
用格式化选项来自定义date命令打印输出的时间和日期的格式 date +%<format-option>

id命令显示用户属性
id命令用于打印输出用户的uid、gid、用户名和组名等用户身份信息
使用-u选项,id命令将只打印输出用户的uid
使用-u选项和-n选项结合使用,可以打印输出账号的用户名,而不是uid
使用-g选项,id命令将只打印输出账号当前起作用的gid
使用-G选项,id命令将打印输出账号所属于的所有群组的id
使用-G与-n选项结合使用,可以打印输出账号所属于的所有群组的名称