Linux 学习笔记
Linux 学习笔记
作者:Grey
原文地址:
博客园:Linux 学习笔记
CSDN:Linux 学习笔记
说明
本文如果没有特别说明,环境是 CentOS 7, 主要是日常学到的一些笔记,所以内容相对零散。
常用命令
将一个目录中的所有HTML文件复制到目标目录,同时确保仅复制那些目标目录中不存在或是比目标目录中同名文件版本更新的文件。
cp -u *.html destination
mv
命令类似
假设我们下载了一个被分割成好几部分的文件,希望能将其组合还原。如果这些文件的命名方式如下:
move.mpeg.001 move.mpeg.002 ... move.mpeg.099
我们可以用下列命令将其恢复原状:
cat move.mpeg.0* > movie.mpeg
单引号,无引号,双引号的效果
root@debian:/data/workspace/shell # echo text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /data/workspace/shell/out.txt a b foo 4 root
root@debian:/data/workspace/shell # echo "text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text /data/workspace/shell/*.txt {a,b} foo 4 root
root@debian:/data/workspace/shell # echo 'text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER
可以看出,从上到下,越来越多的扩展被禁止
可以使用history命令随时查看命令的历史纪录, 假设输出结果中有这样一行
189 cd /usr/bin
189是历史记录中该命令的编号,通过
!189
可以立即重用这个命令。
root@debian:/ # history | grep /usr/bin189 cd /usr/bin197 cd /usr/bin/301 history | grep /usr/bin
root@debian:/ # !189
cd /usr/bin
root@debian:/usr/bin #
/目录下文件夹主要作用
[root@linux /]# ll /
total 16
lrwxrwxrwx. 1 root root 7 Aug 17 02:40 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Sep 13 22:03 boot
drwxr-xr-x. 20 root root 3200 Sep 13 21:58 dev
drwxr-xr-x. 74 root root 8192 Sep 13 22:03 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Aug 17 02:40 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Aug 17 02:40 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x. 109 root root 0 Sep 13 21:58 proc
dr-xr-x---. 2 root root 151 Sep 13 21:59 root
drwxr-xr-x. 25 root root 740 Sep 13 22:03 run
lrwxrwxrwx. 1 root root 8 Aug 17 02:40 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Sep 13 21:58 sys
drwxrwxrwt. 8 root root 172 Sep 13 22:58 tmp
drwxr-xr-x. 13 root root 155 Aug 17 02:40 usr
drwxr-xr-x. 19 root root 267 Aug 17 02:45 var
其中:
/boot
系统启动相关的文件,如内核,initrd,以及grub(bootloader)
/dev
设备文件
/etc
配置文件
/home
用户的家目录,每一个用户的家目录通常默认为:/home/USERNAME
/root
管理员的家目录
/lib
库文件
/media
挂载点目录,移动设备
/mnt
挂载点目录,额外的临时文件系统
/opt
可选目录,第三方程序的安装目录
/proc
伪文件系统,内核映射文件
/sys
伪文件系统,跟硬件设备相关的属性映射文件
/tmp
临时文件,/var/tmp
/var
可变化的文件,比如:日志文件,数据文件
/bin
可执行文件,用户命令
/sbin
管理命令
文件系统相关命令
df
显示磁盘的使用情况
du
显示文件系统的使用情况
ls
显示目录
Linux中的文件类型
-
普通文件
d
目录文件
b
块设备文件(block)
c
字符设备文件
l
符号链接文件(symbolic link file)
p
命令管道文件(pipe)
s
套接字文件(socket)
文件权限信息说明
权限属性 | 文件 | 目录 |
---|---|---|
r | 允许打开并读取文件 | 允许列出目录内容(如果也设置了执行属性) |
w | 允许写入或截断文件;但是,不允许重命名或者删除文件。文件的删除或者重命名是由目录属性决定的 | 允许在目录内创建,删除,重命名文件(如果也设置了执行属性) |
x | 允许将该文件作为程序执行。以脚本语言编写的程序文件必须设置为可读才能被执行 | 允许进入该目录,例如 cd directory |
Linux的umask
命令指定在建立文件时预设的权限掩码。权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
使用指令umask
查看当前权限掩码,则输入下面的命令
执行上面的指令后,输出信息如下:0022
接下来,使用指令mkdir
创建一个目录,并使用指令ls
获取该目录的详细信息,输入命令如下:
mkdir test1
ls –d –l test1/
执行上面的命令后,将显示新创建目录的详细信息,如下所示:
drwxr-xr-x 2 rootlocal rootlocal 4096 2011-9-19 21:46 test1/
注意:在上面的输出信息中,
"drwxr-xr-x"="777-022=755"
Linux下还有一些特殊的权限,参考:Linux特殊权限详解
如何建立环境
登录Shell会话读取的启动文件
文件 | 内容 |
---|---|
/etc/profile | 应用于所有用户的全局配置脚本 |
~/.bash_profile | 用户的个人启动文件。可用于扩展或者覆盖全局配置脚本中的设置 |
~/.bash_login | 如果没有找到~/.bash_profile,Bash会尝试读取该脚本 |
~/.profile | 如果/.bash_profile和/.bash_login都没有找到,Bash会尝试读取该脚本,这是基于Debian发行版(如Ubuntu)的默认文件 |
非登录Shell会话读取的启动文件
文件 | 内容 |
---|---|
/etc/bash.bashrc | 应用于所有用户的全局配置脚本 |
~/.bashrc | 用户的个人启动文件,可用于扩展或者覆盖全局配置中的设置 |
随机生成数据
shuf train.txt -o test.txt -n 30
从train.txt
文件中随机读取30行文本输出到test.txt
挂载/卸载
/boot目录的加载和卸载
在/下:
umount /dev/sda1
mount /dev/sda1 /boot
更多可查看Linux 下模拟制作块设备并挂载
文件描述符操作实验
第一步,创建一个文件,并写入一些内容。
vi abc.txt
写入一些内容
dfasdfasdfasdfa1
asdfasdfasd2
sadfasdfasd3
将abc.txt
读入4号文件描述符
exec 4< abc.txt
查看当前进程所有文件描述符
ll /proc/$$/fd
[root@linux data]# ll /proc/$$/fd
total 0
lrwx------. 1 root root 64 Sep 14 02:44 0 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 02:44 1 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 02:44 2 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 02:46 255 -> /dev/pts/0
lr-x------. 1 root root 64 Sep 14 02:46 4 -> /data/abc.txt
查看当前进程打开的文件
lsof -p $$
[root@linux data]# lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
....
bash 1252 root 4r REG 253,0 84 34172896 /data/abc.txt
....
将abc.txt
第一行读出来
[root@linux data]# read a 0<& 4
[root@linux data]# echo $a
sdfasdfasdfasdfasdfasdfasdfasd
文件偏移量实验
每个进程的偏移量互不影响,每个fd
会单独维护一个seek
(指针)
查看文件偏移量
lsof -op $$
可以看到,一开始偏移量(OFFSET
字段):0t31
[root@linux data]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1252 root 4r REG 253,0 0t31 34172896 /data/abc.txt
....
重新打开一个,并再次查看文件偏移量,0t0。
exec 4< /data/abc.txt
[root@linux data]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1252 root 4r REG 253,0 0t0 34172896 /data/abc.txt
....
模拟socket实验
模拟和baidu
建立tcp
连接
cd /proc/$$/fd && exec 8<> /dev/tcp/www.baidu.com/80
[root@linux fd]# ll
total 0
lrwx------. 1 root root 64 Sep 14 05:54 0 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 05:54 1 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 05:54 2 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 05:55 255 -> /dev/pts/0
lrwx------. 1 root root 64 Sep 14 05:58 8 -> socket:[21649]
可以看到建立了一个socket连接
使用lsof
查看对应的文件描述符信息
[root@linux fd]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1275 root 8u IPv4 21834 0t0 TCP 192.168.118.136:40794->183.232.231.172:http (ESTABLISHED)
....
标准输入/输出/错误输出,以及重定向
设备 | 设备名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
输入重定向符号: <
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
示例1:其中/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
由于1
表示标准输出,所以ls01.out
中只记录了非错误的信息,即ls ./
的内容
如果要保存错误信息,可以通过如下方式:
[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
如果要丢弃用不着的输出结果,可以使用如下命令
ls -l /bin/usr 2> /dev/null
父子进程
当前进程的id
号
echo $$
父进程PID
是1275
再启动一个bash
/bin/bash
再次查看当前进程号
echo $$
子进程PID
为1820
在子进程中查看父子进程关系, 先安装pstree
yum install psmisc -y
用pstree
指令可以查看进程的父子关系
也可以通过
ps -ef |grep 1275
查看父子进程的关系
父进程中定义的变量和子进程中定义的变量是互相隔离的,如果需要子进程访问父进程的变量,父进程要执行export
命令。
管道
示例1:查询abc.txt
中的第五行数据
head -5 abc.txt | tail -1
示例2:管道会开辟两个子进程,并且左边输出衔接到右边输入,所以a=9
是在子进程中执行的,父进程中a还是等于1
$$
的优先级比管道高
$BASHPID
优先级比管道低
[root@linux /]# { echo $BASHPID; read x; } | { cat; echo $BASHPID; read y;}
1953
1953是子进程ID
[root@linux /]# { echo $$; read x; } | { cat; echo $$; read y;}
1275
1275是父进程ID
Linux 中的内部命令和外部命令
什么是Shell
?
bash shell,就是一个程序,就是
Linux
系统安装的一个软件,用户通过用户名密码登录操作系统后,直接进入bash shell
软件
如果平时退出不了某个程序,可以复制一个ssh
对话,用ps -ef
找到那个进程,用kill -9
退出即可
Shell 命令分为外部命令和内置命令:
比较 | 内置命令 | 外部命名 |
---|---|---|
定义 | Bash Shell 自带的命令 | Linux 系统中的应用程序 |
执行效率 | 高 | 低 |
执行过程 | 调用当前 Shell 进程的一个函数 | 触发磁盘 I/O,fork 出一个单独的进程,执行完成后退出 |
内部命令( Shell 自带的命令)
查看cd
命令
type cd
显示:cd is a shell builtin
说明cd
命令是shell
自带的命令
通过
help -d
可以查看所有内置命令
外部命令(不是Shell自带的命令,由用户安装的)
比如ifconfig
命令
type ifconfig
显示:ifconfig is /usr/sbin/ifconfig
使用file
命令查看命令是一个什么类型的文件
file /usr/sbin/ifconfig
显示:
/usr/sbin/ifconfig: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=22d5b3be8d3ce3c71cad5b982581ede262397b56, stripped
使用whereis
查看某个命令在哪个位置
whereis ifconfig
显示
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
此外:
内部命令的帮助用help
指令,外部命令的帮助用man
指令
bash shell
在执行命令的时候,做了两步优化:
第一个优化,通过PATH
来(echo $PATH
) 。
第二个优化,通过hash
来,hash
查看,hash -r
(清空hash)
编写脚本时候, 如需要执行,要赋予该文件执行权限chmod u+rx filename
如果bash
执行,不需要赋予执行权限
bash ./filename.sh
./filename.sh
以上两种执行方式都是新开一个进程
source ./filename.sh
.filename.sh
这种方式执行不会产生新的子进程
变量赋值
a=123
let a=10+2
l=ls
let c=$(ls -l /etc)
let c=`ls -l /etc`
变量值有空格等特殊字符可以包括在"" 或 ``中
可以通过echo ${变量名}
查看变量的值
变量的导出使用export
命令,让子进程获得父进程的变量值
变量的删除使用unset
命令
stat和touch 组合使用,可以增量监控数据改变的时间
详见:linux命令系列 stat & touch
Linux的进程优先级
Linux采用了两种不同的优先级范围,一种是用nice值,它的范围从-20 ~ +19, 默认为0;越大的nice值意味着更低的优先级,在Mac OS X中,进程的nice值代表分配给进程的时间片的绝对值;而Linux系统中,nice则代表时间片的比例。ps el
命令中的NI列就是该进程的nice值。
另一种范围是实时优先级,其值是可以配置的,默认情况下它的变化范围是从0到99,与nice值相反,越高的实时优先级数值意味着优先级越高。任何实时进程的优先级都高于普通进程。可以通过ps -eo state,uid,ppid,rtprio,time,comm
查看,RTPRIO
列即为实时优先级,如果显示-
,则说明它不是实时进程。
时间同步
第一步,安装ntpdate工具
yum -y install ntp ntpdate
第二步,设置时间为阿里服务器的时间
ntpdate ntp1.aliyun.com
第三步,将系统时间写入硬件时间
hwclock –systohc
使用screen
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
安装方法
CentOS下
yum install screen -y
Debian下
apt-get install screen -y
新建一个叫yourname的session
screen -S yourname
列出当前所有的session
screen -ls
回到yourname这个session
screen -r yourname
远程detach某个session
screen -d yourname
结束当前session并回到yourname这个session
screen -d -r yourname
软硬链接
硬链接
ln /data/x.txt /data/b.txt
通过stat查看两个文件的信息:
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拒绝用户登录及其功能分析(转)
获取系统的IOPS
创建一个新文件
touch mytest
安装fio工具
yum install -y fio
执行如下命令
fio -filename=mytest -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest
Debian的SSH终端配色设置
Debian10在默认安装后,使用SSH连接后,命令和显示都呈黑白,不是很方便查看,可以通过如下方法来配置Linux的SSH连接的配色信息: Linux终端Terminal颜色改变设置
参考资料
linux下的exec命令
Linux命令行大全(第2版)
Linux就该这么学
Linux预习资料 提取码:7w30
CentOS6.x升级到CentOS7.x的注意事项视频 提取码: yhfd
Linux内核设计与实现
极客时间-Linux实战技能100讲
Linux文件权限详解
Linux losetup 命令
linux 输入、输出重定向的概念和用法详解(Day01)
Shell内置命令
Linux 学习笔记相关推荐
- linux rcs文件中的ip,linux学习笔记之diff和patch命令
关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...
- (零)我为什么要写Linux学习笔记?
我对Linux有强烈的好奇心,兴趣:写学习笔记会让我有成就感:我记忆力实在不好.好吧,其实真正原因是:如果我能把自己学到的知识简明扼要的讲出来,写出来,那便证明我真的学懂了我想学的知识.没时间怎么办? ...
- linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库
Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...
- Linux 学习笔记之超详细基础linux命令 Part 3
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...
- Linux学习笔记(二)|常用命令
Linux学习笔记(二)常用命令 1.文件处理命令 1.1命令格式与目录处理 -ls 功能描述:显示目录文件 原意:list 所在路径:/bin/ls 语法: ls-a 显示所有文件,包括隐藏文件 l ...
- Linux学习笔记(一)|目录结构
Linux学习笔记(一) #一.Linux的目录结构 Linux采用层级式的树状目录结构,根目录为"/",在此目录下创建其他目录. /lib 系统开机所需要最基本的动态链接共享库 ...
- 20155303狄惟佳预备作业三Linux学习笔记
20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...
- Linux学习笔记-文件权限与路径
Linux学习笔记-文件与目录 目前从电子信息科学与技术转到了计算机专业,因此想趁着大四比较闲的时候补一些计算机的知识.我想说:你好,生活[斜眼笑]!愿生活温柔以待!哈哈,这是我写的第一篇博客,谨以此 ...
- LINUX学习笔记共五部分
LINUX学习笔记1--LINUX系统命令 1. 界面切换: a) 进入字符界面:按住ctrl+alt+F1: 1. 首先需要进入用户登入,输入用户名和 ...
- linux 串口信息记到日志,[linux学习笔记]之一:ubuntu ch340调试备忘
[linux学习笔记]之一:ubuntu ch340调试备忘 已有 2183 次阅读2016-11-8 21:52 |个人分类:linux 最近迷上了Linux,入了一块板.电脑使用win7+ubun ...
最新文章
- Oracle设置date数据比较,ORACLE DATE和TIMESTAMP数据类型的比较
- 俞军:产品经理必备的2个模型
- 大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键
- 论文浅尝 | 基于多模态关联数据嵌入的知识库补全
- 数十篇推荐系统论文被批无法复现:源码、数据集均缺失!
- eclipse安装OpenExplorer插件--快速打开文件目录
- 操作系统真象还原_一步步编写操作系统 43 二进制程序的加载方式3
- java panel paint_java – 如何使用jpanel与paint(或重绘)
- 各省能源平衡表(2000-2018年)
- C#界面控件DotNetBar使用
- (可再看)深度学习学习笔记(1)
- 王刚日记:好软文是什么样子的?
- 坦克世界+服务器未响应,手把手解答win10系统玩坦克世界出现未响应的办法
- win10可用空间新建卷提示磁盘上没有足够的空间完成此操作如何解决
- 手撕LongAdder-add()源码
- ROS专题----tf和tf2坐标变换
- linux服务器中毒挖矿,Linux服务器中挖矿病毒 二
- 华盛顿大学计算机本科录取,华盛顿大学美国排名及录取难度
- 图论(一)--基础概念
- 【JAVA】JAVA使用ffmpeg进行视频格式转换以及截图
热门文章
- 防治计算机病毒教案,小学信息技术教案:《防治计算机病毒-计算机病毒》
- 旅游网毕业设计java代码教程_基于JavaWeb技术的旅游网站的设计与实现--毕业论文.doc...
- 推荐一款专业串烧歌曲的音乐合并软件
- 零基础考公务员,备考多长时间最合适?
- 【收藏】韦东山嵌入式Linux课程梳理|随时更新
- Mac安装Consolas字体最简单的方法
- 无线组网-AC联动radius服务器实现portal认证
- Ubuntu下安装wiznote
- 【威联通Nas】安装docker版本的wiznote/wizserver
- Newtonsoft.Json基础问题