一起入门Linux咯 | 基础命令
如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里
- 命令解释
- explainshell
- linux命令查询
- 系统基础命令
- 系统基础信息
- 进程管理
- 网络
- 磁盘管理
- 用户管理
- 权限管理
- 关机重启
- 文件与目录操作
- 文件与目录
- 打包和压缩
- 文件操作和处理
命令解释
- explainshell
一个可以解释shell命令的网站,很强大, 可惜是英文版,不过没关系 - Linux命令搜索
中文版的命令解释,不过没有explainshell强大
目录结构
常用核心目录
目录 | 描述 | 备注 |
---|---|---|
/ | 根目录 | |
/bin | 存储二进制可执行文件,如ls, cat , uname ,tar 等 | |
/sbin | 存储二进制可执行文件,通常是系统管理员使用的系统级别命令,如ifconfig, systemctl | |
/etc | 存放系统管理与配置文件 | |
/proc | 一般存放系统的相关信息,比如用户信息passwd, CPU信息cpuinfo,内存信息meminfo | |
/root | 超级用户root的主目录,root的Home | |
/home | 普通用户的主目录,如admin的Home路径是/home/admin |
核心软件库
目录 | 描述 | 备注 |
---|---|---|
/usr | 用于存放系统应用程序,这是最庞大的目录,几乎所有要用到的应用程序都安装在这个目录,类似程序应用的根目录 | |
/usr/bin | 众多的第三方应用,比如vim,wget, whereis等 | |
/usr/lib | 存放第三方程序的共享库 | |
/usr/local | 类似/usr目录,不过通常用于存放用户自己安装应用程序文件 | |
/usr/local/bin | 存放全局用户使用的二进制执行文件,比如自己安装的应用程序的shell,或自己写的shell | |
/usr/local/lib | 存放自行安装的应用的共享库 |
非常用核心目录
目录 | 描述 | 备注 |
---|---|---|
/dev | 用于存放设备的目录 | |
/boot | 存放系统引导时的各种文件 | |
/mnt | 用户临时挂载其他的文件系统目录 | |
/tmp | 用于存放各种临时目录 | |
/lib | 存放系统程序所需要的共享库或内核模块,类似windows的dll库 | |
/var | 用于存放运行时需要改变数据的文件,比如日志文件 |
系统基础命令
系统基础信息
-
显示机器的处理器架构
arch
,uname -m
-
显示正在使用的系统内核(版本)
uname -r
cat /proc/version
-
查看当前系统的发型版本(非内核)
lsb_release -a
Redhat、SuSE、Debian等发行版
cat /etc/issue
cat /etc/{centos-release}
Centos -
显示CPU信息
cat /proc/cpuinfo
cat /proc/cpuinfo| grep "cpu cores"| uniq
核心数
cat /proc/cpuinfo| grep "processor"| wc -l
逻辑核心数(线程数)
cat /proc/cpuinfo | grep name
型号 -
显示内存信息
cat /proc/meminfo
-
显示系统当前时间
data
-
显示系统当前的日历
cal
进程管理
-
查看当前的消耗资源最多的进程动态
top
top -c
显示详细的进程信息 -
查看当前系统的进程状态
ps
ps -ef
显示所有的进程信息,连同命令行,PID等信息
ps -aux
显示所有的进程信息,连同命令行,PID 以及 CPU, 内存使用量 -
杀死进程
kill {PID}
缓杀死PID号为xxx的进程,等待进程执行完毕后杀死,可能杀不死
kill -9 {PID}
不管进程是否有任务正在进行,立即杀死,可能会丢失数据
网络
-
查看ip地址
ifconfig
ip addr
-
查看Linux中网络系统状态信息
netstat
,ss
netstat -p
,ss -pl
查看进程使用的socket 显示正在使用Socket的程序识别码和程序名称
netstat -an
在netstat输出中不显示主机,端口和用户名(host, port or user) -
列出所有端口 (包括监听和未监听的)
netstat -a
列出所有端口
netstat -at
列出所有tcp端口
netstat -au
列出所有udp端口 -
列出所有处于监听状态的 Sockets
netstat -l
只显示监听端口
netstat -lt
只列出所有监听 tcp 端口
netstat -lu
只列出所有监听 udp 端口
netstat -lx
只列出所有监听 UNIX 端口 -
查看端口号为XX的进程的PID
lsof -i :{port}
磁盘管理
- 显示已经挂载的分区列表
df -h
- 估算目录dir已经使用的磁盘空间
du -sh {dir}
用户管理
-
概念
UID
用户ID, 系统其实只记录ID, 用户名只是方便用户使用的ID映射
GID
用户组ID, 同理,每个用户可以加入多个用户组
有效用户组
有效用户组是当前用户实际操作时所生效的用户组,用户属于多个组,创建文件时,文件应该属于哪个组? -
查看用户,用户组,用户密码源文件
cat /etc/group
查看用户组源文件(组名称:组密码:GID:组成员)
cat /etc/passwd
查看用户源文件 (注册名:密码:UID:GID:用户名:用户主目录:所用的shell)
cat /etc/shadwos
查看用户密码(加密了)
grep {username} /etc/passwd /etc/shadow /etc/group
查看某个用户的全部相关定义 -
用户
useradd {username}
新增一个用户,centos下自动创建home, 设置shell;ubuntu下是不完整的user
adduser {username}
新增一个用户,ubuntu下建议使用该命令
userdel {username}
删除用户,同时删除/etc下的相关的定义信息,但不删除Home
userdel -r {username}
彻底删除用户,包含Home
passwd {username} {password}
修改用户密码
chage -{option} {username}
修改用户密码的有效期
usermod xxxx {username}
修改账户的信息 -
用户组
groups {username}
username用户属于那些用户组(如有多个,第一个是有效用户组)
newgrp {group-name}
为当前用户切换xxx为有效用户组
groupadd {group-name}
添加一个新用户组,Centos,Ubuntu
addgroup {group-name}
添加一个新用户组,Ubuntu
groupdel {group-name}
删除一个用户组
groupmod xxx {group-name}
修改用户组的信息 -
显示登录用户
who
显示目前登录系统的所有用户信息
whoami
显示目前session下,登录用户是谁 -
切换账户 | 重登 | 注销
su {user}
切换user账户
login
重新登录,可切换账户
logout
登出
exit
退出,登出
权限管理
文件目录的权限和类别有10位符号表示,第一位表示类型,后9位表示权限
- 第一位
-
是文件,d
是目录,|
是连接文件,b
可供存储的接口设备,c
是键盘鼠标等[2,4]
位是当前用户的读写权限,[5,7]
位是所属用户组的读写权限,[8,10]
是其他所有用户的读写权限读写执行权限
r
读取属性, 4w
写入属性, 2x
执行属性, 1
- 改变文件或目录所属的用户组
chgrp {group} {file or path}
将file或path的所属用户组更改为group
chgrp -R {group} {file or path}
如果是目录,则递归修改子路径下的所有目录和文件所属用户组为group - 改变文件或目录的所有者或用户组
chown {user} {file or path}
将file或path的所有者更改为user
chown {user:group} {file or path}
将file或path的所有者更改为user, 用户组更改为group
chown -R {xxx} {xxx}
递归子路径更改权限 - 改变文件或目录的权限
chmod -{option} {args} {file or path}
修改file或path的权限根据args修改option所代表的权限
chmod -R -{option} {args} {file or path}
递归子路径
chmod u=rwx,g=rwx,o=rwx {file or path}
,chmod 777 {file or path}
给file或path的用户,用户组,其他用房都给全部读写权限
chmod u+x,0-x {file}
file的用户权限增加执行功能,其他用户取消执行功能
chmod 744 {file}
file文件除了当前用户有所有读写执行权限,其他用户都只有可读权限
关机,重启
- 关机
shutdown -h now
init 0
telinit 0
- 定时关机
shutdown -h {hours}:{minutes} &
定时关机
shutdown -c
取消定时关机 - 重启
shutdown -r now
reboot
文件与目录操作
文件与目录
-
概念
.
当前目录
..
父级目录
-
上次所在的目录
/
根目录
~
home目录
./{path}
当前目录的子路径
/{path}
根目录的子路径 -
进入目录
cd {path}
cd
进入个人账户目录
cd ..
进入上级目录
cd ../..
进入上两级目录
cd -
进入上次所在的目录
cd home
,cd ~
进入Home
cd /
进入根目录 -
显示当前路径
pwd
-
显示文件和目录
ls
,ls -F
查看当前路径下的文件
ls -a
查看当前路径下的所有文件,包含隐藏文件
ls -l
查看当前路径下的所有文件的详细信息 -
创建文件或目录
touch {file1}
创建一个叫file1的空文件
mkdir {dir1}
创建名叫dir1的目录
mkdir {dir1} {dir2}
创建多个目录
mkdir -p {dir1}/{dir2}/{dir3}
创建一个目录树 -
删除目录或文件
rm {file1}
删除file1文件
rmdir {dir1}
删除一个空目录
rm -r {dir1}
删除一个目录及其下的内容(递归删除) -
移动文件或目录
mv {source} {target}
移动source到target位置(文件or目录) -
复制文件或目录
cp {source} {target}
复制source到target上(文件或目录)
cp -r {source} {target}
复制source以及子目录(文件)到target位置上,递归复制
打包和压缩
各个不同后缀的含义如下:
.tar
打包格式:tar程序打包的文件,并没有压缩过.z
格式:compress程序压缩的文件.gz
格式:gzip程序压缩的文件.bz2
格式:bzip2程序压缩的文件.tar.gz
格式:tar程序打包的文件,经过 gzip 的压缩.tar.bz2
格式:tar程序打包的文件,经过 bzip2 的压缩.tar.xz
格式:tar程序打包的文件,经过xz格式的压缩
-
概念
-c
创建,压缩
-t
查询
-x
解压,还原
-vf
我们就当做是必备固定格式,-v是显示指令过程,-f必需在最后面,指定文件
-z
对应tar.gz格式
-j
对应tar.bz2格式
-J
对应tar.xz格式
-Z
对应tar.z格式 -
tar命令打包压缩
tar -cvf {hello.tar} {hello}
将hello文件打包,不经过压缩
tar -zcvf {hello.tar.gz} {hello}
将hello文件打包,经过gz格式压缩
tar -jcvf {hello.tar.bz2} {hello}
将hello文件打包,经过bz2格式压缩
tar -Jcvf {hello.tar.xz} {hello}
将hello文件打包,经过xz格式压缩
tar -Zcvf {hello.tar.z} {hello}
将hello文件打包,经过z格式压缩 -
tar命令解压
tar -xvf {hello}.tar
将hello.tar解压还原成hello
tar -zxvf {hello}.tar.gz
将hello.tar.gz解压,还原成hello
tar -jxvf {hello}.tar.bz2
将hello.tar.bz2解压,还原成hello
tar -Jxvf {hello}.tar.xz
将hello.tar.xz解压,还原成hello
tar -Zxvf {hello}.tar.z
将hello.tar.z解压,还原成hello -
jar格式压缩和解压
jar -cvf {hello.jar} {hello}
将hello文件打包压缩成hello.jar
jar -xvf {hello}.jar
将hello.jar解压,还原成hello -
7z格式压缩和解压
7z a {hello.7z or hello.rar} {hello}
将hello文件打包成hello.7z或hello.rar
7z x {hello}.7z
,7x x {hello}.rar
将hello.7z 或hello.rar解压还原成hello -
zip格式压缩和解压
zip -r {hello.zip} {hello}
将hello文件打包压缩成hello.zip
upzip {hello}.zip
将hello.zip解压还原为hello
文件操作与处理
-
文件搜索
find {/} -name {file1}
从/路径下查找名称为file1的文件或目录
find {/} -user {user1}
从/路径下查找属于user1用户的文件或路径
find {/} -type f -atime +10
搜索根路径下,过去10天未被使用过的执行文件
find {/} -type f -mtime -10
搜索根路径下,过去10天内被创建或修改过的文件
locate {fileName}
配合索引数据库的形式进行查找file文件的位置,与find类似,但性能更好
whereis {fileName}
查找二进制文件,比如命令grep,man等源文件的位置
which {fileName}
查找命令源文件的实际存储位置,判断该命令到底执行的是存储在那个位置的命令 -
查看文件内容
cat {file1}
查看文件内容,从头开始
tac {file1}
查看文件内容,从尾开始
cat {file1} | grep -v ^#
查看文件中不以#开头的内容
more {file1}
查看一个长文本的内容,类似Less
less {file1}
查看一个长文本内容,分页浏览,允许向前,向后翻页,Q退出
head -2 {file1}
查看file1文件的前两行
tail -2 {file1}
查看file1文件的后两行
tail -f {file1}
实时查看file1文件的尾部追加内容 | 看log -
查找文件的部分内容
grep hello {file}
在file文件中查找含有hello关键字的行
grep ^hello {file}
在file文件中查找所有以hello开头的行
grep [0-9] {file}
在file文件中查找所有含有数字的行
grep -v hello {file}
在file文件中查找所有不含hello关键字的行
grep -v ^# {file}
在file文件中查找所有不以#开头的行 -
截取文本
cut
-
统计文件的行数,单词数,字节数
wc {file}
统计file文件的行数,单词数,字节数
wc -l {file}
统计file文件的行数
wc -c {file}
统计file文件的字节数
wc -w {file}
统计file文件的单词数 -
去重(相邻的重复行才叫重复)
uniq {file}
去除file文件中的相邻重复文本(不相邻行的重复,不去除)
uniq -c {file}
去除file文件的相邻重复文本,并显示相邻重复行的个数
uniq -u {file}
只显示file文件中不重复的行
uniq -d {file}
只显示file文件中重复的行,不重复的不显示 -
将文件内容进行排序
sort
-
文本和数据进行处理的编程语言
awk
-
功能强大的流式文本编辑器
sed
Linux软件包管理
rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道
- rpm包主要应用在RedHat系列包括 Fedora,Centos等发行版的Linux系统上,
- deb包主要应用于Debian系列包括现在比较流行的Ubuntu等发行版上。
- yum软件包管理程序是基于rpm的,apt-get软件包管理程序是基于deb的
yum包(Fedora,RedHat,Centos)
-
查找与显示
yum list
显示yum服务器提供的所有rpm软件包
yum list installed
显示本地已安装的rpm软件包
yum deplist {name}
查看xxx程序的软件包依赖情况 -
安装rpm软件包
yum install {name}
从yum服务器中下载并安装一个rpm包
yum localinstall {name.rpm}
安装本地提供的rpm包,并使用自己的软件仓库解决依赖关系 -
更新已安装的rpm软件包
yum update
全部更新, 不删除旧依赖包
yum update {name}
更新指定rpm软件包,不删除旧依赖包
yum upgrade
全部更新,删除旧依赖包
yum upgrade {name}
更新指定rpm软件包,删除旧依赖包
yum check-update
检查可更新的程序
yum 的update与apt update不太一样,yum update 不建议随便使用 -
卸载已安装的rpm软件包
yum remove {name}
-
清理缓存
yum clean packages
清理缓存目录下的软件包
yum clean headers
清理缓存目录下的headers
yum clean oldheaders
清理缓存目录下的headers
apt包(Debian,Ubuntu)
-
查找与显示
apt-cache search {name}
搜索列表中含有关键字的软件包
apt list
展示apt服务器中可下载的软件包列表
dpkg -l
展示本地已经安装好的deb包,基于deb包的命令,非apt自带 -
更新apt软件包列表
apt-get update
获取最新列表 -
安装一个软件包(deb包)
apt-get install {name}
从服务器安装/更新一个 deb 包
apt-cdrom install {name}
从光盘安装/更新一个 deb 包 -
卸载一个已安装的deb包
apt-get remove {name}
保留配置文件
apt-get -purge remove {name}
彻底删除,删除配置文件 -
升级所有已安装的软件
apt-get upgrade
-
从下载的软件包中清理缓存,类似清理安装包
apt-get clean
-
确认依赖的软件仓库正确
apt-get check
其他复杂操作
- 别名管理
- 环境变量
- 防火墙管理
- 系统服务管理