GreatSQL社区

搜索

KAiTO

0基础学Linux-从小白到大牛(3)Linux命令

KAiTO 已有 997 次阅读2022-10-30 12:10 |个人分类:零基础学Linux|系统分类:其他


权限管理

列出目录内容: ls

Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“…”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。

ls常用参数:


参数含义
-a显示指定目录下所有子目录与文件,包括隐藏文件
-l以列表方式显示文件的详细信息
-h配合 -l 以人性化的方式显示文件大小

在这里插入图片描述
信息含义:
在这里插入图片描述
ls支持通配符:


通配符含义
*文件代表文件名中所有字符
ls te*查找以te开头的文件
ls *html查找结尾为html的文件
代表文件名中任意一个字符
ls ?.c只找第一个字符任意,后缀为.c的文件
ls a.?只找只有3个字符,前2字符为a.,最后一个字符任意的文件
[][”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
[abc]匹配a、b、c中的任意一个
[a-f]匹配从a到f范围内的的任意一个字符
ls [a-f]*找到从a到f范围内的的任意一个字符开头的文件
ls a-f查找文件名为a-f的文件,当“-”处于方括号之外失去通配符的作用
\如果要使通配符作为普通字符使用,可以在其前面加上转义字符。“?”和“*”处于方括号内时不用使用转义字符就失去通配符的作用。
ls *a查找文件名为*a的文件

显示inode的内容:stat

stat [文件或目录]

<img src="https://img-blog.csdnimg.cn/8693d48ea9004e9c9981911bd9d88e0f.png" alt="在这里插入图片描述" data-href="" style=""/>
在这里插入图片描述

文件访问权限

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r) :对于文件,具有读取文件内容的权限;对于目录,具有浏览目录的权限。
  • 写权限(w) :对于文件,具有修改文件内容的权限;对于目录,具有删除、移动目录内文件的权限。
  • 可执行权限(x): 对于文件,具有执行文件的权限;对于目录,该用户具有进入目录的权限。

通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

示例:
在这里插入图片描述
第1个字母代表文件的类型:

  • “d” 代表文件夹
  • “-” 代表普通文件
  • “c” 代表硬件字符设备
  • “b” 代表硬件块设备
  • “s”表示管道文件
  • “l” 代表软链接文件。

后9个字母分别代表三组权限:文件所有者、用户组、其他用户拥有的权限。

修改文件权限:chmod

chmod 修改文件权限有两种使用格式:字母法与数字法。

字母法:chmod u/g/o/a +  +/-/= rwx 文件


[ u/g/o/a ]含义
uuser 表示该文件的所有者
ggroup 表示与该文件的所有者属于同一组( group )者,即用户组
oother 表示其他以外的人
aall 表示这三者皆是
[ ±= ]含义
+增加权限
-撤销权限
=设定权限

数字法:“rwx” 这些权限也可以用数字来代替


字母说明
r读取权限,数字代号为 “4”
w写入权限,数字代号为 “2”
x执行权限,数字代号为 “1”
-不具任何权限,数字代号为 “0”
如执行:chmod u=rwx,g=rx,o=r filename 就等同于:chmod u=7,g=5,o=4 filename
chmod 751 file:

- 文件所有者:读、写、执行权限
- 同组用户:读、执行的权限
- 其它用户:执行的权限
chmod 777 file:

- 所有用户拥有读、写、执行权限

注意:如果想递归所有目录加上相同权限,需要加上参数“ -R ”。 如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限

修改文件所有者:chown

[root@localhost opt]# ll
总用量 4
-rw-r--r-- 1 root root 5 10月  8 14:05 1.txt

[root@localhost opt]# sudo useradd -m test
[root@localhost opt]# chown test 1.txt
[root@localhost opt]# ll
总用量 4
-rw-r--r-- 1 test root 5 10月  8 14:05 1.txt

可以看到已经修改了文件所有者

修改文件所属组:chgrp

[root@localhost opt]# ll 1.txt
-rw-r--r-- 1 test root 5 10月  8 14:05 1.txt
[root@localhost opt]# sudo chgrp test 1.txt
[root@localhost opt]# ll 1.txt
-rw-r--r-- 1 test test 5 10月  8 14:05 1.txt

文件内容查看

Linux系统中使用以下命令来查看文件的内容:

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示
  • nl 显示的时候,顺道输出行号
  • more 一页一页的显示文件内容
  • less与more 类似,但可以往前翻页
  • head 只看头几行
  • tail 只看尾部几行

基本显示:cat、tac

语法:

cat [-AbEnTv]

选项与参数:

  • -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -v :列出一些看不出来的特殊字符
  • -E :将结尾的断行字节 $ 显示出来;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -b :列出行号,空白行不标行号
  • -n :列出行号,连同空白行也会有行号
[root@localhost opt]# cat -b /opt/1.txt
     1	iii
     2	text
     3	text2
     4	aaa
[root@localhost opt]# cat -n /opt/1.txt
     1	iii
     2	text
     3	text2
     4	aaa
     5	
     6	

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

[root@localhost opt]# tac 1.txt


aaa
text2
text
iii

显示行号:nl

语法:

nl [-bnw] 文件

选项与参数:

  • -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种: -n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。
[root@localhost opt]# nl 1.txt
     1	iii
     2	text
     3	text2
     4	aaa
       #此处空行但不显示行号
       #此处空行但不显示行号

分屏显示

[root@localhost opt]# more /etc/man_db.config 
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%)  <== 光标在这里等待命令

more运行时可以输入的命令有

  • 空格键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f :立刻显示出档名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
[root@localhost opt]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
:   <== 这里可以等待你输入命令!

less运行时可以输入的命令有

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能;
  • ?字串 :向上搜寻『字串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N· :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q:离开 less 这个程序;

取首尾n行:head、tail

head取出文件前面几行

语法:

head [-n number] 文件 

选项与参数:

-n :后面接数字,代表显示几行的意思

[root@localhost opt]# head /etc/man.config

默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

[root@localhost opt]# head -n 20 /etc/man.config

tail取出文件后面几行

语法:

tail [-n number] 文件 

选项与参数:

-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

[root@localhost opt]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@localhost opt]# tail -n 20 /etc/man.config

文件管理

输出重定向:>

可将本应显示在终端上的内容保存到指定文件中。

如:ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )

注意: >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。

管道:|

管道:一个命令的输出可以通过管道做为另一个命令的输入。

“ | ”的左右分为两端,从左端写入到右端。

[root@localhost opt]# ll -h |more   
总用量 13M
drwxr-xr-x  2 root root  4.0K 8月   4  2016 ./
drwxr-xr-x 26 root root  4.0K 7月  30  2016 ../
-rwxr-xr-x  1 root root 1014K 6月  24  2016 bash*
-rwxr-xr-x  1 root root   31K 5月  20  2015 bunzip2*
-rwxr-xr-x  1 root root  1.9M 8月  19  2015 busybox*
-rwxr-xr-x  1 root root   31K 5月  20  2015 bzcat*
lrwxrwxrwx  1 root root     6 5月  16  2016 bzcmp -> bzdiff*
-rwxr-xr-x  1 root root  2.1K 5月  20  2015 bzdiff*
lrwxrwxrwx  1 root root     6 5月  16  2016 bzegrep -> bzgrep*
--更多--

清屏:clear

clear作用为清除终端上的显示(类似于DOS的cls清屏功能),快捷键:Ctrl + l ( “l” 为字母 )。

切换工作目录:cd

Linux所有的目录和文件名大小写敏感
cd后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。


命令含义
cd相当于cd ~
cd ~切换到当前用户的主目录(/home/用户目录)
cd .切换到当前目录
cd …切换到上级目录
cd -进入上次所在的目录

显示当前路径:pwd

[root@localhost opt]# pwd
/opt

选项与参数:

  • P :显示出确实的路径,而非使用连结 (link) 路径。 注意:是大写的P
[root@localhost opt]# pwd -P
/opt

创建目录:mkdir

mkdir可以创建一个新的目录。

注意:新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。

语法:

mkdir [-mp] 目录名称

选项与参数:

  • -m :指定被创建目录的权限,而不是根据默认权限 (umask) 设定
  • -p :递归创建所需要的目录
[root@localhost opt]# mkdir -p test1/test2/test3
[root@localhost opt]# ls
1.txt  test  test1
[root@localhost opt]# cd test1
[root@localhost test1]# ls
test2

mkdir创建的目录权限默认根据umask得到,而-m参数可以指定被创建目录的权限:

[root@localhost opt]# mkdir t1
[root@localhost opt]# ll
drwxr-xr-x 2 root root 4096 Nov 22 18:54 t1
[root@localhost opt]# mkdir t2 -m 711 
[root@localhost opt]# ll
drwxr-xr-x 2 root root 4096 Nov 22 18:54 t1
drwx--x--x 2 root root 4096 Nov 22 18:54 t2

删除文件:rm

可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。

常用参数及含义如下表所示:


参数含义
-i以进行交互式方式执行
-f强制删除,忽略不存在的文件,无需提示
-r递归地删除目录下的内容,删除文件夹时必须加此参数

建立链接文件:ln

软链接:ln -s 源文件 链接文件

硬链接:ln 源文件 链接文件

软链接类似于Windows下的快捷方式,如果软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。

硬链接只能链接普通文件不能链接目录。 两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。

文本搜索:grep

Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。

grep一般格式为:

grep [-选项] '搜索内容串' 文件名

在grep命令中输入字符串参数时,最好引号或双引号括起来。例如:grep 'a' 1.txt。

在当前目录中,查找前缀有test字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

$ grep test test* #查找前缀有test的文件包含test字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。

查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

$ grep -v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.  

查找文件:find

常用用法:


命令含义
find ./ -name test.sh查找当前目录下所有名为test.sh的文件
find ./ -name ‘*.sh’查找当前目录下所有后缀为.sh的文件
find ./ -name “[A-Z]*”查找当前目录下所有以大写字母开头的文件
find /tmp -size 2M查找在/tmp 目录下等于2M的文件
find /tmp -size +2M查找在/tmp 目录下大于2M的文件
find /tmp -size -2M查找在/tmp 目录下小于2M的文件
find ./ -size +4k -size -5M查找当前目录下大于4k,小于5M的文件
find ./ -perm 0777查找当前目录下权限为 777 的文件或目录

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:

find path -option [ -print ] [ -exec -ok command ] {} \;

常用参数说明 :

  • -perm xxxx:权限为 xxxx的文件或目录
  • -user: 按照文件属主来查找文件。
  • -size n : n单位,b:512位元组的区块,c:字元数,k:kilo bytes,w:二个位元组
  • -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
  • -amin n : 在过去 n 分钟内被读取过
  • -anewer file : 比文件 file 更晚被读取过的文件
  • -atime n : 在过去n天内被读取过的文件
  • -cmin n : 在过去 n 分钟内被修改过
  • -cnewer file :比文件 file 更新的文件
  • -ctime n : 在过去n天内被修改过的文件
  • -empty : 空的文件
  • -gid n or -group name : gid 是 n 或是 group 名称是 name
  • -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
  • -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
  • -type 查找某一类型的文件: b - 块设备文件d - 目录c - 字符设备文件p - 管道文件l - 符号链接文件f - 普通文件
  • -exec 命令名{} \ (注意:“}”和“\”之间有空格)

find实例:

显示当前目录中大于20字节并以.c结尾的文件名

find . -name "*.c" -size +20c 

将目前目录其其下子目录中所有一般文件列出

find . -type f

将目前目录及其子目录下所有最近 20 天内更新过的文件列出

find . -ctime -20

查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

find /var/log -type f -mtime +7 -ok rm {} \;

查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

find . -type f -perm 644 -exec ls -l {} \;

查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

find / -type f -size 0 -exec ls -l {} \;

从根目录查找类型为符号链接的文件,并将其删除:

find / -type l -exec rm -rf {} \

从当前目录查找用户tom的所有文件并显示在屏幕上

find . -user tom

在当前目录中查找所有文件以.doc结尾,且更改时间在3天以上的文件,找到后删除,并且给出删除提示

find . -name *.doc  -mtime +3 -ok rm {} ;
1
在当前目录下查找所有链接文件,并且以长格式显示文件的基本信息

find . -type l -exec ls -l {} \;

在当前目录下查找文件名有一个小写字母、一个大写字母、两个数字组成,且扩展名为.doc的文件

find . -name '[a-z][A-Z][0-9][0-9].doc'

拷贝文件:cp

cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令。

常用选项说明:


选项含义
-a该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f已经存在的目标文件而不提示
-i交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v显示拷贝进度
-l创建硬链接(hard link),而非复制文件本身
-s复制成为符号链接 (symbolic link),相当于批量创建快捷方式
-u若 destination 比 source 旧才升级 destination !
cp vim_configure/ code/ -ivr 把文件夹 vim_configure 拷贝到 code 目录里。

移动文件:mv

mv命令用来移动文件或目录,也可以给文件或目录重命名。

常用选项说明:


选项含义
-f禁止交互式操作,如有覆盖也不会给出提示
-i确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件
-v显示移动进度

归档管理:tar

此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

tar使用格式 tar [参数] 打包文件名 文件

tar命令参数很特殊,其参数前面可以使用“-”,也可以不使用。

常用参数:


参数含义
-c生成档案文件,创建打包文件
-v列出归档解档的详细过程,显示进度
-f指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t列出档案中包含的文件
-x解开档案文件

注意:除了f需要放在参数的最后,其它参数的顺序任意。

[root@localhost /]#  tar -cvf test.tar 1.txt 2.txt 3.txt 
1.txt
2.txt
3.txt

文件压缩解压:gzip、bzip2

tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。

gzip使用格式如下:

gzip  [选项]  被压缩文件

选项含义
-d解压文件
-r压缩文件
[root@localhost /]# ll *.tar*

[root@localhost /]# gzip -r test.tar test.tar.gz  ==>或者:gzip test.tar

tar命令中-z选项可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。

压缩用法:tar zcvf 压缩包包名 文件1 文件2 …

例如: tar zcvf test.tar.gz 1.c 2.c 3.c 4.c把 1.c 2.c 3.c 4.c 压缩成 test.tar.gz

[root@localhost /]# ls
1.c  2.c  3.c  4.c
[root@localhost /]#tar zcvf test.tar.gz 1.c 2.c 3.c 4.c 

[root@localhost /]# ls
1.c  2.c  3.c  4.c  test.tar.gz
[root@localhost /]# tar -zcvf new.tar.gz 1.c 2.c 3.c 4.c        

[root@localhost /]# ls
1.c  2.c  3.c  4.c  new.tar.gz  test.tar.gz

解压用法: tar zxvf 压缩包包名
例如:

[root@localhost /]# ls
new.tar.gz  test.tar.gz
[root@localhost /]# tar zxvf new.tar.gz 
1.c
2.c
3.c
4.c
[root@localhost /]# ls
1.c  2.c  3.c  4.c  new.tar.gz  test.tar.gz

解压到指定目录:-C (解压时可以不指定-z选项)

[root@localhost /]# ls number/     
[root@localhost /]# tar xvf test.tar.gz -C number/     

[root@localhost /]# ls number/                    
1.c  2.c  3.c  4.c

bzip2命令跟gzip用法类似

压缩用法:tar jcvf 压缩包包名 文件…(tar jcvf bk.tar.bz2 *.c)

解压用法:tar jxvf 压缩包包名 (tar jxvf bk.tar.bz2)

文件压缩解压:zip、unzip

通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

压缩文件:zip [-r] 目标文件(没有扩展名) 源文件

解压文件:unzip -d 解压后目录文件 压缩文件

[root@localhost /]# ls
1.txt  2.txt  3.txt  test.tar
[root@localhost /]# zip myzip *.txt
  adding: 1.txt (stored 0%)
  adding: 2.txt (stored 0%)
  adding: 3.txt (stored 0%)
[root@localhost /]# ls
1.txt  2.txt  3.txt  myzip.zip  test.tar
[root@localhost /]# rm -f *.txt *.tar
[root@localhost /]# ls
myzip.zip
[root@localhost /]# unzip myzip.zip 
Archive:  myzip.zip
 extracting: 1.txt                   
 extracting: 2.txt                   
 extracting: 3.txt                   
[root@localhost /]# ls
1.txt  2.txt  3.txt  myzip.zip
[root@localhost /]# unzip -d dir myzip.zip 
Archive:  myzip.zip
 extracting: dir/1.txt               
 extracting: dir/2.txt               
 extracting: dir/3.txt               
[root@localhost /]# ls
1.txt  2.txt  3.txt  dir  myzip.zip

查看命令位置:which

[root@localhost /]# which ls
/bin/ls
[root@localhost /]# which sudo
/usr/bin/sudo

用户和用户组管理

用户管理包括用户与组账号的管理。

在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。

Unix/Linux系统中的root账号通常用于系统的维护和管理,它对Unix/Linux操作系统的所有部分具有不受限制的访问权限。

在Unix/Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。

在大多数版本的Unix/Linux中,都不推荐直接使用root账号登录系统。

查看当前用户:whoami

查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。

[root@localhost ~]# whoami
root

查看登录用户:who

who命令用于查看当前所有登录系统的用户信息。


选项含义
-m或am I只显示运行who命令的用户名、登录终端和登录时间
-q或–count只显示用户的登录账号和登录用户的数量
-u在登录时间后显示该用户最后一次操作到当前的时间间隔
-u或–heading显示列标题

退出登录账户: exit

如果是图形界面,退出当前终端;

如果是使用ssh远程登录,退出登陆账户;

如果是切换后的登陆用户,退出则返回上一个登陆账号。

添加用户账户:useradd

在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。

useradd命令的使用格式如下: useradd [参数] 新建用户账号


参数含义
-d指定用户登录系统时的主目录
-m自动建立目录,未指定-d参数时会在/home/{当前用户}目录下建立主目录
-g指定组名称

相关说明:

  • Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
  • 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
  • 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。

若创建用户时未指定家目录,后期可通过usermod -d /home/abc abc指定


命令含义
useradd -d /home/abc abc -m创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
useradd -d /home/a a -g test -m创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,同时用户属于test组
cat /etc/passwd查看系统当前用户名

修改用户:usermod

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值 。

修改用户所在组:usermod -g 用户组 用户名

usermod -g test abc

改abc用户的家目录位置:usermod -d 家目录 用户名

usermod -d /home/abc abc

选项-l 新用户名指定一个新的账号,可修改用户名:

[root@localhost ~]#  tail /etc/passwd -n 1 
aaa:x:1001:1001::/home/aaa:
[root@localhost ~]#  sudo usermod -l bbb -d /home/bbb aaa   
[root@localhost ~]#  tail /etc/passwd -n 1               
bbb:x:1001:1001::/home/bbb:

设置用户密码:passwd

超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

假设当前用户是sam,则下面的命令修改该用户自己的口令:

$ passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

如果是超级用户,可以用下列形式指定任何用户的口令:

# passwd sam 
New password:******* 
Re-enter new password:*******

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

为用户指定空口令时,执行下列形式的命令:

passwd -d sam

此命令将用户的 sam 的口令删除,这样用户 sam 下一次登录的时候,系统就不在允许该用户登录。

passwd 命令还可以用 -l(lock)选项锁定某一用户,使其不能登录,例如:

passwd -l sam

删除用户:userdel


命令含义
su切换到root用户
su root切换到root用户
su -切换到root用户,同时切换目录到/root
su - root切换到root用户,同时切换目录到/root
su 普通用户切换到普通用户
su - 普通用户切换到普通用户,同时切换普通用户所在的目录

注意,对于ubuntu平台,只能通过sudo su 进入到root账户
sudo 允许系统管理员让普通用户执行一些或者全部的root命令的一个工具

以root身份执行指令:sudo

sudo 命令可以临时获取root的权限
使用权限:在 /etc/sudoers 中有出现的使用者

显示出自己(执行 sudo 的使用者)的权限
sudo -l
以 root 权限执行上一条命令
sudo !!

sudoers 文件配置语法

user MACHINE = COMMANDS
用户 登录的主机= (可以变换的身份)可以执行的命令

例子:

允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL
允许wheel用户组中的用户执行所有命令  
%wheel        ALL=(ALL)       ALL
允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
%wheel        ALL=(ALL)       NOPASSWD: ALL
允许support用户在EPG的机器上不输入密码的情况下使用SQUID中的命令
Cmnd_Alias   SQUID = /opt/vtbin/squid_refresh, /sbin/service, /bin/rm
Host_Alias   EPG = 192.168.1.1, 192.168.1.2
support EPG=(ALL) NOPASSWD: SQUID

添加和删除组账户:groupadd、groupdel

groupadd 新建组账号 groupdel 组账号 cat/etc/group 查看用户组

[root@localhost ~]# 
 sudo groupadd abc
[root@localhost ~]# 
 sudo groupdel abc
[root@localhost ~]# 
 sudo groupdel abc
groupdel:“abc”组不存在

用户组管理:groupmod

修改用户组的属性使用groupmod命令,其语法如下:

groupmod 选项 用户组

常用的选项有:

  • -g GID为用户组指定新的组织标号
  • -o 和 -g选项同时使用,用户组新的GID可以与系统已有的用户组GID相同
  • -n 新用户组将用户组的名字改为新名字

将组group2的组标识号修改为102:

groupmod -g 102 group2

将组group2的标识号改为10000,组名修改为group3:

groupmod –g 10000 -n group3 group2

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其它用户组的权限,用户在登录后,使用命令newgrp切换到其它用户组,这个命令的参数就是目的的用户组,例如:

newgrp root

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

系统管理

查看当前日历:cal

cal命令用于查看当前日历,-y显示整年日历:

[root@localhost ~]# cal
      十月 2022     
日 一 二 三 四 五 六
                   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

显示或设置时间:dete

设置时间格式(需要管理员权限):

date [MMDDhhmm[[CC]YY][.ss]] +format

MM为月,DD为天,hh为小时,mm为分钟;CC为年前两位,YY为年的后两位,ss为秒。

如: date 010203042016.55。

显示时间格式(date ‘+%y,%m,%d,%H,%M,%S’):


format格式含义
%Y,%y
%m
%d
%H
%M
%S

查看网络状态:netstat

netstat命令用于显示网络状态。

利用netstat指令可让你得知整个Linux系统的网络情况。

语法:

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数说明:

  • -a或–all 显示所有连线中的Socket。
  • -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
  • -c或–continuous 持续列出网络状态。
  • -C或–cache 显示路由器配置的快取信息。
  • -e或–extend 显示网络其他相关信息。
  • -F或–fib 显示FIB。
  • -g或–groups 显示多重广播功能群组组员名单。
  • -h或–help 在线帮助。
  • -i或–interfaces 显示网络界面信息表单。
  • -l或–listening 显示监控中的服务器的Socket。
  • -M或–masquerade 显示伪装的网络连线。
  • -n或–numeric 直接使用IP地址,而不通过域名服务器。
  • -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或–timers 显示计时器。
  • -p或–programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或–route 显示Routing Table。
  • -s或–statistice 显示网络工作信息统计表。
  • -t或–tcp 显示TCP传输协议的连线状况。
  • -u或–udp 显示UDP传输协议的连线状况。
  • -v或–verbose 显示指令执行过程。
  • -V或–version 显示版本信息。
  • -w或–raw 显示RAW传输协议的连线状况。
  • -x或–unix 此参数的效果和指定"-A unix"参数相同。
  • -ip或–inet 此参数的效果和指定"-A inet"参数相同。

常用如下:

[root@localhost yum.repos.d]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1219/sshd           
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      1512/python         
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1460/master         
tcp6       0      0 :::22                   :::*                    LISTEN      1219/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1460/master 

查看进程信息:ps

进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。

ps命令选项:

  • ps a 显示现行终端机下的所有程序,包括其他用户的程序。
  • ps -A 显示所有程序。
  • ps c 列出程序时,显示每个程序真正的指令名称,而不包含路 径,参数或常驻服务的标示。
  • ps -e 此参数的效果和指定"A"参数相同。
  • ps e 列出程序时,显示每个程序所使用的环境变量。
  • ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
  • ps -H 显示树状结构,表示程序间的相互关系。
  • ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
  • ps s 采用程序信号的格式显示程序状况。
  • ps u 以用户为主的格式来显示程序状况。
  • ps x 显示所有程序,不以终端机来区分。
选项含义
-a显示终端上的所有进程,包括其他用户的进程
-u显示进程的详细状态
-x显示没有控制终端的进程
-w显示加宽,以便显示更多的信息
-r只显示正在运行的进程

常见用法:

  • ps -e 查看所有进程信息(瞬时的)
  • ps -u root -N 查看所有不是root运行的进程
  • ps ax 显示所有进程状态状态
  • ps -ef |grep xxx 显示含有xxx的进程

实例:

# ps -A 显示进程信息
PID TTY     TIME CMD
  1 ?    00:00:02 init
  2 ?    00:00:00 kthreadd
……省略部分结果
30749 pts/0  00:00:15 gedit
30886 ?    00:01:10 qtcreator.bin
30894 ?    00:00:00 qtcreator.bin 

显示指定用户信息:

# ps -u root //显示root进程用户信息
 PID TTY     TIME CMD
  1 ?    00:00:02 init
  2 ?    00:00:00 kthreadd
  3 ?    00:00:00 migration/0
……省略部分结果
30487 ?    00:00:06 gnome-terminal
30488 ?    00:00:00 gnome-pty-helpe
30489 pts/0  00:00:00 bash

显示所有进程信息,连同命令行

# ps -ef //显示所有命令,连带命令行
UID    PID PPID C STIME TTY     TIME CMD
root     1   0 0 10:22 ?    00:00:02 /sbin/init
root     2   0 0 10:22 ?    00:00:00 [kthreadd]
root     3   2 0 10:22 ?    00:00:00 [migration/0]
root     4   2 0 10:22 ?    00:00:00 [ksoftirqd/0]
root     5   2 0 10:22 ?    00:00:00 [watchdog/0]
root     6   2 0 10:22 ?    /usr/lib/NetworkManager
……省略部分结果
root   31302 2095 0 17:42 ?    00:00:00 sshd: root@pts/2 
root   31374 31302 0 17:42 pts/2  00:00:00 -bash
root   31400   1 0 17:46 ?    00:00:00 /usr/bin/python /usr/sbin/aptd
root   31407 31374 0 17:48 pts/2  00:00:00 ps -ef

以树状图显示进程关系:pstree

显示进程的关系

pstree
init-+-amd
|-apmd
|-atd
|-httpd---10*[httpd]
%pstree -p
init(1)-+-amd(447)
|-apmd(105)
|-atd(339)
%pstree -c
init-+-amd
|-apmd
|-atd
|-httpd-+-httpd
| |-httpd
| |-httpd
| |-httpd
....

特别表明在运行的进程:

# pstree -apnh //显示进程间的关系

同时显示用户名称:

# pstree -u //显示用户名称

动态显示进程:top

top命令用来动态显示运行中的进程。top命令能够在运行后,在指定的时间间隔更新显示信息。-d参数可以指定显示信息更新的时间间隔。

在top命令执行后,可以按下按键得到对显示的结果进行排序:


按键含义
M根据内存使用量来排序
P根据CPU占有率来排序
T根据进程运行时间的长短来排序
U可以根据后面输入的用户名来筛选进程
K可以根据后面输入的PID来杀死进程。
q退出
h获得帮助

图示:
在这里插入图片描述
更高级的命令是htop,但需要安装:
在这里插入图片描述

终止进程:kill

kill命令指定进程号的进程,需要配合 ps 使用。

使用格式:

kill [-signal] pid

信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。

关机重启:reboot、shutdown、init


命令含义
reboot重新启动操作系统
shutdown –r now重新启动操作系统,shutdown会给别的用户提示
shutdown -h now立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25系统在今天的20:25 会关机
shutdown -h +10系统再过十分钟后自动关机
init 0关机
init 6重启

检查磁盘空间:df

df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。


选项含义
-a显示所有文件系统的磁盘使用情况
-m以1024字节为单位显示
-t显示各指定文件系统的磁盘空间使用情况
-T显示文件系统
[root@localhost /]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   13G  1.5G   12G   12% /
devtmpfs                 485M     0  485M    0% /dev
tmpfs                    494M   96K  494M    1% /dev/shm
tmpfs                    494M   50M  444M   11% /run
tmpfs                    494M     0  494M    0% /sys/fs/cgroup
/dev/sda1                497M  119M  379M   24% /boot
tmpfs                     99M     0   99M    0% /run/user/0

检测目录所占磁盘空间:du

du命令用于统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况。

du命令的使用格式如下: du [选项] 目录或文件名


选项含义
-a递归显示指定目录中各文件和子目录中文件占用的数据块
-s显示指定文件或目录占用的数据块
-b以字节为单位显示磁盘占用情况
-l计算所有文件大小,对硬链接文件计算多次
[root@localhost /]# du -sh /home/
12K	/home/

查看或配置网卡信息:ifconfig

ifconfig显示所有网卡的信息:

[root@localhost /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 1**.6*.1**.1**  netmask 255.255.240.0  broadcast 1**.6*.2**.255
        inet6 fe80::***:****:****:****  prefixlen 64  scopeid 0x20<link>
        ether 00:**:5d:**:**:**  txqueuelen 1000  (Ethernet)
        RX packets 110480231  bytes 9437413113 (8.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 796651  bytes 134723358 (128.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

修改ip:

sudo ifconfig ens0 192.168.40.10

测试远程主机连通性:ping

[root@localhost /]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data.
64 bytes from 110.242.68.3: icmp_seq=1 ttl=51 time=11.9 ms
64 bytes from 110.242.68.3: icmp_seq=2 ttl=51 time=11.1 ms
64 bytes from 110.242.68.3: icmp_seq=3 ttl=51 time=11.4 ms

Linux 磁盘管理

Linux磁盘管理常用三个命令为df、du和fdisk。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df

获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:

df [-ahikHTm] [目录或文件名]

选项与参数:

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
  • -k :以 KBytes 的容量显示各文件系统;
  • -m :以 MBytes 的容量显示各文件系统;
  • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
  • -H :以 M=1000K 取代 M=1024K 的进位方式;
  • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
  • -i :不用硬盘容量,而以 inode 的数量来显示
[root@localhost /]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        13G  1.5G   12G   12% /
devtmpfs                devtmpfs  485M     0  485M    0% /dev
tmpfs                   tmpfs     494M   96K  494M    1% /dev/shm
tmpfs                   tmpfs     494M   50M  444M   11% /run
tmpfs                   tmpfs     494M     0  494M    0% /sys/fs/cgroup
/dev/sda1               xfs       497M  119M  379M   24% /boot
tmpfs                   tmpfs      99M     0   99M    0% /run/user/0

将系统内的所有特殊文件格式及名称都列出来

[root@localhost /]# df -aT
文件系统                类型           1K-块    已用     可用 已用% 挂载点
rootfs                  rootfs      13588480 1522984 12065496   12% /
proc                    proc               0       0        0     - /proc
sysfs                   sysfs              0       0        0     - /sys
devtmpfs                devtmpfs      495768       0   495768    0% /dev
securityfs              securityfs         0       0        0     - /sys/kernel/security
tmpfs                   tmpfs         505200      96   505104    1% /dev/shm
devpts                  devpts             0       0        0     - /dev/pts
tmpfs                   tmpfs         505200   50840   454360   11% /run
tmpfs                   tmpfs         505200       0   505200    0% /sys/fs/cgroup
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/systemd
pstore                  pstore             0       0        0     - /sys/fs/pstore
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/cpuset
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/cpu,cpuacct
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/memory
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/devices
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/freezer
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/net_cls
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/blkio
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/perf_event
cgroup                  cgroup             0       0        0     - /sys/fs/cgroup/hugetlb
configfs                configfs           0       0        0     - /sys/kernel/config
/dev/mapper/centos-root xfs         13588480 1522984 12065496   12% /
systemd-1               autofs             0       0        0     - /proc/sys/fs/binfmt_misc
mqueue                  mqueue             0       0        0     - /dev/mqueue
hugetlbfs               hugetlbfs          0       0        0     - /dev/hugepages
debugfs                 debugfs            0       0        0     - /sys/kernel/debug
/dev/sda1               xfs           508588  121240   387348   24% /boot
binfmt_misc             binfmt_misc        0       0        0     - /proc/sys/fs/binfmt_misc
tmpfs                   tmpfs         101040       0   101040    0% /run/user/0

du

du命令是对文件和目录磁盘使用的空间的查看.

语法:

du [-ahskm] 文件或目录名称

选项与参数:

  • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
  • -h :以人们较易读的容量格式 (G/M) 显示;
  • -s :列出总量而已,而不列出每个各别的目录占用容量;
  • -S :不包括子目录下的总计,与 -s 有点差别。
  • -k :以 KBytes 列出容量显示;
  • -m :以 MBytes 列出容量显示;

du没有加任何选项时,只列出当前目录下的所有文件夹容量(包括隐藏文件夹):

[root@localhost ~]# du
8       ./test4     <==每个目录都会列出来
8       ./test2
....中间省略....
12      ./.gconfd   <==包括隐藏文件的目录
220     .           <==这个目录(.)所占用的总量

直接输入 du 没有加任何选项时,则 du 会分析当前所在目录的文件与目录所占用的硬盘空间。

加-a选项才显示文件的容量:

[root@localhost ~]# du -a
12      ./install.log.syslog   <==有文件的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中间省略....
12      ./.gconfd
220     .

检查根目录底下每个目录所占用的容量

[root@localhost ~]# du -sh /*
0       /bin
108M    /boot
4.0K    /data
.....中间省略....
0       /proc
.....中间省略....
40K     /tmp
2.4G    /usr
2.4G    /var

fdisk

fdisk 是 Linux 的磁盘分区表操作工具。

语法:

fdisk [-l] 装置名称

选项与参数:

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

列出所有分区信息:

[root@localhost /]# fdisk -l

磁盘 /dev/sda:16.1 GB, 16106127360 字节,31457280 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00099802

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    31457279    15215616   8e  Linux LVM

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-root:13.9 GB, 13925089280 字节,27197440 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:1610 MB, 1610612736 字节,3145728 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

查看根目录所在磁盘,并查阅该硬盘内的相关信息:

[root@localhost /]# df /            <==注意:重点在找出磁盘文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hdc2              9920624   3823168   5585388  41% /

[root@localhost /]# fdisk /dev/hdc  <==不要加上数字!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的输入!

输入 m 后,就会看到底下这些命令介绍

Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分割表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)

离开 fdisk 时按下 q,那么所有的动作都不会生效!相反的, 按下w就是动作生效的意思。

Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q

使用 p 可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态。

磁盘格式化

磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs(make filesystem) 命令。

语法:

mkfs [-t 文件系统格式] 装置文件名

选项与参数:

  • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效) 查看 mkfs 支持的文件格式:
[root@localhost /]# mkfs[tab]
mkfs         mkfs.cramfs  mkfs.ext3    mkfs.minix   
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.xfs

按下两个[tab],会发现 mkfs 支持的文件格式如上所示。

将分区 /dev/hdc6(可指定其他分区) 格式化为ext3文件系统:

[root@localhost /]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=                <==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2)          <==block 的大小配置为 4K 
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks     <==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

磁盘检验

fsck(file system check)用来检查和维护不一致的文件系统。

若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。

语法:

fsck [-t 文件系统] [-ACay] 装置名称

选项与参数:

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指令来检查
  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
  • -C : 显示完整的检查进度
  • -d : 打印出 e2fsck 的 debug 结果
  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
  • -R : 同时有 -A 条件时,省略 / 不检查
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

查看系统有多少文件系统支持的 fsck 命令:

[root@localhost /]# fsck[tab][tab]
fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat

强制检测 /dev/hdc6 分区:

[root@localhost /]# fsck -C -f -t ext3 /dev/hdc6 
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks

如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速!若加上 -f 强制检查,才会一项一项的显示过程。

磁盘挂载与卸除

Linux 的磁盘挂载使用mount命令,卸载使用umount命令。

磁盘挂载语法:

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点

用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面!

[root@localhost /]# mkdir /mnt/hdc6
[root@localhost /]# mount /dev/hdc6 /mnt/hdc6
[root@localhost /]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
.....中间省略.....
/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

磁盘卸载命令umount语法:

umount [-fn] 装置文件名或挂载点

选项与参数:

  • -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
  • -n :不升级 /etc/mtab 情况下卸除。

卸载/dev/hdc6

[root@localhost /]# umount /dev/hdc6     

Linux管道命令

Linux的管道命令是’|’,通过它可以对数据进行连续处理,其示意图如下:
在这里插入图片描述
注意:

1)管道命令仅处理标准输出,对于标准错误输出,将忽略

2)管道命令右边命令,必须能够接收标准输入流命令才行,否则传递过程中数据会抛弃。

常用来作为接收数据管道命令有: less,more,head,tail,而ls, cp, mv就不行。

WC - 统计字数

可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

wc [-lwm] [filename]
-l: 统计行数
-w:统计英文单词
-m:统计字符数
[root@localhost /]# wc -l /etc/passwd
49 /etc/passwd
[root@localhost /]# wc -w /etc/passwd
81 /etc/passwd
[root@localhost /]# wc -m /etc/passwd
2696 /etc/passwd

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:

$ wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

$ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 

cut - 列选取命令

选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

cut以行为单位,根据分隔符把行分成若干列,这样就可以指定选取哪些列了。

cut -d '分隔字符' -f 选取的列数
echo $PATH|cut -d ':' -f 2  	--选取第2列
echo $PATH|cut -d ':' -f 3,5  	--选取第3列和第5列
echo $PATH|cut -d ':' -f 3-5  	--选取第3列到第5列
echo $PATH|cut -d ':' -f 3-   	--选取第3列到最后1列
echo $PATH|cut -d ':' -f 1-3,5	--选取第1到第3列还有第5列

只显示/etc/passwd的用户和shell:

#cat /etc/passwd | cut -d ':' -f 1,7 
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh

grep - 行选取命令

grep一般格式为:

grep [-cinv] '查找的字符串' filename

在grep命令中输入字符串参数时,最好引号或双引号括起来。例如:grep 'a' 1.txt

常用选项说明:


选项含义
-v显示不包含匹配文本的所有行(相当于求反)
-n显示匹配行及行号
-i忽略大小写
-c计算找到的行数

grep搜索内容串可以是正则表达式,常用正则表达式:


参数含义
^a行首,搜寻以 m 开头的行;grep -n ‘^a’ 1.txt
ke$行尾,搜寻以 ke 结束的行;grep -n ‘ke$’ 1.txt
[Ss]igna[Ll]匹配 [] 里中一系列字符中的一个;搜寻匹配单词signal、signaL、Signal、SignaL的行;grep -n ‘[Ss]igna[Ll]’ 1.txt
.匹配一个非换行符的字符;grep -n ‘e.e’ 1.txt可以匹配 eee,eae,eve,但是不匹配 ee,eaae;
  • |匹配零个或多个先前字符 [^] |匹配一个不在指定范围内的字符 (..) |标记匹配字符 \ |锚定单词的开始 < |锚定单词的开头 > |锚定单词的结束 x{m} |重复字符x,m次 x{m,} |重复字符x,至少m次 x{m,n} |重复字符x,至少m次,不多于n次 \w |匹配文字和数字字符,也就是[A-Za-z0-9] \b |单词锁定符

实例:
显示所有以“h”结尾的行

grep h$

匹配所有以“a”开头且以“e”结尾的,中间包含2个字符的单词

grep ‘<a…e>’

显示所有包含一个”y”或”h”字符的行

grep [yh]

显示不包含字母a~k 且后紧跟“pple”的单词

grep [^a-k]pple

从系统词典中选择所有以“c”开头且以“o”结尾的单词

grep '\<c.*o\>'

找出一个文件中或者输出中找到包含*的行

grep '\*'

显示所有包含每个字符串至少有20个连续字母的单词的行

grep [a-Z]\{20,\}

sort - 排序

语法:

sort [-fbMnrtuk] [file or stdin]

参数说明:

  • -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
  • -b :忽略最前面的空格符部分;
  • -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
  • -n :使用『纯数字』进行排序(默认是以文字型态来排序的);
  • -r :反向排序;
  • -u :就是 uniq ,相同的数据中,仅出现一行代表;
  • -t :分隔符,默认是用 [tab] 键来分隔;
  • -k :以哪个区间 (field) 来进行排序

默认是以第一个字符升序排序:

# cat /etc/passwd | sort 
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi-autoipd:x:100:156:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
......

以第3列排序:

[root@localhost /]# cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

使用数字排序:

cat /etc/passwd | sort -t ':' -k 3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

倒序排序:

cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ntp:x:106:113::/home/ntp:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
或者
cat /etc/passwd | sort -t ':' -k 3 -nr

先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序:

cat /etc/passwd |  sort -t ':' -k 6.2,6.4 -k 1r      
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

查看/etc/passwd有多少个shell:

方法对/etc/passwd的第七个域排序并去重,然后统计行数:

[root@localhost /]# cat /etc/passwd |  sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:996:994::/home/syslog:/bin/false
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost /]# cat /etc/passwd |  sort -t':' -k 7 -u|wc -l

uniq - 去重

选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示唯一的行

该命令用于排完序之后,对排序结果进行去重

[root@localhost /]# last | cut -d ' ' -f 1  | sort | uniq

haha
python
reboot
wtmp
[root@localhost /]# last | cut -d ' ' -f 1  | sort | uniq -c
      1 
      2 haha
     22 python
      7 reboot
      1 wtmp

排序文件,默认是去重:

#cat words | sort |uniq
friend
hello
world

排序之后删除了重复行,同时在行首位置输出该行重复的次数:

#sort testfile | uniq -c
1 friend
3 hello
2 world

仅显示存在重复的行,并在行首显示该行重复的次数:

#sort testfile | uniq -dc
3 hello
2 world

仅显示不重复的行:

sort testfile | uniq -u
friend

tee - 同时输出多个文件

从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

一般情况下用重定向实现,需要同时输出多个文件时可以使用该命令。

参数:

  • -a或–append 附加到既有文件的后面,而非覆盖它.

将输出同时保存到多个文件中,同时将输出内容显示到控制台:

[root@localhost /]# echo "hello world"|tee f1 f2 
hello world
[root@localhost /]# cat f1
hello world
[root@localhost /]# echo "hello world"|tee f1 f2 -a
hello world
[root@localhost /]# cat f1
hello world
hello world

split - 文件切割

split命令用于将一个文件分割成数个。

该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

语法:

split [-bl] file prefix
-b: 以大小切割
-l:以行数切割
prefix:切割后文件的前缀

参数说明:

  • -<行数> : 指定每多少行切成一个小文件
  • -b<字节> : 指定每多少字节切成一个小文件
  • -C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
  • [输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号

使用指令"split"将文件"README"每6行切割成一个文件,输入如下命令:

$ split -6 README       #将README文件每六行分割成一个文件 
$ ls                                #执行ls指令  
#获得当前目录结构
README xaa xad xag xab xae xah xac xaf xai

以上命令执行后,指令"split"会将原来的大文件"README"切割成多个以"x"开头的小文件。而在这些小文件中,每个文件都只有6行内容。

以大小切割:

$ ls -lh disease.dmp
-rwxr-xr-x 1 root root 122M Jul  4  2013 disease.dmp
$ split -b 50m disease.dmp disease.dmp
$ ls -lh disease.dmp*
-rwxr-xr-x 1 root root 122M Jul  4  2013 disease.dmp
-rw-r--r-- 1 root root  50M Jan  9 16:10 disease.dmpaa
-rw-r--r-- 1 root root  50M Jan  9 16:10 disease.dmpab
-rw-r--r-- 1 root root  22M Jan  9 16:10 disease.dmpac


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-4-20 19:00 , Processed in 0.015895 second(s), 8 queries , Redis On.
返回顶部