用户和用户组管理
su - root # 切换到root用户
useradd tom # 添加用户tom
userdel tom # 删除用户tom,但不删除用户目录
userdel -r tom # 删除用户tom并将用户目录删除
useradd tom -g group # 添加用户tom并将其指定到group组中
usermod tom -g group # 将用户tom指定到组group中
usermod tom -G group # 将用户tom指定到组group中,但是也不离开原来的组(用户tom同时在两个组里)
usermod -d /home/fox tom # 更改用户tom登录后的初始目录为/home/fox/,前提是用户tom有进入/home/fox/目录的权限
passwd tom # 更改用户tom的密码
groupadd monster # 创建组monster
useradd -g monster fox # 创建用户fox并指定所在组为monster
chgrp monster apple.txt # 将apple.txt所在组指定为monster
vim /etc/passwd # 记录用户信息的文件
vim /etc/shadow # 记录用户加密密钥
vim /etc/group # 记录组信息
管理文件/目录所有者和所在组/权限
ls ahl # 查看文件权限和所有者和所有组
ls -l
############################################################################################################
# drwxrwxr-x. 2 tom tom 4096 12月 21 22:52 dic
# 第0位是文件类型:d文件夹;-普通文件;l链接文件;c字符设备文件,如鼠标键盘;b块设备,如硬盘
# 第1-3位是文件的所有者对该文件的权限:r读;w写,但不代表可以删除,对文件所在目录有写权限才可以删除;x执行;
# 第4-6位是文件所属组对该文件的权限:rwx同上,-无对应权限:如rw-,有读写权限,无执行权限;r-x,有读权限和执行权限,无写权限
# 第7-9位是其他组对该文件的权限,rwx作用到目录,r可以读取,ls该目录的内容;w可以修改:创建删除重命名;x可以进入该目录
# 文件权限可用数字表示,r=4,w=2,x=1,因此r+w+x=7
# 数字2,文件:硬链接数 目录:子目录数量(包括隐含的.目录和..目录)
# 4096,文件大小(Byte),如果是文件夹则显示4096
############################################################################################################
chmod u=rwx,g=rx,o=x 文件/文件名 # u所有者;g所有组;o其他人;a所有人
chmod o+w 文件/目录名 # 给其他用户赋予写权限
chmod a-x 文件/目录名 # 取消所有人的执行权限
chmod 750 文件/目录名 # 给所有者赋予读写执行权限(4+2+1),给所有组赋予读和执行的权限(4+1),其他人无权限(0)
chown tom apple.txt # 将apple.txt文件的所有者改为tom
chown tom /home/dic # 将dic文件夹所有者改为tom
chown -R tom /home/dic # 递归更改所有者为tom,包括dic及其子文件和子文件夹
chgrp group 文件/目录 # 更改文件/目录的所在组
chgrp -R group 文件/目录 # 递归更改文件/目录及其子文件和子文件夹的所在组
更改运行级别
systemctl get-default # 查看默认运行级别
systemctl set-default multi-user.target # 切换到多用户级别
systemctl set-default graphical.target # 切换到图形界面运行级别
找回root密码
#找回密码#
在启动到选择启动的系统核心时,按e,定位到linux16所在行,在行末尾追加init=/bin/sh,然后按Ctrl+X,进入单用户模式,如下
sh-4.2#
mount -o remount,rw /
passwd
#输入密码
touch /.autorelabel
exec /sbin/init
#等待系统自动重启
#重启后重新以root登录,使用更改后的密码登录,登录后可以将密码改回习惯密码
文件操作
cd~ # 进入当前用户目录
cd # 进入当前用户目录
cd .. # 返回上级目录
mkdir /home/tom/dir # 在/home/tom/目录中创建文件夹dir
mkdir -p /home/tom/dic/tion/dir # 创建多级目录
rmdir /home/tom/dir # 删除空目录dir
rm -rf /home/tom/dic/tion # 递归强制删除非空目录dir及其子文件和子文件夹
touch hello.txt # 创建空文件hello.txt
cp /home/tom/hello.txt /home/tom/hi.txt # cp 源文件路径 目标文件路径
cp -r /home/tom/dic/ /home/tom/dir # 递归复制文件夹dic及其子文件和子文件夹到dir下
\cp ./hello.txt ./hi.txt # 强制覆盖已存在的hi.txt,但不提示覆盖提醒
rm -r -f hello.txt # -r递归删除 -f强制删除不提醒
mv hello.txt hey.txt # 重命名hello.txt为hey.txt
mv hey.txt ./dir/
查看、修改文件内容
cat -n /etc/profile # 查看文件内容,带行号,显示全部
cat -n /etc/profile |more # 可加管道命令 |more,显示一页,回车显示更多,空格翻译一页,q退出,Ctrl+F向下滚动一屏,Ctrl+B向上滚动一屏 =显示当前行号 :f输出文件名以及当前行号
less /etc/profile # 不是一次性加载文件,适合查看大文件,空格翻页,pageup上一页,pagedown下一页,/要搜索的内容 n向下查找 N向上查找,?要搜索的内容 n向下查找 N向上查找,q退出
head /etc/profile # 默认查看前10行
head -n 5 /etc/profile # 查看前5行
tail /etc/profile # 默认查看后10行
tail -n 5 /etc/profile # 查看后5行
tail -f hi.txt # 实时追踪文档的更新,使用echo、ls、cat覆盖或追加的才可以检测到,覆盖追加时如果不存在,则会自动创建
echo 123 > hi.txt # 覆盖写入123
echo 456 >> hi.txt # 追加写入456
ls -l >> hi.txt # 将当前目录的文件或文件夹列表追加写入
cat hi.txt >> hello.txt # 将hi.txt文件内容追加写入到hello.txt中
cal >> cal.txt # 将当前日历信息追加到cal.txt
查询指令
echo hello,world!
echo "hello,world!"
echo $HOSTNAME
histroy # 查看历史指令
histroy 10 # 查看最近10条历史指令
!70 # 执行历史指令编号为70的指令
date
date +%Y # +%m +%d
date "+%Y-%m-%d %H:%M:%S"
date -s "2022-12-15 17:12:01" # 设置当前系统
cal # 显示本月日历
cal 2022 # 显示2022所有月份信息
find /home -name hi.txt # 查找home文件夹下文件名为hi.txt的文件
find /home -user tom # 查找属于用户tom的文件
find /home -size +200M # 查找大于200M的文件,+大于-小于,没有符号为等于,单位有k、M、G、T
find /home -size 200M # 查找大小为200M的文件
locate hi.txt # 基于数据库快速查询,显示hi.txt所在路径,使用前应该先试用updatedb创建locate数据库
updatedb # 创建locate数据库
which ls # 查找指令ls所在目录
grep -n "yes" hi.txt
cat hi.txt | grep -n -i "yes" # 过滤hi.txt文件,显示含有"yes"的行(忽略大小写,-i选项),并且显示行号(-n)实现
建立软链接
ln -s /root/ /home/myroot # 创建一个软链接myroot链接到root目录 如果cd /home/myroot/则会进入/root/目录
cd myroot # 进入后使用pwd显示的仍然是软链接的所在路径
pwd # 显示/home/myroot
rm /home/myroot # 删除软链接,不会影响root目录,软链接相当于Windows的快捷方式
压缩/解压缩指令
gzip /home/tom/hi.txt # 压缩hi.txt为hi.txt.gz,删除源文件
gunzip /home/tom/hi.txt.gz # 解压缩hi.txt.gz,删除源压缩文件
zip -r tom.zip /home/tom # 将/home/tom下所有的文件和文件夹递归压缩为tom.zip
unzip -d ./tom/ /home/tom.zip # 将/home/tom/tom.zip解压到当前目录的tom文件夹内 -d指定解压目录
tar -zcvf tom.tar.gz /home/tom/hi.txt /home/tom/hi.txt # 将hi.txt和hello.txt压缩到tom.tar.gz中
# -c 产生打包文件 -v 显示详细信息 -f 指定压缩文件名 -z 打包同时压缩 -x 解包.tar文件
tar -zcvf mytom.tar.gz /home/tom # 压缩tom文件夹到mytom.tar.gz,解压后为/home/tom/...
tar -zxvf mytom.tar.gz # 解压mytom.tar.gz到当前目录
tar -zxvf mytom.tar.gz -C /home/tom/mytom
进程操作
ps # -A列出所有进程 -w显示加宽可以显示较多的信息 -au显示较详细的信息 -aux显示所有包含其他使用者的进程
crond任务调度
crontab -e # 编辑crontab定时任务
crontab -l # 查询crontab任务
crontab -r # 删除当前用户所有的crontab任务
Debian软件包管理
Filename_Version-Reversion_Architectrue.deb
文件名_版本-修订版本_体系架构.deb
dpkg -i <package> # 安装一个在本地文件系统存在的Debian软件包
dpkg -r <package> # 移除一个已经安装的软件包
dpkg -P <package> # 移除已安装软件包及配置文件
dpkg -L <package> # 列出安装的软件包清单
dpkg -s <package> # 显示软件包的安装状态
APT软件包管理
工作原理:使用软件源配置文件/etc/apt/sources.list
列出最合适访问的镜像地址
配置项遵循该格式:DebType AddressType://Hostaddress/Ubuntu Distribution Component1 Component2
例:deb http://cn.archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse
sudo apt-get update # 扫描每一个软件源服务器,并为该服务器所具有的软件包资源建立索引文件,存放在本地的/var/lib/apt/lists目录中
sudo apt-get upgrade # 将系统所有的软件包升级为最新
sudo apt-get install
sudo apt-get --reinstall install # 重新安装
sudo apt-get remove # 不完全卸载,只会删除该删除的和相关与其有依赖关系的软件包
sudo apt-get --purge remove # 完全卸载,删除软件包的同时,还删除软件包所使用的配置文件
sudo apt-get autoremove # 将不满足依赖关系的软件包自动卸载
sudo apt-get source # 下载源码包
sudo apt-get check # 检查依赖关系完整性,与下一条指令是一对
sudo apt-get -f install # 修复依赖depends关系完整性,但不会处理推荐recommends和建议suggests关系的软件包
sudo apt-get clean # 清理软件包缓冲目录/var/cache/apt/archives/,除了lock锁文件和partical目录
sudo apt-get autoclean # 清理旧的软件包缓存,保留最新的
sudo apt-cache show # 获取软件包的详细信息
sudo apt-cache policy # 查询软件包的安装状态
sudo apt-cache depends # 查看软件包的依赖
sudo apt-cache rdepends # 查看被谁依赖
apt-get install
分为四步:
- 扫描本地存放的软件包更新列表(由apt-get update命令刷新更新列表)
- 进行软件依赖关系检查,找到支持该软件正常运行的所有软件包
- 从软件源所指的镜像站点中,下载相关软件包
- 解压软件包,自动完成应用程序的安装和配置
网络配置
/etc/interfaces/
/etc/hosts
/etc/resolv.conf
ifconfig # 查看本地网络配置,如果没有,需要安装net-tools
ifconfig eth0 # 只查看第一块网卡的配置
sudo ifconfig eth0 192.168.1.1 netmask 255.255.255.0 # 临时为eth0配置ip地址和子网掩码
配置动态IP
dhclient
sudo /etc/init.d/networking restart # 网络服务重启
DHCP分为四个阶段
- 客户端寻找DHCP服务器(DHCPDISCOVER),客户端广播申请动态IP的请求
- 服务器提供可分配的IP地址 (DHCPOFFER) :所有接收到请求的DHCP服务器都将向客户端提供一个IP地址;
- 客户端接受IP地址租借 (DHCPREQUEST) :客户端从多个IP选择中挑选一个通知DHCP服务器,并标识出所选中的服务器;
- 服务器确认租借IP(DHCPACK) : 被选中的DHCP服务器最后发出一个确认信息,包含IP地址、子网掩码、默认网关、DNS服务器和租借期 (客户端使用这个IP的这段时间,称为租借期)。
配置DNS服务器
nslookup www.baidu.com # 查询域名解析地址
nslookup www.baidu.com ns1.sfn.cn # 使用指定到DNS服务器解析百度
vim /etc/resolv.conf
nameserver 192.168.1.1
ping -c 3 www.baidu.com # ping百度,发送三次ICMP数据包
Makefile工程管理器
Make工程管理器是一个“自动编译管理器”,自动是指能够根据时间戳自动发现更新过的文件而减少编译的工作量,它通过读入Makefile文件的内容来执行大量的编译工作
Make将只编译改动过的代码文件,而不用完全编译
Makefile是make工具读入的唯一配置文件
make工具的选项
-C dir读入指定目录下的Makefile
-f file读入当前目录下的file文件作为Makefile
-i忽略所有的命令执行错误
-I dir指定被包含的Makefile所在目录
-n 只打印要执行的命令,但不执行这些命令
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 如果make在执行过程中改变目录,打印当前目录名
Makefile文件组成
- 由make工具创建的目标体 (target),通常是目标文件或可执行文件
- 要创建的目标体所依赖的文件 (dependency_file)
- 创建每个目标体时需要运行的命令 (command)
命令行前面必须是一个TAB键,否则编译错误为:** missing separator. Stop.*
Makefile基本结构
target:dependcy_files
< TAB >command
例:
hello.o:hello.c hello.h
gcc -c hello.c -o hello.o
gcc选项:
- -Wall 表示允许发出gcc所有有用的报警信息
- -c 只编译不链接,生成目标文件.o
- -o file 表示把输出文件输出到file里
test:f1.o f2.o main.o # 目标文件:依赖
gcc f1.o f2.o main.o -o test
f2.o:f2.c
gcc -c -Wall f2.c -o f2.o
f1.o:f1.c
gcc -c -Wall f1.c -o f1.o
main.o:main.c
gcc -c -Wall main.c -o main.o
.PHONY:clean
clean:
rm *.o test
变量定义的方式
- 递归展开方式
VAR=var
- 简单方式
VAR:=var
- 变量使用
$(VAR)
?=
定义变量+=
可以为已经定义了的变量添加新的值
递归展开方式的例子
foo=$(bar)
bar=$(ugh)
ugh=Huh?
echo $(foo) # 结果为Huh?
简单方式的赋值方式类似C语言
?=
定义变量的例子:
dir:=/foo/bar
FOO?=bar # 如果FOO先前没有定义过,那么FOO将是bar
预定义变量
AR
库文件维护程序的名称,默认值为ar。AS汇编程序的名称,默认值为as
CC
C编译器的名称,默认值为cc
CPP
C预编译器的名称,默认值为$(CC) -E
CXX
C++编译器的名称,默认值为g++
FC
FORTRAN编译器的名称,默认值为f77
RM
文件删除程序的名称,默认值为rm -f
OBJS= f1.o f2.o
OBJS+= main.o
CC= gcc
CFLAGS= -c -Wall
test:$(OBJS)
$(CC) $(OBJS) -o test
f2.o:f2.c
$(CC) $(CFLAGS) -c f2.c -o f2.o
f1.o:f1.c
$(CC) $(CFLAGS) -c f1.c -o f1.o
main.o:main.c
$(CC) $(CFLAGS) -c main.c -o main.o
.PHONY:clean
clean:
rm *.o test
自动变量
$*
不包含扩展名的目标文件名称
$+
所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$<
第一个依赖文件的名称
$?
所有时间戳比目标文件晚的的依赖文件,并以空格分开
$@
目标文件的完整名称
$^
所有不重复的目标依赖文件,以空格分开
$%
如果目标是归档成员,则该变量表示目标的归档成员名称
OBJS= f1.o f2.o
OBJS+= main.o
CC= gcc
CFLAGS= -c -Wall
test:$(OBJS)
$(CC) $(OBJS) -o test
f2.o:$<
$(CC) $(CFLAGS) -c f2.c -o $@
f1.o:f1.c
$(CC) $(CFLAGS) -c f1.c -o $@
main.o:main.c
$(CC) $(CFLAGS) -c main.c -o main.o
.PHONY:clean
clean:
rm *.o test
标签:文件,软件包,Linux,基础,hi,tom,home,txt
From: https://www.cnblogs.com/HelliWrold1/p/17004911.html