前言
Linux的历史可以追溯到1991年,当时一位芬兰大学生Linus Torvalds开始编写一个新的操作系统内核。他受到了Unix操作系统的启发,但受限于Unix的高昂价格,他希望创建一个免费的、开放源代码的替代品。因此,他着手开发一个用于个人计算机的新操作系统内核,最终诞生了Linux内核。
请记住这个大学生的名字Linus Benedict Torvalds中文名(林纳斯·贝内迪克特·托瓦兹),linux就是以他的名字命名的,林纳斯是个暴脾气,他曾毫不客气的怒怼C++,称 “C++ 真是一门很烂的语言!”. 还有一次这位大牛在芬兰的阿尔托大学所主办的一次活动时称Nvidia是他所接触过的“最烂的公司”。
林纳斯创建了linux这个免费开源的操作系统,他是开源运动的引领者。同时他也是全世界最牛X的黑客之一。除了我们熟知的linux,还有一个所有程序员都家喻户晓的工具git也是林纳斯的作品。在此做为开源软件的受益者向大佬致敬。
一、学习linux的意义
对于一个程序员来说,学习Linux是必要的。这是因为:
- 广泛应用: Linux是世界上最常用的服务器操作系统之一,几乎所有的云计算平台、服务器、网络设备等都在使用Linux。因此,熟悉Linux操作系统可以为程序员提供更广泛的就业机会和职业发展空间。
- 开放源代码: Linux的开放源代码性质使得程序员可以深入了解操作系统的工作原理,学习和参与开源项目的开发,提高自己的编程能力和经验。
自由定制:Linux操作系统的自由度非常高,可以根据需求进行定制和优化,适应各种不同的应用场景。掌握Linux可以让程序员更好地进行系统调优和性能优化。 - 开放协作: Linux社区是全球最大的开源社区之一,学习Linux意味着可以与全球顶尖的开发者和专家进行交流和合作,共同解决问题,提高自己的技术水平。
对于想要成为一名优秀程序员的人来说,学习Linux是必不可少的一部分,它不仅可以为个人职业发展带来巨大的机遇,还可以培养程序员的技术能力和开放合作精神。
二、常用命令
(1) 文件和目录操作命令
ls
列出目录内容
示例:ls
cd
更改目录
示例:cd /home/user
pwd
显示当前工作目录
示例:pwd
mkdir
创建新目录
示例:mkdir new_directory
rmdir
删除空目录
示例:rmdir empty_directory
rm
删除文件或目录
示例:rm file.txt, rm -r directory
cp
复制文件或目录
示例:cp source.txt destination.txt
mv
移动或重命名文件或目录
示例:mv oldname.txt newname.txt
touch
创建新文件
示例:touch newfile.txt
(2)文件内容查看和编辑命令
cat
显示文件内容
示例:cat file.txt
less
分页查看文件内容
示例:less file.txt
more
分页查看文件内容
示例:more file.txt
head
显示文件开头部分
示例:head -n 10 file.txt
tail
显示文件末尾部分
示例:tail -n 10 file.txt
nano
轻量级文本编辑器
示例:nano file.txt
vim
强大的文本编辑器
示例:vim file.txt
(3)文件权限和所有权命令
chmod
修改文件权限
示例:chmod 755 script.sh
chown
更改文件所有者
示例:chown user:user file.txt
chgrp
更改文件所属组
示例:chgrp group file.txt
(4)系统信息和管理命令
uname
显示系统信息
示例:uname -a
top
动态显示系统进程
示例:top
ps
显示当前进程
示例:ps aux
df
显示磁盘使用情况
示例:df -h
du
显示目录空间使用情况
示例:du -sh directory
free
显示内存使用情况
示例:free -h
uptime
显示系统运行时间和负载
示例:uptime
hostname
显示或设置系统主机名
示例:hostname, hostname newname
whoami
显示当前用户
示例:whoami
(5)软件包管理命令
apt-get
Debian系包管理器,用于安装/升级软件
示例:sudo apt-get update, sudo apt-get upgrade, sudo apt-get install package
apt-cache
查询软件包信息
示例:apt-cache search package
(6) 网络管理命令
ping
测试网络连接
示例:ping google.com
ifconfig
显示或配置网络接口(需安装net-tools)
示例:ifconfig
ip
显示或配置网络接口
示例:ip addr show
netstat
显示网络状态和连接
示例:netstat -tuln
ssh
通过SSH连接远程服务器
示例:ssh user@hostname
scp
通过SSH复制文件
示例:scp file.txt user@hostname:/path
wget
从网络下载文件
示例:wget http://example.com/file.txt
curl
从网络获取或发送数据
示例:curl http://example.com
(7) 压缩和解压缩命令
tar
处理tar文件(打包/解包)
示例:tar -czvf archive.tar.gz directory, tar -xzvf archive.tar.gz
gzip
压缩文件
示例:gzip file.txt
gunzip
解压文件
示例:gunzip file.txt.gz
zip
压缩文件
示例:zip archive.zip file1 file2
unzip
解压文件
示例:unzip archive.zip
用户和组管理命令
adduser
添加新用户并创建用户目录
示例:sudo adduser username
useradd
添加新用户(不创建用户目录)
示例:sudo useradd username
passwd
设置或更改用户密码
示例:sudo passwd username
usermod
修改用户属性
示例:sudo usermod -aG groupname username
deluser
删除用户及其主目录
示例:sudo deluser username
userdel
删除用户(不删除主目录)
示例:sudo userdel username
chage
更改用户密码有效期
示例:sudo chage -l username
addgroup
添加新组
示例:sudo addgroup groupname
groupadd
添加新组
示例:sudo groupadd groupname
delgroup
删除组
示例:sudo delgroup groupname
groupdel
删除组
示例:sudo groupdel groupname
gpasswd
管理/etc/group中的组成员
示例:sudo gpasswd -a username groupname
(8) 权限管理命令
ls -l
查看文件或目录的权限
示例:ls -l filename
chmod
修改文件或目录的权限
示例:
符号模式:chmod u+r filename
八进制模式:chmod 755 filename
三、用户和组管理
在Ubuntu系统上,用户和组管理是系统管理的重要部分,以下是一些常用的用户和组管理命令及其使用示例:
(1) 用户管理命令
命令 | 描述 | 示例 |
---|---|---|
adduser | 添加新用户并创建用户目录 | sudo adduser username |
useradd | 添加新用户(不创建用户目录) | sudo useradd username |
passwd | 设置或更改用户密码 | sudo passwd username |
usermod | 修改用户属性 | sudo usermod -aG groupname username |
deluser | 删除用户及其主目录 | sudo deluser username |
userdel | 删除用户(不删除主目录) | sudo userdel username |
chage | 更改用户密码有效期 | sudo chage -l username |
(2) 组管理命令
命令 | 描述 | 示例 |
---|---|---|
addgroup | 添加新组(Ubuntu专有) | sudo addgroup groupname |
groupadd | 添加新组 | sudo useradd username |
delgroup | 删除组(Ubuntu专有) | sudo delgroup groupname |
groupdel | 删除组 | sudo groupdel groupname |
gpasswd | 管理/etc/group中的组成员 | sudo gpasswd -a username groupname |
(3) 用户和组信息查询命令
命令 | 描述 | 示例 |
---|---|---|
id | 显示用户和组的ID | id username |
groups | 显示用户所属的所有组 | groups username |
finger | 显示用户信息 | finger username |
getent | 查询系统数据库中的用户和组信息 | getent passwd username, getent group groupname |
(4)用户和组相关文件
- /etc/passwd:存储用户账户信息,每行记录一个用户
cat /etc/passwd
- /etc/shadow:存储用户密码信息及密码有效期信息(只有root用户可读)
sudo cat /etc/shadow
- /etc/group:存储组信息,每行记录一个组。
cat /etc/group
(5)用命令示例
添加用户
sudo adduser john
adduser命令会交互式地提示输入新用户的密码和其他信息,并自动创建用户的主目录。
修改用户
sudo usermod -aG sudo john
将用户john添加到sudo组中,使其具有管理员权限。
删除用户
sudo deluser john
删除用户john及其主目录。
添加组
sudo addgroup developers
创建一个名为developers的新组。
添加用户到组
sudo gpasswd -a john developers
将用户john添加到developers组中。
查询用户信息
id john
显示用户john的UID、GID及所属组的信息。
groups john
显示用户john所属的所有组。
四、文件和目录权限管理
在Linux系统中,查看和修改文件或目录的读写权限是日常管理中的重要任务。以下是相关的常用命令及其使用方法:
(1)查看文件或目录的权限
使用 ls -l 命令
ls -l 命令可以显示文件或目录的详细信息,包括权限、所有者、所属组、大小和修改时间。
ls -l filename
或
ls -l /path/to/directory
输出示例:
-rw-r--r-- 1 user group 1234 Jan 1 12:34 filename
drwxr-xr-x 2 user group 4096 Jan 1 12:34 directory
解释:
- -rw-r–r–:文件权限,分为三部分,每部分各有三个字符。
- 第一个字符表示文件类型:-表示普通文件,d表示目录。
- 接下来的三个字符rw-表示所有者的权限:读(r)、写(w)、执行(x)。
- 中间的三个字符r–表示所属组的权限。
- 最后的三个字符r–表示其他用户的权限。
(2)修改文件或目录的权限
使用 chmod 命令
chmod 命令用于修改文件或目录的权限,可以使用符号模式或八进制模式。
符号模式
- u:所有者 (user)
- g:所属组 (group)
- o:其他用户 (others)
- a:所有用户 (all)
- +:添加权限
- -:删除权限
- =:设置权限
示例:
chmod u+r filename # 给所有者添加读权限
chmod g-w filename # 移除所属组的写权限
chmod o+x filename # 给其他用户添加执行权限
chmod a=r filename # 设置所有用户只读权限
八进制模式
- 读 ® = 4
- 写 (w) = 2
- 执行 (x) = 1
每个权限段的值相加得到总权限值。 - 所有者权限在第一个位置
- 所属组权限在第二个位置
- 其他用户权限在第三个位置
示例:
chmod 644 filename # -rw-r--r--
chmod 755 directory # drwxr-xr-x
(3)实用示例
查看文件权限
ls -l example.txt
输出:
-rw-r--r-- 1 user group 1234 Jan 1 12:34 example.txt
修改文件权限(符号模式)
chmod u+x example.txt # 给所有者添加执行权限
chmod g+w example.txt # 给所属组添加写权限
chmod o-r example.txt # 移除其他用户的读权限
修改文件权限(八进制模式)
chmod 755 example.txt # 设置文件权限为-rwxr-xr-x
chmod 600 example.txt # 设置文件权限为-rw-------
查看目录权限
ls -ld /path/to/directory
输出:
drwxr-xr-x 2 user group 4096 Jan 1 12:34 directory
修改目录权限(符号模式)
chmod u+rwx /path/to/directory # 给所有者添加读、写、执行权限
chmod g+rx /path/to/directory # 给所属组添加读、执行权限
chmod o-rwx /path/to/directory # 移除其他用户的所有权限
修改目录权限(八进制模式)
chmod 755 /path/to/directory # 设置目录权限为drwxr-xr-x
chmod 700 /path/to/directory # 设置目录权限为drwx------