linux基础
命令:
lsb_release -a ----查看版本
uname -r ----查看内核
id -u ----查看用户ID
type ----查看命令是内部命令还是外部命令
bs ----计算器
hash ----查看命令的缓存
hash -d XX --删除XX命令的缓存
hash -r ----删除全部缓存
hash -p /usr/bin/hostname hn ----使用hn命令相当于hostname
别名:
alias cdnet='cd /etc/sysconfig/network-scripts' --临时生效
删除别名:
unalias
修改.bashrc文件会永久生效(在该用户下),修改/etc/bashrc会全局生效
命令执行过程(优先级):
1,别名
2,内部命令
3,hash表(外部命令)
4,$PATH(外部命令)
内部命令集成在shell中,内部命令比外部命令更快
. .bashrc/source .bashrc --重新读取配置文件
sz .bashrc --将.bashrc文件传送给windows系统
clock ----查看硬件时间
clock -s ----硬件时间同步给系统时间
clock -w ----按系统时间同步硬件时间
ntpdate 172.16.0.1 ----向ntp服务器进行时间同步
lshw ----列出硬件列表
mandb ----生产whatis数据库(centos7)
makewhatis ----生成whatis数据库(centos6)
hexdump -c/-C /bin/bash --查看二进制文件
xxd /bin/bash ----xxd也可以看文件
内部命令:help command --内部命令的帮助信息
外部命令:command --help --外部命令帮助信息
man:
1,用户命令
2,系统调用
3,C库调用
4,设备文件及特殊文件
5,配置文件格式
6,游戏
7,杂项
8,管理类的命令
9,Linu内核API
查看man手册:man [章节] keyword
列出所有帮助:man -a keyword
搜索man手册:man -k passwd
相当于whatis:man -f keyword
打印man帮助文件的路径:man -w [章节] keyword
本地登录前界面显示:cat /etc/issue
man pam_issue 查看各项参数的含义
远程登录后显示的界面:/etc/moted
修改语言:localectl set-locale LANG=zh_CN.UTF-8
查看时区:timedatectl list-timezones
修改时区:timedatectl set-timezone
查看ASCII表:man ascii
关机:shutdown -h 1;
screen命令:先运行screen,在执行命令,执行窗口关闭后,命令继续执行;如果需要返回执行命令界面,执行screen -runlevel
两个窗口显示内容一致:
A:screen -S wang --A启动一个screen,名称为wang
B:screen -s wang --B加入wang,两个显示的内容就会一致
Crtl+a +d --可以临时退出,screen -x再次加入
echo -e "\a"
echo -e '[\e[32m ok \e[0m]' --绿颜色显示ok
'':单引号,命令和变量都不识别
``:识别命令和变量
"":双引号识别变量,不识别命令
history
!10 --执行历史命令第10条
crtl+r:搜索历史命令,crtl+g,退出搜索
修改默认历史命令的保存数量:/etc/profile
HISTTIMEFORMAT="%F %T " ----配置变量后,会显示时间戳
HISTCONTROL:
ignoredups,默认忽略重复的命令,连续相同为重复
ignorespace,忽略所有以空白开通的命令
ihnoreboth,相当于ignoredups和ignorespace
erasedups,删除重复命令
crtl+s:锁定屏幕
crtl+q:解除锁定
文件系统:
/dev:存放设备
/sys:硬件信息
新添加磁盘后可以通过该命令扫描磁盘:
echo '- - -' > /sys/class/scsi_host/host0/scan 或
echo '- - -' > /sys/class/scsi_host/host2/scan
/proc:内存中的数据
/etc
/etc/DIR_COLORS --修改文件显示的颜色,目录,文件
/lib:库
/bin:二进制文件
touch -- -h --可以创建以-开头的文件
rm -- -h --可以删除以-开头的文件
七种文件类型:
- 普通文件
d 目录文件
b 块设备
c 字符设备
l 符号链接文件
p 管道文件pipe
s 套接字文件scoket
basename --只取文件名,不取文件夹路径
dirname --只取文件夹路径,不取文件名
selinux配置文件:/etc/selinux/config
systemctl disable firewalld --禁用防火墙,centos7
chkconfig iptabled off --禁用防火墙,centos6
文件通配符:
*:匹配0个或多个
?:匹配单个
[abc]:匹配列表中的任何一个
[^abc]:匹配列表中字符以外的
预定义的字符类:man 7 glob
生成一个昨天日期的文件:touch `date -d '-1 day' +%F`.txt
生成一个今天日期的文件:touch `date +%F`.log
复制:cp
cp grub2.cfg{,.bak} --复制grub2.cfg为grub2.cfg.bak
cp -av /etc/ /data/backup`date +%F`
移动和重命名:mv
批量改文件:rename .log .log.bak *.log --把.log结尾的文件改为.log.bak
删除:rm
显示目录树:tree
创建目录:mkdir
删除空目录:rmdir
数据已删除,磁盘空间未释放:
释放磁盘空间 > /boot/bigfile; rm -f /boot/bigfile
inode表结构
Mode
Owner info
Size
Timestamps
直接块指针 如果一个块大小为4K,可以存放的数据大小为1024*4K,为4M
间接块指针 如果一个块大小为4K,可以存放的数据大小为1024*1024*4K,为4G
双重间接块指针 如果一个块大小为4K,可以存放的数据大小为1024*1024*1024*4K,为4T
三重间接块指针
硬链接,软链接
ln a b
ln -s a a1
创建软链接如果使用相对路径话,相对的是软链接的路径,不是相对于当前工作目录
rm -rf a2/ --如果a2为软链接,使用该方法删除,会删除a2所指的文件夹下的文件
rm -rf a2 --删除软链接a2
区别:
1,本质:硬链接是同一个文件,多个名字;软链接是不同的文件
2,跨分区:硬链接不支持跨分区,软链接可以跨分区
3,目录:硬链接不支持目录,软链接支持目录
4,相互关系:硬链接相互独立,软链接有依赖关系
5,inode标号:硬链接相同,软链接不同
6,链接数:硬链接删除后少一个链接数,软链接只是少一个文件
7,路径:硬链接创建时相对路径是相对于当前目录,创建软链接时相对路径是相对于软链接文件的路径
8,文件类型:硬链接是文件,软链接是一个链接文件
cp,rm,mv,软链接,硬链接的原理???
硬链接:
A是B的硬链接,A和B的inode节点号相同,一个inode节点对应两个不同的文件名,指向同一个文件。
1,新建一个文件名,并指向文件的inode,一个inode对应多个文件名
软链接:
A是B的软链接,A与B的inode节点号不同,指向不同的数据块。但是A的数据块中存放的只是B的路径名。
1,分配一个inode号,A的block中存放的是B的路径名;因此访问 A 时,会读取文件 B 的路径,进而读取文件 B 的内容
cp:
1,分配一个未被使用的inode号,在inode表中新添一个项目(如果是覆盖复制,inode号不变,沿用之前同名的inode号)
2,在目录中新建一个目录项,并指向inode
3,把数据复制到block中
rm:
1,减少待删除文件名所对应的inode的链接数量,如果链接数变为0,则释放inode,
同时数据库放到可用空间中(对外变现为已删除,随时可用覆盖。如果没有覆盖还可用恢复;一旦覆盖了,那么删除的数据无法恢复)
2,删除目录中的目录项
mv:
1,在目标文件的目录中新建目录项
2,删除源文件的目录中的目录项
3,目标文件名会指向源文件名的inode,因此操作对inode没有影响,对数据的位置也没有影响,
不移动任何数据指向源文件名的inode,因此操作对inode没有影响,对数据的位置也没有影响,不移动任何数据
file:查看文件内容
编辑工具VIM:
命令模式-->插入模式:i,I,a,A,o,O
ex模式下:
!可以在不退出的情况下执行命令
r! uname -r,可以把uname -r的执行结果写入进去
/,向下查找,?,向上查找,n,正向查找,N,反向查找
u,撤销,#u,撤销多次,U,撤销本行的所有修改
crtl+r:撤销撤销的动作
查找并替换:
s/要查找的内容/替换为的内容/修饰符
分隔符/,也可以为其他字符,@,#
修饰符:i,忽略大小写;
g,全局替换,每行只替换第一次出现的;
gc,全局替换,每次替换前询问
以二进制方式打开文件,vim -b binaryfile
扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
扩展命令模式下,利用xxd命令转换回二进制
:%!xxd -r
多窗口编辑:
vim -o file1 file2 --水平分割
vim -O file1 file2 --垂直分割
crtl+w +上键,切换到上面的文件编辑
crtl+w +下键,切换到下面的文件编辑
:set nu --加行号,临时的
修改文件家目录下.vimrc ,set nu ,打开文件就会有行号
:set autoindent,简写set ai,自动缩进,set noai进行取消
:set list,显示Tab和换行符
:set ff=unix --将windows文件格式转为linux格式
:set ff=dos --将linux格式转为windows格式
vimtutor----vim帮助手册
三种I/O设备:
1,标准输入(STDIN) -0
2,标准输出(STDOUT) -1
3,标准错误(STDERR) -2
重定向:
重定向标准输出:
uname -r > /data/stdout.log
echo magedu | passwd --stdin wang > /dev/null
标准输入重定向:
bc < bc.txt --将bc.txt文件的内容重定向给bc命令
标准错误重定向:
error 2> /data/stderr.log
ls /data /xxx > stdout.log 2> stderr.log --标准输出和错误输出分开存放
ls /data /xxx &> stdout.log --标准输出和错误输出到一个文件
>>,追加
tr命令:转换或删除字符
tr [:lower:] [:upper:] < a >> a --将a文件中的小写字母转为大写字母并追加到a
tr -d '\r' < win1.txt > win2.txt --删除win1.txt中的'\r'
tr '0-9' 'a-f' --0-9的内容转为a-f
管道:
seq 1 10 | tr '\n' ' '
seq 2>&1 | tr 'a-z' 'A-Z' --如果seq输出的是错误信息
tar -cvf - /home | tar -xvf -
hostname | tee /data.file2.log --既输出hostname,也将内容重定向到file2.log
uname -r | tee -a /data.file2.log --,-a,追加,不会覆盖之前的内容
mail -s help root <<EOF
hello,ni hao !!!
EOF
echo {1..100} | tr ' ' '+' | bc --计算1-100的和
seq -s "+" 100 --计算1-100的和
用户和组管理:
更改加密算法:authconfig --passalgo=sha256 --update,默认使用sha512
openssl rand -base64 9
mkpasswd -l 12 --生成随机密码
chage wang --修改shadow文件中wang用户的信息
vipw == vim /etc/passwd
vigr == vim /etc/group
groupadd admin1 --创建普通组
groupadd -r mysql --创建系统组
groupmod -n admin2 admin1 --修改组admin1为admin2
groupdel admin2 --删除
useradd
finger wang --查看wang用户的描述信息
chfn wang --修改wang用户的描述信息
用户创建相关的文件
/etc/default/useradd --创建用户时默认读取的文件
/etc/skel --创建用户,用户家目录下的文件,默认从这个拷贝作为模板
/etc/login.defs --创建用户时默认指定的信息
userdel -r wang --删除用户及用户相关文件
newusers passwd格式文件 --批量创建用户
echo jack:centos |chpasswd --修改jack用户密码
su - root -c "cat /etc/shadow" --切换到root身份执行命令,执行后再退回
echo pwd@123 | passwd --stdin wang --为用户wang修改密码
gpasswd -a wang g1 --用户加入组g1
gpasswd -d wang g1 --组g1中删除用户
chown root:root file1 --修改文件所属用户和用户组
chmod 644 file1 --修改文件读写权限
权限对于文件夹:
r权限,可以列出目录中文件
w权限,可以在文件夹中创建文件,删除文件
x权限,可以进入目录
chmod -R +X /data/ --只给目录下的文件夹加x权限,不给文件加x权限
特殊权限:
SUID:作用于二进制的程序
chmod 4755 file1,加suid权限,执行时继承所属用户的权限
SGID:二进制程序,或文件夹
chmod 2755 file1 ,加sgid权限,执行时继承所属组的权限
SGID用于文件夹时,里面新创建的文件会继承文件夹所属组
Sticky:针对文件夹
chmod 1755 file1,要想删文件夹里面的文件,必须是拥有者的权限
设定文件特定属性
chattr -i file1 --不能删除,改名,更改
chattr +a file1 --只能追加,不能修改
lsattr file1
默认权限umask,默认022
文件夹: 777 - umask
文件: 666 - umask,如果有奇数,则加1,偶数不变
可以写入.bashrc文件,永久保存
访问控制列表ACL:
setfacl -m u:wang:rw file1 --wang用户对file1文件有读写权限
setfacl -m g:g1:rw file1 --g1组对file1文件有读写权限
getfacl file1 --查看权限
setfacl -x u:wang --删除wang的权限
读取权限顺序:
1,所有者
2,ACL权限
对用户
对组
3,other
mask权限,acl里的
设置mask权限后,(除文件所有者和other)文件的最该权限不能超过mask权限(acl里面设置的user,group)