实验楼 linux 学习
一、Linux 用户管理
1.查看用户
who am i //
who mom likes
whoami
====--------======
输入的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty 设备而言的,还记得上一节讲终端时的那七个使用 [Ctrl]+[Alt]+[F1]~[F7] 进行切换的 /dev/tty 设备么,这是“真终端”,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i ,看第二列是不是就变成 pts/1 了,第三列则表示当前伪终端的启动时间
===---------=====
2.创建用户
sudo adduser lilei //穿件用户
====---------====
按照提示输入 shiyanlou 密码(Linux 下密码输入通常都是不可见的),然后是给 lilei 用户设置密码,后面的选项的一些内容你可以选择直接回车使用默认值:
====--------====
su -l lilei 切换到用户状态
3.用户组
在 Linux 里面如何知道自己属于哪些用户组呢?
方法一:使用groups命令
groups shiyanlou
方法二:查看/etc/group文件
cat /etc/group | sort
将其它用户加入 sudo 用户组
#su -l lilei
#sudo ls
su shiyanlou
groups lilei
sudo usermod -G sudo lilei
groups lilei
删除用户
sudo deluser lilei --remove-home
二、Linux 文件权限
1.查看文件权限
ls -A 查看隐藏文件
ls -Al
ls -dl <目录名> //查看某一个目录的完整属性,而不是显示目录里面的文件属性:
ls -AsSh 显示所有文件大小,并以普通人类能看懂的方式呈现 、其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,请使用“man”命令查询。
2.变更文件所有者
sudo chown shiyanlou iphone6
3.修改文件权限
chmod 700 iphone6
Linux 目录结构及文件基本操作
一、Linux 目录结构
1.FHS 标准 //文件系统层次结构标准
FHS 定义了两层规范,
第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
2.目录路径
绝对路径 //关于绝对路径,简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为 终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径 // 相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点
二、Linux 文件的基本操作
1.新建
cd ~
touch test
新建目录
//文件夾
mkdir -p father/son/grandson
2.复制
复制文件
cp [文件] [目標地址]
复制目录
cp -r [文件夾] [目標文件夾/沒有將創建]
3.删除
删除目录、文件夾
rm -f [文件、文件夾]
rm -rf [文件/文件夹]
4.移动文件与文件重命名
移动文件
mv [文件] [目標地址]
重命名文件
mv [旧文件] [新文件]
批量重命名
5.查看文件
使用cat,tac和nl命令查看文件
这两个命令都是用来打印文件内容到标准输出(终端),其中cat为正序显示,tac倒序显示。
nl命令,添加行号并打印,这是个比cat -n更专业的行号打印命令。
nl -b a [file]
-b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)
使用more和less命令分页查看文件
more [file]
less [file]
使用head和tail命令查看文件
tail [file]
tail -n 1 [file]
这两个命令那些性子比较急的人应该会比较喜欢,因为它们一个是只查看的头几行(默认为10行,不足10行则显示全部)和尾几行
* 关于tail命令,不得不提的还有它一个很牛的参数-f,这个参数可以实现不停地读取某个文件的内容并显示。这可让我们动态查看日志起到实时监视的作用,不过我不会在这门基础课程中介绍它的更多细节,感兴趣的用户可以自己去了解。
6.查看文件类型
file [file]
召喚神龍
xeyes
nohup xeyes & //後臺執行
环境变量与文件查找
一、环境变量
文件比较
vimdiff [文件1] [文件2] [文件3]
3.命令的查找路径与顺序
echo $PATH
查看PATH环境变量的内容:
gcc -o hello_world hello_world.c
二、搜索文件
与搜索相关的命令常用的有如下几个whereis,which,find,locate。
whereis简单快速
whereis [file]
locate快而全
locate /home/shiyanlou/\*.c
which小而精
which [file]
find精而细
列出 home 目录中,当天(24 小时之内)有改动的文件:
find ~ -mtime 0
列出用户家目录下比Code文件夹新的文件:
find ~ -newer /home/shiyanlou/Code
文件打包与压缩
一、文件打包和解压缩
1.zip压缩打包程序
zip -r -q -o shiyanlou.zip /home/shiyanlou
du -h shiyanlou.zip
file shiyanlou.zip
上面命令将 shiyanlou 的 home 目录打包成一个文件,并查看了打包后文件的大小和类型。
-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小(后面会具体说明该命令)。
创建加密zip包
使用-e参数可以创建加密压缩包:
zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou
2.使用unzip命令解压缩zip文件
unzip shiyanlou.zip
使用安静模式,将文件解压到指定目录:
unzip -q shiyanlou.zip -d ziptest
上述指定目录不存在,将会自动创建。如果你不想解压只想查看压缩包的内容你可以使用-l参数:
unzip -l shiyanlou.zip
3.rar打包压缩命令
**注意:rar 的命令参数没有-,如果加上会报错
rar a shiyanlou.rar .
rar a [压缩名.rar] [压缩目录]
从指定压缩包文件中删除某个文件
rar d shiyanlou.rar .zshrc
rar d [压缩包名.rar] [要删除的文件]
查看不解压文件:
rar l [压缩包名.rar]
使用unrar解压rar文件
unrar x [压缩包]
去掉路径解压:
mkdir tmp
unrar e [压缩包] [路径/tmp]
4.tar打包工具
下面先掌握tar命令一些基本的使用方式,即不进行压缩只是进行打包(创建归档文件)和解包的操作
创建一个 tar 包:
tar -cf shiyanlou.tar ~
tar -cf [压缩名.tar] [需要压缩的目录]
上面命令中,-c表示创建一个 tar 包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,比如不能写成tar -fc shiyanlou.tar,可以写成tar -f shiyanlou.tar -c ~。你还可以加上-v参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的/,你也可以使用-P保留绝对路径符。
解包一个文件(-x参数)到指定路径的已存在目录(-C参数):
mkdir tardir
tar -xf shiyanlou.tar -C tardir
只查看不解包文件-t参数:
tar -tf shiyanlou.tar
对于创建不同的压缩格式的文件,对于tar来说是相当简单的,需要的只是换一个参数,这里我们就以使用gzip工具创建*.tar.gz文件为例来说明
我们只需要在创建 tar 文件的基础上添加-z参数,使用gzip来压缩文件:
tar -czf shiyanlou.tar.gz ~
tar -czf [压缩名.tar.gz] [需要压缩的目录]
解压*.tar.gz文件:
tar -xzf shiyanlou.tar.gz
tar -xzf [压缩包名.tar.gz]
趣味
sudo apt-get install libaa-bin
aafire
文件系统操作与磁盘管理
一、简单文件系统操作
1.查看磁盘和目录的容量
使用 df 命令查看磁盘的容量
df
df -h
使用 du 命令查看目录的容量
du
du -h
-d参数指定查看目录的深度
du -h -d 0 ~ //1级
du -h -d 1 ~ //2级
二、简单的磁盘管理
1.创建虚拟磁盘
dd 命令简介(部分说明来自dd (Unix) wiki))
dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。
# 输出到文件
dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
Linux下的帮助命令
help , man , info命令的使用以及区别
内建命令与外部命令之分
一、内建命令与外部命令
type exit
二、帮助命令的使用
1. help 命令
本实验环境是 zsh,而 zsh 中内置并没有 help 命令,我们可以进入 bash 中,在 bash 中内置有该命令
bash
help ls
那如果是外部命令怎么办,不能就这么抛弃它呀。其实外部命令的话基本上都有一个参数--help,这样就可以得到相应的的帮助,看到你想要的东西了。试试下面这个命令是不是能看到你想要的东西了。
ls --help
2. man 命令
man ls
3. info 命令
Linux任务计划crontab
一、crontab 的使用
crontab 简介
crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。
通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合
crontab 准备
crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了(在本实验环境中需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动)
sudo service rsyslog start
在本实验环境中 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它(同样在本实验环境中需要手动启动,自己的本地 Ubuntu 的环境中也不需要手动启动)
sudo cron -f &
crontab 使用
下面将开始 crontab 的使用了,我们通过下面一个命令来添加一个计划任务
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)
crontab -l
虽然我们添加了任务,但是如果 cron 的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会帮我们执行,我们可以通过一下2种方式来确定我们的 cron 是否成功的在后台启动,默默的帮我们做事,若是没有就得执行上文准备中的第二步了
ps aux | grep cron
or
pgrep cron
我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈
sudo tail -f /var/log/syslog
当我们并不需要这个任务的时候我们可以使用这么一个命令去删除任务
crontab -r
二、crontab 的深入
命令执行顺序控制与管道
顺序执行、选择执行、管道、cut 命令、grep 命令、wc 命令、sort 命令等,高效率使用 Linux 的技巧。
一、命令执行顺序的控制
1.顺序执行多条命令
简单的文本处理
二、文本处理命令
1.tr 命令
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
tr [option]...SET1 [SET2]
常用的选项有:
-d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
-s 去除set1指定的在输入文本中连续并重复的字符
# 删除 "hello shiyanlou" 中所有的'o','l','h'
$ echo 'hello shiyanlou' | tr -d 'olh'
# 将"hello" 中的ll,去重为一个l
$ echo 'hello' | tr -s 'l'
# 将输入文本,全部转换为大写或小写输出
$ cat /etc/passwd | tr '[:lower:]' '[:upper:]'
# 上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的
2.col 命令
使用方式:
col [option]
常用的选项有:
-x 将Tab转换为空格
-h 将空格转换为Tab(默认选项)
cat -A /etc/protocols
使用 col -x 将 /etc/protocols 中的 Tab 转换为空格,然后再使用 cat 查看,你发现 ^I 不见了
cat /etc/protocols | col -x | cat -A
3.join命令
join [option]... file1 file2
常用的选项有:
-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1 指明第一个文件要用哪个字段来对比,,默认对比第一个字段
-2 指明第二个文件要用哪个字段来对比,,默认对比第一个字段
# 创建两个文件
$ echo '1 hello' > file1
$ echo '1 shiyanlou' > file2
$ join file1 file2
# 将/etc/passwd与/etc/shadow两个文件合并,指定以':'作为分隔符
$ sudo join -t':' /etc/passwd /etc/shadow
# 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段
$ sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group
4.paste命令
paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
paste [option] file...
常用的选项有:
选项 说明
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行
$ echo hello > file1
$ echo shiyanlou > file2
$ echo www.shiyanlou.com > file3
$ paste -d ':' file1 file2 file3
$ paste -s file1 file2 file3
Linux进程之初步了解
一、概念的理解
1.1 进程与程序概念的理解
二、进程的属性
2.1 进程的分类
2.2 进程的衍生
就比如我们启动了终端,就是启动了一个 bash 进程,我们可以在 bash 中再输入 bash 则会再启动一个 bash 的进程,此时第二个 bash 进程就是由第一个 bash 进程创建出来的,他们直接又是个什么关系?
我们一般称呼第一个 bash 进程是第二 bash 进程的父进程,第二 bash 进程是第一个 bash 进程的子进程,这层关系是如何得来的呢?
关于父进程与子进程便会提及这两个系统调用 fork() 与 exec()
fork-exec是由 Dennis M. Ritchie 创造的
fork() 是一个系统调用(system call),它的主要作用就是为当前的进程创建一个新的进程,这个新的进程就是它的子进程,这个子进程除了父进程的返回值和 PID 以外其他的都一模一样,如进程的执行代码段,内存信息,文件描述,寄存器状态等等
exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段
pstree
Linux进程之管理控制
一、 进程的查看
1.1 top 工具的使用
top
#查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
#每个cpu的核心数
cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l
Linux之日志系统
一、常见的日志
Bash
Bash之Hello World