Linux学习笔记

  • A+
所属分类:linux技术
摘要

作者:Grey原文地址:Linux学习笔记除了/boot的数据,其他目录下的数据都存在了sda3里面了
/var 可变化的文件,比如:日志文件,数据文件
更多文件类型说明见:

作者:Grey

原文地址:Linux学习笔记

文件系统

Linux学习笔记

除了/boot的数据,其他目录下的数据都存在了sda3里面了
/var 可变化的文件,比如:日志文件,数据文件
更多文件类型说明见:

Linux学习笔记

## 级联创建目录 mkdir -p a/adir/bdir  mkdir a/adir a/bdir a/cdir mkdir a/{1,2,3}dir   ## 复制文件夹 ## 将a文件夹复制到cpp文件夹中,复制文件夹用 cp -r a cpp/  

stat和touch 组合使用,可以增量监控数据改变的时间 linux命令系列 stat & touch

挂载/卸载
/boot目录的加载和卸载
在/下:

umount /dev/sda1 mount /dev/sda1 /boot 

挂载实验

演示块设备

# 生成100m的空img文件 # dd命令可以用于硬盘的互相拷贝 dd if=/dev/zero of=mydisk.img bs=1048576 count=100  losetup /dev/loop0 mydisk.img  mke2fs /dev/loop0  mkdir /mnt/myos mount -t ext2 /dev/loop0 /mnt/myos  # 搜索一下bash的位置 whereis bash mkdir /mnt/myos/bin cd /mnt/myos cp /bin/bash /bin  cd /mnt/myos/bin  # 查看bash需要的依赖 ldd bash #	linux-vdso.so.1 (0x00007ffe0413d000) #	libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007fa608cb0000) #	libdl.so.2 => /lib64/libdl.so.2 (0x00007fa608aac000) #	libc.so.6 => /lib64/libc.so.6 (0x00007fa6086e9000) #	/lib64/ld-linux-x86-64.so.2 (0x00007fa6091fb000)    cd /mnt/myos mkdir lib64 cp /lib64/{libtinfo.so.6,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2}   ./lib64/  chroot ./ echo "d" > /abc.txt  

文件描述符实验

https://blog.csdn.net/qq_31186123/article/details/82190776

# 创建一个文件,写入一些内容 vi abc.txt  # 写入如下内容: dfasdfasdfasdfa1 asdfasdfasd2 sadfasdfasd3  # 将abc.txt读入fd4 exec 4< abc.txt  # 查看当前进程所有文件描述符 [root@sec fd]# ll /proc/$$/fd .... lr-x------. 1 root root 64 May 18 10:11 4 -> /root/abc.txt   [root@sec fd]# lsof -p $$ COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME .... bash    1719 root    4r   REG  253,0        43 33576569 /root/abc.txt ....   # 将abc.txt第一行读出来 [root@sec fd]# read a 0<& 4 [root@sec fd]# echo $a dfasdfasdfasdfa1 

文件偏移量实验

每个进程的偏移量互不影响,每个fd会单独维护一个seek(指针)

# 查看文件偏移量 # 一开始偏移量:0t17 [root@sec fd]# lsof -op $$ COMMAND  PID USER   FD   TYPE DEVICE OFFSET     NODE NAME .... bash    1719 root    4r   REG  253,0   0t17 33576569 /root/abc.txt ....  # 重新打开一个 # 偏移量0t0 [root@sec fd]# exec 4< /root/abc.txt  [root@sec fd]# lsof -op $$ COMMAND  PID USER   FD   TYPE DEVICE OFFSET     NODE NAME .... bash    1719 root    4r   REG  253,0    0t0 33576572 /root/abc.txt ....   

模拟socket实验

[root@sec fd]# echo $$ 1719 [root@sec fd]# cd /proc/1719/fd [root@sec fd]# exec 8<> /dev/tcp/www.baidu.com/80 [root@sec fd]# ll total 0 .... lrwx------. 1 root root 64 May 18 10:11 8 -> 'socket:[32794]'  [root@sec fd]# lsof -op $$ COMMAND  PID USER   FD   TYPE DEVICE OFFSET     NODE NAME .... bash    1719 root    8u  IPv4  32794    0t0      TCP sec:55974->183.232.231.174:http (ESTABLISHED) ....  

重定向操作符

[root@sec ~]# ls ./ abc.txt  anaconda-ks.cfg [root@sec ~]# ls ./ 1> ~/ls.out [root@sec ~]# ll total 12 -rw-r--r--. 1 root root   80 May 18 10:18 abc.txt -rw-------. 1 root root 1060 Apr 20 17:15 anaconda-ks.cfg -rw-r--r--. 1 root root   31 May 18 10:34 ls.out [root@sec ~]# cat ls.out  abc.txt anaconda-ks.cfg ls.out  [root@sec ~]# cat 0< ls.out 1>cat.out [root@sec ~]# cat cat.out  abc.txt anaconda-ks.cfg ls.out  # 覆盖操作 [root@sec ~]# read a fasdfasdfasdfas [root@sec ~]# echo $a fasdfasdfasdfas [root@sec ~]# read a 0< cat.out [root@sec ~]# echo $a abc.txt   

标准输入输出,错误输出

# 由于asdfasdfasdf目录不存在,所以执行ls会报错 [root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out ls: cannot access '/asdfasdfasdf': No such file or directory [root@sec ~]# cat ls01.out  ./: abc.txt anaconda-ks.cfg cat.out ls01.out ls.out   # 如果要保存错误信息 [root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out 2>ls03.out [root@sec ~]# cat ls03.out  ls: cannot access '/asdfasdfasdf': No such file or directory  # 或者这样 [root@sec ~]# ls ./ /asdfasdfasdf 1> ls04.out 2>& 1 [root@sec ~]# cat ls04.out  ls: cannot access '/asdfasdfasdf': No such file or directory ./: a abc.txt anaconda-ks.cfg cat.out ls01.out ls02.out ls03.out ls04.out ls.out 

管道

# 查询第五行[root@sec ~]# head -5 abc.txt | tail -1d123 

父子进程

[root@sec ~]# echo $$1719[root@sec ~]# /bin/bash[root@sec ~]# echo $$1824# pstree,安装:yum install psmisc -y [root@sec ~]# pstreesystemd─┬─NetworkManager───2*[{NetworkManager}]        ├─auditd───{auditd}        ├─crond        ├─dbus-daemon───{dbus-daemon}        ├─firewalld───{firewalld}        ├─login───bash        ├─polkitd───5*[{polkitd}]        ├─rngd───{rngd}        ├─sshd───sshd───sshd───bash───bash───pstree        ├─sssd─┬─sssd_be        │      └─sssd_nss        ├─systemd───(sd-pam)        ├─systemd-journal        ├─systemd-logind        ├─systemd-udevd        └─tuned───3*[{tuned}]        # 父子进程的数据是无法互相访问的[root@sec ~]# x=100[root@sec ~]# echo $x100[root@sec ~]# exitexit[root@sec ~]# echo $x[root@sec ~]# a=1[root@sec ~]# echo $a1[root@sec ~]# { a=9 ; echo "dassdf"; } | catdassdf[root@sec ~]# echo $a1# $$ 和 $BASHPID 优先级 , $$ 优先级高, $BASHPID 优先级低[root@sec ~]# echo $$2163[root@sec ~]# echo $$ | cat2163[root@sec ~]# echo $BASHPID | cat2191# 如果父子进程数据互相访问,需要用export[root@sec ~]# a=10[root@sec ~]# export a[root@sec ~]# /bin/bash[root@sec ~]# echo $a10 

永久关闭SELinux的方法

vim /etc/selinux/config 

把SELinux设置为disabled

Linux学习笔记

配置ssh密钥连接Linux

首先Win10系统上需要有OpenSSH,像这样:终端输入ssh

Linux学习笔记

这样就是有的(好像Win10 1809+默认就是有的)。
然后生成密钥对:
ssh-keygen -t rsa
接着按提示信息可根据个人需求选择,这里是默认(连续三个回车即可)。
生成的密钥对默认保存在当前用户的根目录下的.ssh目录中(C:Usersusername.ssh):

Linux学习笔记

接着我们将公钥id_rsa.pub上传至Linux服务器(保存到你要连接的用户根目录下~/.ssh/中,没有.ssh目录则创建):
修改/etc/ssh/sshd_config配制文件,修改以下内容
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

上传好后,将Linux中的id_rsa.pub重命名为authorized_keys,更改文件权限为600,更改.ssh目录权限为700:
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
chmod 700 .ssh

然后就可以通过ssh方式连接到Linux

Linux学习笔记

Linux的命令

分为内部命令和外部命令 内部命令(Shell自带的命令)

Linux学习笔记

外部命令(不是Shell自带的命令,由用户安装的)

Linux学习笔记

查看命令是一个什么类型的文件

Linux学习笔记

查看ifconfig命令在哪个位置

whereis ifconfig 

什么是Shell? bash shell,就是一个程序,就是Linux系统安装的一个软件

root/密码写对后,直接进入bash shell软件

Linux学习笔记

Linux学习笔记

echo $PATH

Linux学习笔记

内部命令的帮助用help指令,外部命令的帮助用man指令

echo $$: 当前bash shell的进程号

如果平时退出不了某个程序,可以复制一个ssh对话,用ps -ef找到那个进程,用kill -9 退出即可

bash shell在执行命令的时候,做了两步优化:

  1. 通过PATH来
  2. 通过hash来,hash查看,hash -r(清空hash)

Shell

编写脚本时候要赋予该文件执行权限chmod u+rx filename

如果bash执行,不需要赋予执行权限

bash ./filename.sh
./filename.sh
以上两种执行方式都是新开一个进程

source ./filename.sh
.filename.sh
这种方式执行不会产生新的子进程

#!/bin/bash/cd /tmppwd 

输入重定向符号 <

read var < /path/to/a/file

输出重定向 >   >> 2> &>

echo 123 > /path/to/a/file  清空输入
echo 123 >> /path/to/a/file 追加
echo 12343 2> /path/to/a/file 错误输入
echo 122 &> /path/to/a/file 全部输入

#!/bin/bashcat > /data/m.sh << EOFecho "hello bash"EOF 

变量赋值

  • a=123
  • let a=10+2
  • l=ls
  • letc=$(ls -l /etc) 或 letc=ls -l /etc
  • 变量值有空格等特殊字符可以包括在"" 或 ``中
  • echo ${变量名} 查看变量的值

变量的默认作用范围
默认自己的shell进程中

变量的导出,让子进程获得父进程的变量值

  • export 变量名
    变量的删除
  • unset 变量名

环境变量:每个Shell打开都可以获得的变量

  • set和env命令

  • $? 上一条命令是否正确执行(正确:0, 错误:1)

  • $PATH

  • $PS1

位置变量

  • $1 $2 ... $n
#!/bin/bash# $1 $2 ...$9 ${10}echo $1# 默认打印第二个参数值,如果为空则显示_echo ${2-_} 

环境变量配置文件所在目录

  • /etc/profile
  • /etc/profile.d/
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

说明:/etc/下的配置文件,表示所有用户通用的配置,用户家目录的配置文件只能特定用户使用,
su - 用户名  login shell 所有都可以执行
su 用户名 nologin shell  /bashrc, /etc/bashrc

所用终端都应用新的环境变量: export PATH=$PATH:/new/to/path
让环境变量立即生效:source /etc/profile

定义数组

# 数组定义IPTS=(10.0 1.0 3.0)# 显示数组中所有元素echo ${IPTS[@]}#显示数组元素个数echo ${#IPTS[@]}显示数组的第一个元素echo ${IPTS[0]} 

Q:

  • 内建命令不需要创建子进程
  • 内建命令对当前shell有效

stat && touch命令

https://www.cnblogs.com/z-joshua/p/10042681.html

命令积累

与时间服务器上的时间同步

  1. 安装ntpdate工具
yum -y install ntp ntpdate 
  1. 设置时间为阿里服务器的时间
ntpdate ntp1.aliyun.com 
  1. 将系统时间写入硬件时间
hwclock –systohc 

一屏可以显示的文件,可以用cat 一屏显示不出来的内容,用more命令,space翻页,无法回看 使用less 命令就可以往后推(space),按b键往前翻(less是将文件一次性load内存,所以文件大的时候只能用more)

head -n 文件名 前n行的数据 tail -n 文件名 后n行数据 tail -f 文件名 监控文件内容改变

管道命令 cat xxx | head -3 cat xxx作为输出流的形式作为后面命令的输入流

ls -l 无法接受前面的输出流的内容,如果要解决,需要这样用: echo "/" | xargs ls -l

head -5 xxx | tail -1 获取第五行的数据

screen -S yourname ## 新建一个叫yourname的session screen -ls         ## 列出当前所有的session screen -r yourname ## 回到yourname这个session screen -d yourname ## 远程detach某个session screen -d -r yourname ## 结束当前session并回到yourname这个session 

硬连接
ln /data/x.txt /data/b.txt
stat x.txt
stat b.txt
Innode号一致
修改任何一个,另外一个都可以同步修改
删掉任何一个,不会影响另外那个

软连接
ln -s /data/x.txt /data/b.txt
Innode号不一致
删掉x.txt个,b.txt的链接会丢失

拒绝用户登录

Linux用户管理之使用/bin/false和/usr/sbin/nologin拒绝用户登录及其功能分析(转)

参考资料

Linux命令行大全

Linux就该这么学

Linux预习资料 提取码:7w30

CentOS6.x升级到CentOS7.x的注意事项视频 提取码: yhfd

Linux内核设计与实现

极客时间-Linux实战技能100讲