Linux 从懵懂到玩得很溜

2,390 阅读3分钟

不会事无巨细。

学习 Linux ,首先要有一个 Linux 环境。这里我们使用虚拟机(推荐VirtualBox,它是免费的)运行 CentOS 。

具体安装步骤参考:使用VirtualBox安装CentOS7

安装完成后,如下图:

CentOS 7

我这里使用的不是 VirtualBox,而是 Paralles。它跟 VirtualBox 一样,也是一款优秀的虚拟机。不同的是,Paralles 只能运行在 MacOS 上,而且不是免费的。

这是一个图形界面,可通过快捷键Ctrl + Alt + F2切换到全命令行界面:

事实上F2-F6都可以切换。

命令行界面

输入用户名,回车,输入密码就登入系统了。

切换回图形界面使用Ctrl + Alt + F1

有的系统可能需要同时按下fn才能触发F1F2的功能键。

学习第一个命令

date

date命令用于打印当前时间。

[qe@centos-7 ~]$ date
2020年 02月 22日 星期六 10:41:47 CST

这个命令里,[qe@centos-7 ~]$是命令提示符。其中qe代表当前用户名,centos-7代表主机名,~代表当前所在目录。

~是一个特殊目录,代表当前用户的家目录。所以这里表示当前目录为qe用户的家目录。


第一个命令很简单。接下来我们学习一个最常用的命令:

ls

ls是 list 的缩写,用于列出当前目录下的文件和目录。

[parallels@centos-7 ~]$ ls
Desktop    Downloads   Music     Public     Videos
Documents  fontconfig  Pictures  Templates

不同的命令有不同的参数,如ls -a,用于列出当前目录下所有的文件和目录:

[parallels@centos-7 ~]$ ls -a
.              .bashrc  Documents      .local      .pki
..             .cache   Downloads      .mozilla    Public
.bash_history  .config  .esd_auth      Music       Templates
.bash_logout   .dbus    fontconfig     .parallels  Videos
.bash_profile  Desktop  .ICEauthority  Pictures    .viminfo

其中-a表示 all,代表所有文件和目录,包括隐藏文件和目录。Linux 中在文件名之前加上.表示隐藏。

注意,Linux 中区分大小写。

又如ls -l表示列出详细信息。

多个短参数还可以合并,如ls -la

ls -la

--表示长参数。比如ls --all,同ls -a效果一样。

实用技巧

1。 在命令行中,使用键可以切换前、后一条命令,使用两次Tab键可以补全命令。

2。 使用history命令可以查看所有执行过的命令。

history

每个历史命令前都有编号,通过使用!可以执行相应的历史命令。

[parallels@centos-7 ~]$ !6
ls
Desktop    Downloads   Music     Public     Videos
Documents  fontconfig  Pictures  Templates

3。 快捷键Ctrl + a跳到当前行首,Ctrl + e跳到当前行尾。

目录组织形式

目录

Linux 有一个根目录 /,是最顶层的目录。根目录的直接子目录如上图所示。同 Windows 系统不同,Linux 没有C盘、D盘的概念,且 Linux 使用/作为路径分隔符,如:/home/parallels/Desktop

pwd

pwd用于打印当前目录。

[parallels@centos-7 Desktop]$ pwd
/home/parallels/Desktop

which

which用于打印某个命令的位置。

[parallels@centos-7 ~]$ which pwd
/usr/bin/pwd

ls

前面介绍过ls,用于列出所有文件和目录。其中ls -l用于列出详细信息,如下图:

ls -l

上图中,文件大小的单位是字节,可以使用ls -lh,以KBMBGB为单位显示。

ls -lt是以最近修改时间排序。

cd

cd是 change directory 的缩写,用于切换目录。

[parallels@centos-7 ~]$ cd /

..代表上一级目录,.代表当前目录,~代表当前用户家目录。

[parallels@centos-7 ~]$ cd ..

du

du是 disk usage 的缩写,显示目录包含的文件大小,默认单位是字节。使用du -h可以KBMBGB为单位显示。

du默认只显示目录的大小,使用du -a可以显示目录和文件的大小。du -s只显示总计大小。

操作文件

文件操作主要有浏览文件,创建文件。

catless

catless用于显示文件内容。cat可以一次性显示文件的所有内容:

[parallels@centos-7 log]$ cat Xorg.0.log

可以使用cat -n filename显示行号。

less可以分页显示文件内容。

[parallels@centos-7 log]$ less Xorg.0.log

less命令可以显示一页的内容,使用回车键查看下一行,使用空格键查看下一页,使用b 键查看上一页,使用y 键后退一行,q 键退出。

headtail

headtail用于显示文件的开头和结尾。默认显示 10 行。可以使用tail -n指定显示的行数。

[parallels@centos-7 log]$ head Xorg.0.log
......
[parallels@centos-7 log]$ tail -n 5 Xorg.0.log
......

touchmkdir

touchmkdir用于创建文件和目录。

[parallels@centos-7 Desktop]$ touch test.txt
[parallels@centos-7 Desktop]$ mkdir test

mkdir -p可以递归创建目录。

[parallels@centos-7 Desktop]$ mkdir -p test1/test2/test3

cpmv

cp是 copy 的缩写,用于拷贝文件或目录。

[parallels@centos-7 Desktop]$ cp test.txt test_copy.txt

cp -r用于拷贝目录。

mv是 move 的缩写,用于移动文件或目录。

[parallels@centos-7 Desktop]$ mv test.txt test1/

mv还可以用于重命名文件。

[parallels@centos-7 Desktop]$ mv test_copy.txt test.txt

rm

rm 用于删除文件或目录。

[parallels@centos-7 Desktop]$ rm test.txt

rm -r用于删除目录。

[parallels@centos-7 Desktop]$ rm -r test.txt

rm -f会强制删除。

链接

接下来我们讲解 Linux 中的链接。

Linux 中,文件名和文件内容并不放在一起,而是分开存储的。

文件存储

硬链接

硬链接会使两个文件名指向同一块文件内容。修改 file1 则相当于修改了 file2。

硬链接

创建硬链接的方法:

[parallels@centos-7 Desktop]$ ln test.txt test_hard.txt

值得注意的是,删除文件时,删除的是文件名。因此删除test_hard.txt并不会删除test.txt

硬链接使用的不多。

软链接

软链接相当于 Windows 系统中的快捷方式。

如下图,如果删除 file2,对 file1 没什么影响,但如果删除 file1,那么 file2 就会变成 “死链接”。

软链接

创建软链接方法如下:

[parallels@centos-7 Desktop]$ ln test.txt test_soft.txt

权限

Linux 中可以创建很多用户。为了保证系统的安全,每个用户拥有不同的权限。

用户组织

普通用户可以使用su切换至root

因为root用户的权限过大,不建议直接使用root身份登录。

用户

只有使用root身份才能创建用户。

useradd可以添加新用户。在/home目录下就会创建一个新的目录tom,代表tom用户的家目录。

[root@centos-7 Desktop]# useradd tom
[root@centos-7 Desktop]# ls /home/
parallels  tom

passwd可以更改用户的密码。

[root@centos-7 Desktop]# passwd tom
更改用户 tom 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

userdel用于删除用户。

[root@centos-7 Desktop]# userdel -r tom

-r参数会使得tom的家目录一起删除。

群组

Linux 中每个用户都属于一个群组,如果不设置用户的群组,默认会创建一个和该用户同名的群组,并且把用户划归到这个群组中。

创建群组使用groupadd命令。

[root@centos-7 ~]# groupadd friends

使用usermod -g命令可以修改用户的群组。

[root@centos-7 ~]# usermod -g friends tom

使用groups命令可以查看用户所在的群组。

[root@centos-7 ~]# groups tom
tom : friends

使用usermod -G命令可以将用户添加到多个群组中。

[root@centos-7 ~]# usermod -G friends,family tom
[root@centos-7 ~]# groups tom
tom : family friends

使用usermod -aG命令可以给用户追加一个群组。

[root@centos-7 ~]# usermod -aG lover tom
[root@centos-7 ~]# groups tom
tom : family friends lover

使用groupdel删除群组。

[root@centos-7 ~]# groupdel lover
[root@centos-7 ~]# groups tom
tom : family friends

修改文件的所有者和群组

chown是 change owner 的缩写,用于改变文件的所有者,需要 root 身份才能运行。

[root@centos-7 ~]# chown tom test.txt

chown -R用于递归改变文件和目录的所有者。

chgrp是 change group 的缩写,用于改变文件的群组。

[root@centos-7 ~]# chgrp friends test.txt

修改权限

前面说过,ls -l会列出文件的详细信息,其中包括权限。

权限

开头的第一个字母d表示这是一个目录。相应的l表示链接,-表示文件。

后面的r表示可以读,w表示可以写,x表示可以执行,-表示没有相应的权限。

每三个放在一起,分别表示所有者、所属群组的用户,及其他用户对该文件(或目录)的权限。

权限

Linux 分别为每种权限定义了一个数字。

权限

所以分配读写权限即为 4 + 2 = 6,故 6 表示拥有读写权限。

权限

使用chmod可以修改文件的权限:

[root@centos-7 Desktop]# chmod 755 test.txt

上述命令表示,所有者拥有rwx权限,所属群组的用户拥有r-x权限,其他用户拥有r-x权限。

使用chmod -R可以递归修改权限。

软件仓库

CentOS 中通常使用 yum 来管理软件包。

关于 yum ,参考 linux yum 命令

查找

locate

locate用于快速查找。

[root@centos-7 Desktop]# locate test.txt
/home/parallels/Desktop/test.txt
/home/parallels/Desktop/test1/test.txt

刚创建的文件不会被locate收录,可以使用updatedb更新数据库:

[root@centos-7 Desktop]# updatedb

find

find命令也可用于查找,而且功能更强大。

格式:

find

其中,第二个参数 “查找的目标” 是必须的参数。

如:

[root@centos-7 Desktop]# find /home -name test.txt
/home/parallels/Desktop/test1/test.txt
/home/parallels/Desktop/test.txt

关于 find 的更多用法,参考:

Linux find 命令详解

Linux find命令:在目录中查找文件(超详解)

grep

grep是 Globally search a Regular Expression and Print 的缩写。

grep的基本用法是:

grep

如:

[root@centos-7 Desktop]# grep path /etc/profile
pathmunge () {
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
unset -f pathmunge 

上面的命令会在 /etc/profile 文件中查找 path。使用-i参数会忽略大小写,-n参数会显示行号,-v参数会显示文本不在的行,-r参数会递归查找。

使用-E参数会使用正则表达式:

[root@centos-7 Desktop]# grep -E ^[Pp]ath /etc/profile
pathmunge () {

sort

sort命令用于将文件内容排序。

[root@centos-7 Desktop]# cat test.txt 
Tom
jack
jemmy
Marry
Lucky
smith
[root@centos-7 Desktop]# sort test.txt 
jack
jemmy
Lucky
Marry
smith
Tom

sort命令不会真正改变文件内容。可通过-o将排序后的内容写入新文件。

[root@centos-7 Desktop]# sort -o test_sorted.txt test.txt 
[root@centos-7 Desktop]# cat test_sorted.txt 
jack
jemmy
Lucky
Marry
smith
Tom

-r参数会倒序排列,-R随机排序,-n用于对数字排序。

wc

wc是 word count 的缩写,用于文件统计。

[root@centos-7 Desktop]# wc test.txt 
 6  6 33 test.txt

wc

uniq

uniq用于删除文件的重复内容。

[root@centos-7 Desktop]# cat repeat.txt 
Tom
Tom
Jack
Tom
Jack
Smith
[root@centos-7 Desktop]# uniq repeat.txt 
Tom
Jack
Tom
Jack
Smith

uniq只能删除连续的重复行,并且不会改变原文件。

重定向

>可以将命令的输出结果重定向到文件中。>会覆盖文件的内容。

[root@centos-7 Desktop]# ls / > test.txt 

>>也可以将命令的输出结果重定向到文件中,但>>会在文件的末尾追加。

管道

管道可以将一个命令的输出作为另一个命令的输入。

[root@centos-7 Desktop]# ls | sort
Parallels Shared Folders
repeat.txt
test1
test_sorted.txt
test.txt

上面的命令将ls的输出,作为sort的输入。

进程

pstop

pstop 会列出运行的进程。

区别是ps列出的进程不会随时间更新,是静态的。ps -ef会列出所有进程。

top命令列出的进程是动态变化的。

kill命令用于结束一个进程。

[root@centos-7 Desktop]# kill 671

其中 671 是进程号。

halt用于关机,reboot用于重启。

&

&可以将进程切换到后台运行,只需在命令最后面加上&

[parallels@centos-7 Desktop]$ ls &
[1] 4175

nohup

[root@centos-7 Desktop]# nohup ls
nohup: 忽略输入并把输出追加到"nohup.out"

Ctrl + z将进程转为后台暂停。bg命令将使其在后台重新运行。fg命令将后台进程转为前台运行。

压缩

先讲解打包和压缩的概念。

打包是将多个文件归档为一个文件,压缩是将一个大的文件压缩成一个小的文件。

Linux 中,首先用tar将多个文件打包成一个文件,然后用gzipbzip2将打包后的文件压缩。

打包压缩

tar -cvf打包:

[root@centos-7 Desktop]# tar -cvf archive.tar test_copy.txt test.txt
test_copy.txt
test.txt

也可以将一个目录打包:

[root@centos-7 Desktop]# tar -cvf test_archive.tar test1
test1/
test1/test2/
test1/test2/test3/
test1/test.txt

解开归档:

[root@centos-7 Desktop]# tar -xvf archive.tar 
test_copy.txt
test.txt

gzip压缩:

[root@centos-7 Desktop]# gzip archive.tar 

gunzip解压缩:

[root@centos-7 Desktop]# gunzip archive.tar.gz

(未完待续。。。)