目录
一、几个简单的命令
1、开机
本地虚拟机:在VMware中点击“启动客户机”或“开启此虚拟机”。
云服务器:不用管,一直开着的。
2、关机
本地虚拟机:1)在VMware中点击“关闭客户机”;2)执行命令: init 0
云服务器:不用管,让它一直开着。
如果不小心关闭了云服务器,可以登录云服务器的管理平台,点某个网页的某个按钮可以开机。如果还搞不定,咨询云服务器提供商。
3、重启
本地虚拟机:1)在VMware中点击“重启客户机”;2)也可以执行命令: init 6 或 reboot
云服务器:执行命令: init 6 或 reboot
4、查看当前目录
命令: pwd
5、切换当前目录
命令: cd 目录名
示例:
6、列出当前目录中的目录和文件
命令: ls
示例:
7、列出指定目录中的目录和文件
命令: ls 目录名
示例:
8、清屏
命令: clear
9、查看/设置时间
1)查看时间。
date
2)设置时间,需要系统管理员权限。
date -s "yyyy-mm-dd hh:mi:ss"
例如:date -s "2020-09-26 09:30:28"
- Linux的目录和文件
1、目录概要
登录系统后,输入 ls / ,将显示以下内容:
Linux的文件系统像一棵树(Windows也一样),树干是/(根)目录,树枝是子目录,树枝后面还有树枝(子目录中还有子目录),树枝最后是树叶,目录的最后是文件。
如下图:
2、目录的详细说明
/bin
bin是Binaries(二进制文件)的缩写,这个目录存放了经常使用的系统命令。
/boot
这里存放了启动Linux时的核心文件。
/dev
dev是Device(设备)的缩写,该目录下存放的是Linux的外部设备。
/etc
etc是Etcetera(等等)的缩写,这个目录用来存放系统管理所需要的配置文件。
/home
用户的主目录,在Linux中,每个用户都有一个自己的目录,创建用户后,在/home目录中创建一个子目录,专用于该用户。
/lib
lib是Library(库) 的缩写这个目录里存放着系统最基本的静态和动态链接库。
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt上,然后进入该目录就可以查看光驱里的内容了。
/opt
opt是optional(可选)的缩写,这是给主机额外安装软件所摆放的目录。例如Oracle数据库系统安装后的文件可以放在这个目录中。
/proc
proc是Processes(进程)的缩写,/proc是伪文件系统(虚拟文件系统),存放了当前内核运行状态的特殊文件,它是系统内存的映射,读取这个目录下的文件可以获取系统运行的信息。
/root
该目录为系统管理员的主目录。
/sbin
s是Super User的意思,是Superuser Binaries(超级用户的二进制文件)的缩写,/sbin存放了系统管理员使用的系统管理程序。
/selinux
这个目录是Redhat(CentOS)特有的目录,selinux 是一种安全机制,类似于Windows的防火墙,但是,这套机制比较复杂,这个目录了与selinux相关的文件。
/srv
该目录存放了服务启动之后的数据。
/sys
该目录挂载了sysfs文件系统,存放了系统设备信息,包含所有系统硬件层次的视图。
/tmp
tmp是temporary(临时)的缩写这个目录是用来存放一些临时文件的。
/usr
usr是unix shared resources(共享资源)的缩写,这是一个非常重要的目录,很多应用程序和文件存放在这个目录下,类似Windows的Program Files目录。
/var
var是variable(变量)的缩写,存放着经常变动的文件,如缓存文件、日志文件、程序运行时产生的文件等。
/run
这是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
3、相对路径和绝对路径
严谨的说,文件名是由目录+文件名组成的。
对于目录和文件,有一些约定的表述,以/usr/include/stdio.h为例。
1)stdio.h是文件名,它在/usr/include目录中。
2)全路径文件名包含了目录名和文件名,即/usr/include/stdio.h,也叫“绝对路径文件名”。
3)目录和文件的绝对路径是从根(/)算起,在任何时候都不会有岐义。
4)目录和文件的相对路径是从当前目录算起,如果当前目录是/usr,include/stdio.h等同于/usr/include/stdio.h;如果当前目录是/usr/include,stdio.h等同于/usr/include/stdio.h。
5)操作目录和文件的时候,采用绝对路径和相对路径都可以。
6)一个圆点 . 表示当前目录;
7)两个圆点 .. 表示当前目录的上一级目录。
理解绝对路径和相对路径的概念非常重要,在日常操作中,绝对路径和相对路径会同时使用,但是,程序员在程序中一般使用绝对路径。
4、注意事项
1)在Linux系统下,一切都是文件。 内存、磁盘、打印机、网卡,都用文件名表示(文件名只是一个符号而已)。
2)Linux也支持磁盘分区,叫文件系统,文件系统挂载在目录下(查看文件系统的命令是df)。
3)不是自己创建的目录和文件不要动。好奇害死猫。
4)/tmp是临时目录,可以在里面创建目录和文件,但不保证它的安全。
三、上古神器vi
vi是最强大的文本编辑器,没有之一。
1、创建/打开文件
vi 文件名
打开一个文件,如果文件不存在,就创建它。
示例:
vi abc.txt
2、vi的两种模式
vi 有两种模式,命令模式和编辑模式,在命令模式下,键盘输入是命令,在编辑模式下,键盘输入的才是字符。
进入vi时,缺省是命令模式。
3、vi的常用命令
k 类似方向键上。
j 类似方向键下。
h 类似方向键左。
l 类是方向键右。
i 在光标所在位置前面开始插入。
a 在光标所在的位置后面开始插入。
o 在光标所在位置的下面插入空白行。
O 在光标所在位置的上面插入空白行。
I 在光标所在位置的行首开始插入。
A 在光标所在位置的行末开始插入。
Esc 从编辑模式切换到命令模式。
Ctrl+u 上翻半页。
Ctrl+d 下翻半页。
Ctrl+insert 相当于Ctrl+c。
Shift+insert 相当于Ctrl+v。
以上两个命令在windows和UNIX中是通用的。
Ctrl+g 显示光标所在位置的行号和文件的总行数。
nG 光标跳到文件的第n行的行首。
G 光标跳到文件最后一行。
:5回车 光标跳到第5行。
:n回车 光标跳到第n行。
0 光标跳到当前行的行首。
$ 光标跳到当前行的行尾。
w 光标跳到下个单词的开头。
b 光标跳到上个单词的开头。
e 光标跳到本单词的尾部。
x 每按一次,删除光标所在位置的一个字符。
nx 如"3x"表示删除光标所在位置开始的3个字符。
dw 删除光标所在位置到本单词结尾的字符。
D 删除本行光标所在位置后面全部的内容。
dd 删除光标所在位置的一行。
ndd 如"3dd"表示删除光标所在位置开始的3行。
yy 将光标所在位置的一行复制到缓冲区。
nyy 将光标所在位置的n行复制到缓冲区。
p 将缓冲区里的内容粘贴到光标所在位置。
r 替换光标所在位置的一个字符。
R 从光标所在位置开始替换,直到按下Esc。
cw 从光标所在位置开始替换单词,直到按下Esc。
u 撤销命令,可多次撤销。
J 把当前行的下一行文本拼接到当前行的尾部。
/abcd 在当前打开的文件中查找文本内容“abcd”。
n 查找下一个。
N 查找上一下。
. 重复执行上一次执行的vi命令。
~ 对光标当前所在的位置的字符进行大小写转换。
:w回车 存盘。
:w!回车 强制存盘。
:wq回车 存盘退出。
:w 文件名 把当前文件另存为……
:x回车 存盘退出。
:q回车 不存盘退出。
:q!回车 不存盘强制退出。
:g/aaaaaaaaa/s//bbbbbb/g回车 把文件中全部的aaaaaaaaa替换成bbbbbb。
vi *.cpp *.h 打开全部后缀为*.cpp和*.h的文件。
:n 切换到下一个文件。
四、用户管理
1、组管理
Linux的用户属于组(角色),系统可以对一个组中的全部用户进行集中管理(权限)。
创建组:groupadd 组名
删除组:groupdel 组名
组的信息保存在文件/etc/group中。
2、用户管理
创建用户:useradd -n 用户名 -g 组名 -d 用户的主目录
删除用户:userdel 用户名
用户的信息保存在文件/etc/passwd中。
3、修改用户的密码
创建用户后,必须设置它的密码,否则无法登录。
root用户可以修改任何用户的密码:passwd 用户名
普通用户只能修改自己的密码:passwd
用户的密码保存在 文件/etc/shadow 中。
4、切换用户
root用户可以免密码切换到任何用户:su - 用户名
普通用户切换到其它用户:su - 或su - 用户名,然后输入目标用户的密码。
六、目录和文件操作
1、列出目录和文件的详细信息
ls命令还可以列出目录和文件权限、大小、用户和组等信息。
选项-l列出目录和文件的详细信息。
选项-lt列出目录和文件的详细信息,按时间降序显示。
示例:
第1列是文件属性
第1个字符为文件类型:d是目录;-是普通文件;l是链接;p是管道文件;b是块设备文件(硬盘);c是字符设备文件(终端、打印机);s是套接字文件。
第2-10个字符为文件权限(r-读权限;w-写权限;x-可执行权限,-表示无权限)
第2-4个字符:表示所有者权限。
第5-7个字符:表示同组用户权限。
第8-10个字符:表示其它用户的权限。
第2列是文件硬链接数或目录的子目录数
如果是文件,表示硬链接数,新建的文件默认为1。
如果是目录,表示它的第一级子目录数,空目录为2(每一个目录都有一个指向它本身的子目录”.”和指向它上级目录的子目录”..”,这两个子目录是隐藏的,用ls -a可以看到)。
第3列是文件拥有者用户
第4列是文件拥有者用户所在组
第5列是目录或文件的大小
文件大小的单位为字节,如果是目录,则表示目录本身的大小,不包括该目录下的文件和子目录。
第6、7、8列是目录或文件最后一次被修改的时间
第9列是目录或文件名
2、创建目录
mkdir 目录名
示例:
1)在当前目录中创建aaa目录。
mkdir aaa
2)在当前目录的aaa目录中创建bbb目录。
mkdir aaa/bbb
3)创建/tmp/aaa目录。
mkdir /tmp/aaa
4)一次创建多个目录。
mkdir /tmp/aaa1 /tmp/aaa2
3、创建文件
1)创建空文件
touch 文件名
2)把屏幕显示的内容输出到文件,如果文件已存在,将清空原有的内容。
任意可以屏幕输出内容的命令 > 文件名
3)把屏幕显示的内容追加到文件
任意可以屏幕输出内容的命令 >> 文件名
4、删除目录和文件
rm -rf 目录和文件列表
选项-r表示删除目录,如果没有-r只能删除文件。
选项-f表示强制删除,不需要确认。
目录和文件列表之间用空格分隔。
5、复制目录和文件
cp -r旧目录或文件名 新目录或文件名
选项-r表示复制目录,如果没有选项-r只能复制文件。
如果第二个参数是已经存在的目录,则把第一个参数(旧目录或文件名)复制到该目录中。
6、移动目录和文件
mv 旧目录或文件名 新目录或文件名
如果第二个参数是已经存在的目录,则把第一个参数(旧目录或文件名)移动到该目录中。
七、命令历史、补全和正则表达式
1、命令历史
1)命令历史记录存放在用户主目录的.bash_history文件中。
2)用上、下光标键可以调取历史命令。
2、命令补全
ls、cd、vi等命令,可以用tab键自动补全名称。
如果以输入的字符开头的名称有多个时,需要按下二次tab键来列出所有的名称。
3、正则表达式
书写目录或文件名时,可以用星号*匹配多个字符,用问号?匹配一个字符。
八、目录和文件的权限
1、修改目录和文件的拥有者
用root用户执行:
chown -R 用户:组 目录和文件列表
-R选项表示连同各子目录一起修改。
2、权限的标志位
3、文件的权限
1)r:表示具有读取文件内容的权限。
2)w:表示具有修改文件内容的权限,同时需要有r权限。注意,如果要删除文件,需要有目录的w权限。
3)x:表示具有执行文件的权限,同时需要有r权限。注意,文件是否能真的执行,还要由文件本身决定。
4、目录的权限
1)x:表示可以进入目录。
2)r:表示可以浏览目录中有哪些子目录和文件,同时需要有x权限。
3)w:表示可以在目录中新增、删除、移动子目录和文件,同时需要有x权限。
5、设置权限(八进制语法)
权限也可以用八进制的数字表示:r的值为4,w的值为2,x的值为1。
6 rw- 3 -wx 2 -w- 1 --x 0 ---
chmod -R 三位的八进制权限 目录和文件列表
-R选项表示连同各子目录一起设置。
6、设置权限(符号模式)
chmod -R whooperatorpermission 目录和文件列表
-R选项表示连同各子目录一起设置。
1)who的说明
who | 用户类型 | 说明 |
u | user | 文件的所有者 |
g | group | 文件所有者的组 |
o | others | 其它用户 |
a | all | 全部用户,相当于ugo |
2)operator的说明
operator | 说明 |
+ | 增加权限 |
- | 取消权限 |
= | 重新设置权限 |
九、文件内容操作
在实际工作中,文件内容操作主要用于分析源代码文件、数据文件和日志文件。
1、查看文件内容cat
cat 文件名
一次显示文件全部的内容,适用于内容很少的文本文件。
2、查看文件的内容less
less 文件名
按space(空格键)继续显示;Ctrl+u上翻页;Ctrl+d下翻页;j下一行;k上一行;q退出。
3、查看文件的内容more
more 文件名
按space(空格键)显示下一页;按b显示上一页;q退出。
4、统计文件的行数wc
wc 文件名列表
5、查找文件中的内容grep
grep "字符串" 文件名列表
6、显示文件头部的内容head
head -n行数 文件名
7、显示文件尾部的内容tail
tail -n行数 文件名
8、跟踪文件尾部的内容tail -f
tail -f 文件名列表
用于查看后台服务程序运行的日志。
9、文件的比较、拆分、合并、排序等
对程序员来说,这些功能用编程语言实现更合适,几行简单的代码就搞定了。
10、demo.cpp
#include <iostream>
#include <fstream> // ofstream类需要包含的头文件。
#include <chrono>
#include <iomanip> // put_time()函数需要包含的头文件。
#include <thread> // 线程类头文件。
using namespace std;
int main()
{
ofstream fout;
fout.open("demo.log", ios::trunc); // 打开日志文件。
// 每隔1秒向日志文件中写一行日志。
for (int ii = 1; ii <= 50000; ii++)
{
auto now = chrono::system_clock::now();
auto t_now = chrono::system_clock::to_time_t(now);
auto tm_now = std::localtime(&t_now);
fout << put_time(tm_now, "%Y-%m-%d %H:%M:%S") <<":这是第"<<ii<<"行日志。" << endl;
this_thread::sleep_for(chrono::seconds(1)); // 休眠1秒。
}
fout.close(); // 关闭文件,fout对象失效前会自动调用close()。
cout << "操作文件完成。\n";
}
十、管道
管道就是将一个命令输出的内容重定向为另一个命令的输入。
管道操作符是|,用它将命令连起来就行了。
ls -l|more
grep "2022-09-29 10:14:08" demo.log|wc
十一、链接
Linux链接分硬链接和软链接(符号链接)。
硬链接可以简单的理解为文件的别名,只能为文件创建硬链接,不能为目录创建硬链接。
ln 文件名 链接名
硬链接不能跨文件系统。
硬链接允许一个文件拥有多个有效文件名,如果为重要文件建立硬链接,可以防止“误删除”,只有当删除最后一个链接的时候,文件才会被真正的删除。
软链接类似Windows的快捷方式,可以为目录和文件创建软链接。
ln -s 目录或文件名 链接名