inux命令行读书笔记
建议来的朋友直接去博客看吧,我把排版之后的发在博客里了:https://blog.csdn.net/Foools/article/details/116721534
LINUX命令行大全
学习shell
基本的
date 显示日期
cal 显示日历
df 查看磁盘驱动器当前的可用空间
free 显示可用内存
exit 结束终端会话
pwd 打印当前工作目录
ls 列出目录的内容,ls /usr可以显示/usr的目录内容,ls -l会显示更加详细的内容·
cd /usr/bin cd表示更改工作目录
. 符号.表示工作目录,..表示父目录,以.开头的文件名是隐藏的,除非输入ls-a才能显示
cd .. 将工作目录改为当前目录的父目录
- -命令表示选项,有很多种选项:
-a 列出所有文件
-d 作为d和l的组合,即可查看当前目录的详细信息
-F 在名字之后加上一个类型指示符
-l 长格式显示
-r 以相反的顺序显示(字母逆序)
-S 按文件大小对结果进行排序
-t 按修改时间排序
file 打印文件内容的简短说明
less filename 查看文本文件
G 跳转到文本结尾
g 跳转到文本开头
/character 查找character字符串
n 查找下一个出现的字符
q 退出less
操作文件与目录
通配符
* 匹配任意多个字符
? 匹配任意一个单字符
[character] 匹配任意一个属于character中的字符
[!character] 匹配任意一个不属于character中的字符
[[:class:]] 匹配任意一个属于指定字符类的字符(alnum, alpha, digit, lower, upper)\
mkdir 创建目录
cp 复制文件和目录 例: cp file1 file2 dir1 -i提示用户确认 -u表示仅仅复制目标文件中不存在的文件
mv 移除和重命名文件,mv item1 item2 将item1移到item2
rm 删除文件和目录
-i 删除前提示用户确认
-r 删除一个目录的时候使用,递归的删除
-f 忽略不存在的文件且无需提醒
ln file link 创建硬连接 不能引用自身文件系统之外的文件,无法引用目录
ln -s item link 创建符号连接 连接指向的文件不会随着连接删除而删除
命令
命令包含四种:可执行程序,shell内置命令,shell函数,alias命令(可以在其基础上定义的自己的命令)
type 显示命令的类型
which 显示可执行程序的位置
help 获取帮助文档,显示命令的使用信息;两种使用方法help ls和ls --help
man 显示程序的手册页
whatis 显示命令的简要描述
info 显示程序的info目录,在这样的页面中一般按q退出
创建一个alias命令:
首先查看命令名称是否存在 type foo
alias foo=‘cd /usr; ls; cd -’ foo命令就创建好了
unalias foo 命令就删除了
重定向
> 重定向操作符>可以用于后接文件名,把标准输出重定向到另一个文件中去;举例来说ls -l /usr/bin > ls-output.txt,在我的电脑中就会出现ls-output.txt文件。如果重定向符之前的操作是一个错误信息,产生的文件就是一个空文件;
>> 使输出内容添加到文件的最后面
2> 标准错误等同于文件描述符2,使用2>实现将标准重定向到后面的文件中,举例来说:ls -l /bin/usr 2> ls-error.txt
&> 将标准输出和标准错误都重定向到同一个文件,举例来说:ls -l /bin/usr &> ls-output.txt
/dev/null 这个文件位置可以接受输入但是不对输入进行任何处理,举例来说:ls -l /bin/usr 2> /dev/null
cat cat有很多种用途,首先cat可以显示短的文本文件,并且cat可以将多个文件作为参数,将他们合并起来。
显示操作:cat ls-output.txt 合并操作:cat movie.mpeg.0* > movie.mpeg
除此之外,cat还可以创建短文本文件:cat > lazy_dog.txt i am a lazy dog!,这样的结果就是创建好了一个内容为i am a lazy dog!的lazy_dog.txt文件
| 管道操作符,把一个命令的标准输出传送到另一个命令的标准输入中,举例来说:ls -l /usr/bin | less ,这可以方便的检查任意一条生成标准输出的命令的运行结果;ls /bin /usr/bin | sort | less,把两个目录下的所有可执行程序合并成一个列表,并按照顺序排序,最后再查看
uniq 可以忽略文件中重复的行,后面加上-d表示查看重复的行,举例来说:ls /bin /usr/bin | sort | uniq-d | less
wc 打印行数,字数,字节数wc ls-output.txt,用wc -l可以只打印行数,同理,可以把wc加在管道里:ls /bin /usr/bin | sort | uniq | wc -l
grep 用管道的方式打印含有zip的匹配的行:ls /bin /usr/bin | sort | uniq | grep zip,-i表示搜索时忽略大小写,- v表示输出和模式不匹配的行
head/tail 打印文件的开头,结尾部分,-n表示显示多少行。可以使用管道的方式:ls /bin | head -n 5 和直接输出的方式:tail -n 5 ls-output.txt
tee 获取,输出:ls /usr/bin |tee ls.txt|grep zip将内容输出到ls.txt中,然后再用grep进行过滤
echo
echo命令本身只是将文本参数内容打印到屏幕
echo hello world
echo * 这会打印*的扩展结果
扩展包括很多:
*就是一种任意字符的拓展,~会拓展为用户的主目录名,$(())表示算术拓展,
{}表示花括号拓展,举例:echo {2009..2011}--{1..9}-,$USER称之为参数拓展,
引用的方式也很多
""双引号中引用的特殊字符都将被看作是普通字符,$,\,'除外,参数拓展,算术拓展,命令替换在双引号中仍然成立。
''单引号中所有拓展都被抑制
\转义字符可以实现引用单个字符,\\实现引用反斜杠
高级键盘技巧
Ctrl+A:移动光标到行首
Ctrl+E:移动光标到行尾
Ctrl+K:复制光标到行尾的内容
Ctrl+U:复制光标到行首的内容
Ctrl+Y:粘贴到光标位置
tab 在输入字符之后按tab可以实现自动补齐,
history 可以实现搜索历史命令,例如我想寻找输入的包含ls的历史命令行:history | grep ls 会得到结果173 ls Desktop 输入!173可以输出173行的命令;按Ctrl+R可以实现逆向递增式搜索,按Ctrl+J实现将内容复制到当前行。
!! 重复最后一个执行的命令
权限
创建用户时,用户将被分配一个称为用户id (uid)的号码,用户还被分配为一个有效组id(gid),超级用户一般uid为0
关于读取,写入和执行:一般会用10个字符来表示文件属性,第一个字符表示文件属性,后面每三个字符分别表示文件所有者,文件所属群组,其他所有用户对该文件的读写执行操作权限。
第一个字符:- 表示普通文件,d 表示目录文件,l 表示符号连接,c 表示字符设备文件,b 表示块设备文件
后面的字符:r表示可以打开和读取文件,w表示可以写入或者截短文件,x表示允许把文件当作程序一样来执行
举例:drwxr-xr-x,d表示这是一个目录文件,所有者拥有读,写,执行的权限,组成员拥有读和执行的权限,其他用户也拥有读和执行的权限。
chmod 可以实现更改文件模式,有两种方法,第一种是用八进制数字表示,第二种是符号表示法,八进制对应的如下:
举例来说:
chmod 600 foo.txt 可以实现对foo.txt的权限更改
符号表示法中,u,g,o分别表示用户,群组和其他用户
chmod u+x foo.txt
chmod o-rw foo.txt
chmod u+x,go=rx foo.txt # 为文件所有者添加可执行权限,同时设置群组和其他用户具有读权限和可执行权限
umask 一般可以用来设置默认权限,默认掩码值一般为0022
除了常用的rwx权限之外,还存在setuid,setgid,sticky位;setuid可以将一个实际用户id设置为程序所有者id,setgid可以把有效组id从该用户的实际组id更改为该文件所有者的组id,sticky可以阻止用户删除或者重命名文件(除非用户为程序所有者或root)
su -l -l表示指定用户,后面输入user即可以其他用户和组id的身份来运行shell,不输入名称默认为root
su -c 'command' 这种格式下单个命令行command会被传递到一个新的shell环境下执行
sudo sudo可以实现让一个用户拥有不同的用户身份执行命令,但是被限制为智能执行一条或者几条特定的命令;除此之外,sudo不用输入密码。
chown 更改文件所有者和所属群组;把文件的所有者更改为tony sudo chown tony: ~tony/myfile.txt chown的参数可以设置为
Bob 将文件所有者改为bob
Bob:users 所有者改为bob,所属群组改为users
:adnin 将所属群组改为adnin
bob: 将所有者改为bob,把文件所属群组改为bob登录时的群组
chgrp 可以更改文件所在的组,功能和chown类似
passwd 可以更改当前用户的密码
进程
ps 查看进程信息
ps x 显示所有进程,STAT列表示进程的状态
ps aux 输出更详细的信息,包括虚拟耗用内存大小,CPU使用百分比等等
top 动态查看进程信息,按q退出
Ctrl+c 中断一个程序
Ctrl+z 暂停一个程序
xlogo & 在后台运行xlogo程序
jobs 查看从该终端启动的所有任务
fg %1 fg命令后面加上%符号和作业编号,可以使进程回到前台运行;当程序被ctrl+z暂停的时候,也可以通过这个命令来恢复运行,作业编号可以从jobs命令中查看
kill [signal] PID 该命令为通过kill来发送信号,其中PID信息可以通过ps命令来查看而signal包含很多
[signal]: HUP 挂起信号,进程接收到之后将重启并重新读取它的配置文件
INT 中断信号,等同于“Ctrl+c”
STOP 暂停信号
CONT 继续运行信号
配置与环境
环境
在bash中,存在两种数据类型:环境变量,shell变量。
shell变量是由bash存在的少量数据,而环境变量就是其他变量。
除去变量,shell还存储了一些编程数据(别名和shell函数)
printenv|less printenv命令可以打印所有的环境变量,通过less管道打印可以实现;举例来说,我想查看名为USER的环境变量,输入printenv USER就可以查看了
set|less 使用set命令可以打印shell变量,环境变量,任何已定义的shell函数;使用echo $HOME可以实现打印查看某单个变量的值
用户登录系统后,bash会读取启动文件的配置脚本,这些脚本定义了所有用户共享的默认环境
shell会话包含两种:login shell 和non-login shell;启动文件来自于:login shell中的启动文件,non-login shell中的启动文件。
修改环境:
我们想要修改环境,加入一条命令l.实现显示所有以.开头的文件
cp .bashrc .bashrc.bak 备份文件,防止出现错误
nano .bashrc 启动文本编译器
alias l.='ls -d .* --color=auto' 在文件中写入这句话
ctrl+o 保存 ctrl+x 退出编辑
source .bashrc 激活修改,强制重新读取.bashrc文件,一般来说,重启shell才可以修改生效
vi
为了不被其他linux和unix用户鄙视,我们开始学习vi
进入vi之后,:q 表示退出vi,:q! 表示强制退出vi,:w 表示保存
vi doc_name 进入vi编辑模式,进入编辑模式之后,使用A命令可以快速到达行尾
dd 可与复制当前行,dG 复制当前行到结尾,yy 可以剪切当前行,yG 裁剪当前行到结尾 p 可以粘贴我们复制的内容,u 可以取消我们的操作
/o 可以实现整个文件中o的位置,按n显示下一个n的位置
vi file1 file2 file3 可以实现编辑多个文件
:n切换到下一个文件
:N切换到上一个文件
buffers 查看正在编辑的文件列表
buffer 1 切换到1文件中
保存工作时的:w操作并不是保存当前文件,而是另存为,下次打开当前文件,仍然是之前的版本
定制提示符
提示符的设计:
PS1="\A \h \$" 可以实现重新设置输入的提示符,A表示当前的时间,h表示当前机器的主机名,不包括域名,还有很多转义字符可以设置,这里不展开细说
文本的颜色,光标,保存提示符都可以进行设置,详细可以参考官方文档
常见任务和主要工具
软件包管理
多数linux发行版都使用了两种软件包技术阵容debian和red hat;ubuntu属于debian,centOS属于red hat
因为学习过程中我使用的是centOS7,所以下面仅记录red hat系统的操作方式,ubuntu的操作方式可以参考网上的其他教程
yum search package_name 在库中查找软件包
yum install package_name 安装库中的软件包
yum erase package_name 删除软件包
yum update 更新库中的软件包
rpm -qa 列出所有已经安装的软件
rpm -q package_name 判断软件包是否安装
yum info package_name 显示已经安装的软件包的信息
rpm -qf file_name 查看某个文件是由哪个软件包安装得到的
存储介质
(这章的内容貌似有些过时和小众,我仅仅作为了解略读了一遍,毕竟这个年代,谁还会想着自己刻录一张光盘呢?😔)
挂载:管理存储设备首先要做的就是将该设备添加到文件系统树中,从而允许操作系统可以操作该设备,这个过程称之为挂载;卸载设备可以保证缓存中的所有剩余数据全部写入设备,从而设备可以安全移除
mount 查看已挂载的文件系统列表
umount /file_path 可以卸载设备,这个命令必须在挂载目录以外的地方执行才可以,否则会出现设备繁忙的错误警告
创建新的文件系统:1)创建一个新的分区布局 2)在驱动器上创建一个新的空文件系统
sudo fdisk /dev/sdb 用fdisk命令进行磁盘分区
sudo mkfs -t ext3 /dev/sdb1 创建新的文件系统
sudo fsck /dev/sdb1 检查,测试修复文件系统,类unix系统中,fsck修复的文件会存放在系统根目录下的lost+found文件中
格式化软盘:
sudo fdformat /dev/fd0 首先执行格式化操作
sudo mkfs -t msdos /dev/fd0 用mkfs命令为软盘创建一个FAT文件系统