python day 9,10,11: 学Linux

Linux 目录结构

. 当前目录

.. 当前目录的上一级目录

~:家目录,是/home下相应用户的用户名显示的目录

/ :所有根的目录

/boot : 配置文件,内核和其他启动时所需文件,没它操作系统启动不起来

/etc :放置系统相关配置文件

        /etc/passwd 存储用户账户信息

        /etc/shadow 账户密码储存在这里(里面是影子化的密码文件,在里面看到的密码是乱码,被加密了)

/home :放置普通用户的目录

/mnt :硬盘上手动挂载(把硬盘链接在系统上)的文件系统,默认是空的

/media :自动挂载的硬盘分区以及类似CD及数码相机等可移动介质

/opt :默认是空的,存放一些可选程序,例如一些程序的测试版本

/root :管理员(根用户)目录

/bin : 常用命令文件存放的目录

/sbin:系统管理命令存放目录

/tmp:临时存放目录,存放的文件定期删除

/usr:存放不适合放在/bin或/etc目录下的额外工具,比如说游戏、打印工具等。其中

        /usr/bin目录用于存放程序

        /user/share用于存放一些共享数据

        /usr/lib用于存放那些不能直接运行的,但是许多程序运行所必须的一些函数库文件

/var:存放那些经常被修改的文件,例如各种日志和数据文件

        /var/log日志文件

/lost+found:一般都是空的,碰到断电时或者非正常关机后,有些文件就临时存放在这

/dev:存放设备文件,例如硬盘,U盘

linux操作系统将所有的设备都看作文件,

它将整个计算机的资源都整合成一个大的文件目录

我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,

然后通过访问这个目录来访问存储设备

语言环境

查看是否安装了中文

locale -a

安装软件

apt

注意,下面的apt命令是用于执行软件安装相关的,sudo命令是启用管理员身份

  • 列出所有可更新的软件清单命令:sudo apt update

  • 升级软件包:sudo apt upgrade

    列出可更新的软件包及版本信息:apt list --upgradeable

    升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

  • 安装指定的软件命令:sudo apt install <package_name>

    安装多个软件包:sudo apt install <package_1> <package_2> <package_3>

  • 更新指定的软件命令:sudo apt update <package_name>

  • 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>

  • 删除软件包命令:sudo apt remove <package_name>

  • 清理不再使用的依赖和库文件: sudo apt autoremove

  • 移除软件包及配置文件: sudo apt purge <package_name>

  • 查找软件包命令: sudo apt search <keyword>

  • 列出所有已安装的包:apt list --installed

  • 列出所有已安装的包的版本信息:apt list --all-versions

dpkg

dpkg是一个安装、构建、删除和管理Debian包的工具。所有源自“Debian”的linux的发行版都可使用dpkg命令,比如Ubuntu。

dpkg有个问题,就是不能像apt一样能识别安装程序的依赖程序并一起下载

dpkg(选项)(参数)

选项:

-i:安装软件包

-r:删除软件包

-P:删除软件包的同时删除其配置文件

-L:显示于软件包关联的文件

--unpack:解开软件包

-c:显示软件包内文件列表

-configure:配置软件包

(命令后面跟两个杠是长参数,跟一个杠是短参数,即长参数的简化) 

常用命令

df

df 查看硬盘分区情况

-h 更人性化显示,大小是用k M G 显示

du 

用于查看目录的大小

du -sh ./ 查看当前目录大小,(不加s会显示目录下面所有文件的大小信息,把他们递归出来)

du -sh ./*查看当前目录每个文件或子目录的大小

man

manue的简写,后跟命令,可以检查相关命令的用法

-k 模糊匹配,你在man -k 后面输入的命令会被检索出一系列含有该命令名字的其他命令(比如搜的是passwd,显示会包含gpasswd和chpasswd等其他命令)

-p精确匹配

date

显示日期,详见Linux date 命令 | 菜鸟教程 (runoob.com)

tzselect

用于选择时区

cal

用于显示日历

gedit

linux下的一个记事本

在用记事本写程序时,最上一样一定要加一个Shebang#!,这是用来指定你的解释器的

使用例:

#!/usr/bin/env python3

passwd

默认修改当前账户的密码(如果后面不跟用户名)

logout

注销

exit

退出终端

reboot

重启

shutdown

关机

-r now 立即重启

-r +5 三分钟之后重启

-h now 立即关机

-h +5 提示三分钟之后关机

-h 12:00 十二点关机

-c 取消关机

cd

切换目录

cd ..转到前一个目录

cd - 转到前一个目录(不是上一级目录!)

pwd

查看当前的工作路径

ls 

查看当前目录下文件(如果又想用-a 又想用-l,可以直接-al)

-a 显示所有文件(包括前面打了个.的隐藏文件)

-A 和-a基本一样,只是不显示当前目录.和上一级目录..

-l 显示文件的详细信息,后面跟目录下的某文件可以显示文件信息

        -l显示出的文件信息含义:

                开头为-,代表普通文件

                为d,代表是一个目录

                为l,代表是链接文件(相当于快捷方式)

                后面部分的rwxrwxrwx:

                        三个一组,分别代表用户(user),所在组(group),其他人(other)的权限

                        r表示可读,w表示可写,x表示可执行

ls abd* 星号叫做通配符,会自动识别星号以外文件名内含相同字符的文件

-r 按英文首字母逆向排序

-R 把当前目录下的文件都遍历一遍,可以用命令tree代替效果更好

mkdir

创建目录用

-p bb/cc/cc 可以一次性创建多层目录,不加-p会报错

rm

删除文件,rm命令不建议用,容易误删

-i 删除文件时给提示

-r 强制删除,这样也能删除目录

mv

既可以移动文件和目录,又可以给他们重命名

mv a.txt b.txt a文件重命名为b

mv a.txt /temp 把a文件移动到/temp目录下,这个目录会展示存放文件,一段时间后自动清除

cp

复制文件

cp file1 file2 复制file1 文件并命名为file2

cp -r aa/ bb/ 复制目录aa并命名为目录bb,必须加-r强制执行才可以

cp -a 复制文件时保留原来文件的读写权限

ln

为文件建立链接

ln [参数] 源文件 链接文件

ln -s 建立一个软链接(类似于快捷方式);删除源文件会让链接文件失效

不加任何参数,默认建立硬链接,文件大小同源。删除文件不改变链接文件

touch

修改文件时间 

touch file1,若file1不存在则被创建

touch -c file1,若file1不存在不被创建

tiuch -r file1 file2 让file2的时间戳和file1相同

touch -t 201210120505.2 file1 指定时间

cat

显示文件内容

cat -n 增加行号

cat -s 把文件中的多个空行变成一个空行,但是一行只有空格不视为空格

tac

倒着显示文件内容

wc

显示文件的信息,输出分别为 行数   非空行行数  字符数,注意换行符这类占两个字符哦

-c 只看byte数,用了多少字节

-l 只看行数

-w 只看字数(单词)

sort

查看文件内容,但是按首字母(或数字)每行排序的

-r 按首字母逆序

-n 按纯数字大小排序

-b 忽略最前面的空格符

sort -t ‘你想用任意的符号替换分隔符’ 

uniq

扫描文件,重复行只显示一行

-c 显示行出现的个数

-u 显示时将有重复的行全部删除

cut

从一个文本文件中提取文本列,要配合参数使用

-d 后面加分隔字符。和-f一起用

-f 依据-d后面的分隔字符将一段信息分为几段,-f后面跟要取第几段,例如

cut -d : -f 3 aa.txt

-c 以字符为单位取出每行固定字符区间

cut -c 5 aa.txt 隔五个取一个,下一行继续

cut -c 1,5 aa.txt 取第一个和第五个放在一行,下一行重复进行

cut -c 1-5 取第一个到第五个,下行继续

cut -c 1-3,5 以此类推

tee 

用来把前一个命令标准输入后输出的数据输出成一个文件例如

比如说想把cat的用法输出出来,就可以

cat --help | tee how_to_use_cat.txt

history

输出之前执行的所有命令

history 5 输出最近的五条

history !253 执行第253条命令

这里说一下感叹号有妙用

如果你之前输入了一个gedit命令

输入!ge就会检索并执行最近一个前面有ge的命令(不论是否能正确运行)

history调用的历史命令都储存在/home/用户名/.bash history里

more

也是浏览文件的命令

但是可以翻页,显示看了百分之多少

在more出来的文件中输入/后加你想寻找的内容便可以查找文本

less

也是浏览文件

head

也是浏览文件,默认是显示前十行

head -n 50 浏览前五十行

tail

也是浏览文件,默认是显示后十行,用法和head一样

但是tail有一个优秀点,tail -f 可以实时监控文件的变化(等同于tailf)

which

查看可执行的命令的所在位置

tar

打包或解压目录(注意,打包是把一堆目录文件合并成一个文件,压缩是把一个大文件通过算法变成一个比较小的文件。

常用参数

-c 创建.tar打包文件

-x 解包.tar文件

-v 显示详细信息

-z 压缩(.gz)或解压缩tar

-f 指定打包后的文件名,最后一个参数

例如

tar -czvf dir1.tar.gz dir1 #将目录dir1打包并压缩成dir1.tar.gz文件

tar -cf dir1.tar dir1 #打包

gzip dir1.tar #压缩

tar -xf dir1.tar #解包dir1.tar

tar -zxf dir1.tar.gz #解压并解包dir1.tar.gz

chmod

修改权限,u代表使用者,g代表组,o代表其他人,a代表所有人

chmod u=rw aa.txt 代表使用者可以读写但是不能执行文件aa

chmod u+w 给使用者增加可写权限

chmod u-w 限制使用者的可写权限

更聪明的是,linux给可读r=4,w=2,x=1,则7代表rxw,3代表-wx,以此类推

chmod 755 代表rwxr-xr-x

对于目录的rwx,可读代表你能查看目录下的文件,可写代表你能修改目录下的文件(增删,改时间等),可执行代表目录可以被使用(只能cd访问其他啥都不能干)

chmod -R 递归修改某目录以及目录下的所有程序的权限 

chown

改变文件的所有者和所有组

chown someone aa.txt

chown someone:somegroup aa.txt

usreradd

添加用户

但是我们会发现添加的用户打开时显示在/home下找不到相应用户文件,这需要 useradd -m

还有可能因为指定目录的shell为/etc/sh出现的问题(Ubuntu就会碰到),这需要useradd -s /bin/bash

参数    参数说明
-b,–base-dirBASE_DIR    新帐户主目录的基本目录
-c,–commentCOMMENT    新帐户的GECOS字段
-d,–home-dirHOME_DIR    新帐户的主目录
-D,–defaults    打印或更改默认用户添加配置
-e,–expiredateEXPIRE_DATE    新帐户的到期日期
-f,–inactiveINACTIVE    新帐户的密码不活动期
-g,–gidGROUP    新帐户的主组的名称或ID
-G,–groupsGROUPS    新帐户的补充组列表
-h,–help    显示此帮助消息并退出
-k,–skelSKEL_DIR    使用这个替代的框架目录
-K,–keyKEY=VALUE    覆盖/etc/login.defs默认值
-l,–no-log-init    不要将用户添加到lastlog和faillog数据库
-m,–create-home    创建用户的主目录
-M,–no-create-home    不要创建用户的主目录
-N,–no-user-group    不要创建与用户同名的组
-o,–non-unique    允许创建具有重复(非唯一)UID的用户
-p,–password PASSWORD    新帐户的加密密码
-r,–system    创建一个系统帐户
-R,–root CHROOT_DIR    要导入的目录
-s,–shell SHELL    新帐户的登录shell
-u,–uidUID    新帐户的用户ID
-U,–user-group    创建与用户同名的组
-Z,–selinux-user SEUSER    为SELinux用户映射使用特定的SEUSER

创建新用户后,通常没有家目录下的配置文件(useradd忘了-m连家目录都没有),可以从/etc/skel/下拷贝到家目录,注销账号再登陆进去,source .bashrc (source是用来执行脚本文件的)后就能使用.bashrc提供的东西了

userdel

删除用户信息的,加上-r会删除除了用户信息包括家目录

usermod

用来修改用户账号的各项设定

  • -c<备注>  修改用户帐号的备注文字。
  • -d登入目录>  修改用户登入时的目录。
  • -e<有效期限>  修改帐号的有效期限。
  • -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
  • -g<群组>  修改用户所属的群组。
  • -G<群组>  修改用户所属的附加群组。
  • -l<帐号名称>  修改用户帐号名称。
  • -L  锁定用户密码,使密码无效。
  • -s<shell>  修改用户登入后所使用的shell。
  • -u<uid>  修改用户ID。
  • -U  解除密码锁定。

groupadd

添加组

-g 可以给组赋予一个ID,最好1000以上

groupmod

修改组

和usermod用法一样

id

用于查看用户信息

vi

一个编辑器

su

登录用户,最好要加个 - 

su - usr1

sudo

暂时作为管理员运行文件,是一个安全保障,并且文件/etc/sudoers 里面可以配置sudo运行时的参数(比如对什么用户或组需要管理员权限等等,还可以直接执行命令visudo)

alias

取别名,给一些复杂的命令取个简单点的名字

alias ll='ls -l'

但是如果想长期保存这些命令,必须要取修改在配置文件 ~/.bashrc

echo

就是打印,把内容输出

-n 后的结果是没有换行

locate

查找文件

locate 想查找内容

例如:

locate /etc/sh,只要文件的路径有/etc/sh这几个字符,都会显示出来

locate -i 忽略大小写

如果不久(当天)新建了一个文件,locate是找不到的,需要输入命令updatedb更新数据库才能用locate查找

find

也是查找文件,但是locate是从数据库内查找(所以要updatedb),而find是从磁盘内遍历查找

find /home/ -name ‘*a.txt’,即在/home目录下以名字查找名字末尾为a.txt的文件

find /home/ -iname ‘*a.txt’,不区分大小写

find /home/ -type f,按文件类型查找,f代表普通文件

find /home/ -maxdepth 2 -type f,查找时指定最大查找深度,即再往下找几个文件夹到底

find /home/ -mindepth 2 -type f,指定最小深度,从往下第几个文件夹开始查

d: 目录

c: 字型装置文件

b: 区块装置文件

p: 具名贮列

f: 一般文件

l: 符号连结

s: socket

find /home/ -size 10M 查找大小大于10m的文件

find /home/ -size 10M 查找大小小于10m的文件

b 代表 512 位元组的区块,c 表示字节,k 表示 kilo bytes,M,G。

下列是按时间查找的方法

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去 n 天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去 n 天内创建的文件

-mtime n : 在过去 n 天内修改过的文件

find /temp/ -nouser 找没有所有者的文件

-nogroup 没有所有组的文件

find /temp/ -uid 1003 按用户id查找

find /temp/ -gid 1003 按组id查找

find /temp/ -user www 按用户名查找

find /temp/ -perm 777 按权限去查找

可以通过逻辑语-a和-o来增加查找要求,例如

sudo find /home -user www -a -perm 664,即按照用户名为www权限为664查找相应文件

find /temp/ -perm 777 -ok ls -l 对执行结果显示详细信息,-ok后面跟对前面结果进行的操作

mount

挂载文件 

mount /dev/cdrom /mnt 把光驱/dev/cdrom挂载到/mnt下,打开/mnt能看到光盘的内容

mount -o remount /mnt 可以在不卸载的方法下重新挂载

mount a.iso -o loop /mnt 从镜像文件里面复制文件到/mnt

umount

卸载

若卸载光盘时显示busy,umount -l 强制卸载

快捷键

ctrl+c,强制终止任务

ctrl+l,清屏

tab,自动补全命令,按两下显示所有可能的命令

ctrl+k,删除当前光标所在位置后面的内容

ctrl+u,删除当前光标所在位置到行首的内容

ctrl+w,删除当前光标所在位置到前面第一个空格的内容

ctrl+y,恢复之前删除的命令

ctrl+a,将光标移动到最前面

ctrl+e,将光标移动到最后面

ctrl+r,搜索之前打出的一个命令

ctrl+d,退出当前shell命令行

ctrl+shift++,屏幕字变大

ctrl+-,屏幕字变大

alt+. 依次找之前命令跟的字符串(必须先打一个命令)

符号

管道符 |

主要用于多重命令处理,前面命令的打印结果作为后面命令的输入。

例如: cat a.log | wc

重定向 >

> 一个存在的文件,文件清空

> 一个不存在的文件, 生成一个空文件

echo ‘123’ > aa.txt 删除文件内容,添加123

echo ‘123’ >> aa.txt 往此文件内追加输入文本123

1> 代表输入且只输入前面命令标准正确输入的内容,意思和>一样, dsawdsaw 1> aa ,在aa中结果为空

2>代表输入且只输入前面命令标准错误输入的内容,dsawdsaw 2> aa ,在aa中结果为报错信息的文本内容

&>代表标准正确和错误输出一起输入进文件


 

通配符*

查找文件时加不全的文件名加*,省略后面的字符进行模糊查找

反引号`

反引号是波浪线~那个键不按shift时打出来的符号,不要和正引号弄反了

反引号的作用是,反引号内的文本作为命令执行,例如

ll `sudo find /home/ -type f`

流编辑器

sed

sed 参数 动作 文件

参数:

-e command,--expression=command允许多台编辑。

-h,--help打印帮助,并显示bug列表的地址。

-n,--quiet,--silent安静模式,本来sed会把所有行都列出来,-n后只出现处理过的行

-f,--filer=script-file直接将sed的动作写在文件里。-f filename 则可以运行filename内的动作。

-i 直接修改文件内容,不输出到终端

动作:

p

打印匹配行(和-n选项一起合用)

=

显示文件行号

a\

在定位行号后附加新文本信息

i\

在定位行号后插入新文本信息

d

删除定位行

c\

用新文本替换定位文本

w filename

写文本到一个文件,类似输出重定向 >

r filename

从另一个文件中读文本,类似输入重定向 <

s

使用替换模式替换相应模式

q

第一个模式匹配完成后退出或立即退出

l

显示与八进制ACSII代码等价的控制符

{}

在定位行执行的命令组,用分号隔开

n

从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理

N

在数据流中添加下一行以创建用于处理的多行组

g

将模式2粘贴到/pattern n/

y

传送字符,替换单个字符

一般是d,p,s用的比较多

使用例子 sed ‘3,5d’ a.txt 删除文件a的第三行到第五行内容

sed '/aaa/,/bbb/d' a.txt 删除文件字符aaa那行到字符bbb那行间所有内容

sed '/aaa/+3d' a.txt 删除aaa那一行后三行内容

sed '5~2d' a.txt 从第五行开始删除偶数行,要删除奇数行就是~1

sed ‘3,5p’ a.txt 打印文件a的第三行到第五行内容

sed ‘\$p’ a.txt 打印文件最后一行

sed ‘\$c\good’ a.txt 修改最后一行为good

sed 's/aaa/bbb/' a.txt 把最前面的aaa内容替换为bbb

sed 's/aaa/bbb/g' a.txt 把全部aaa替换为bbb

sed 's/\(aa\)\(a\)\1bbb\2/' 把aaa拆分中间加入bbb,输出aabbba

或 sed -r 's/(aa)(a)/\1bbb\2/'

x

x为行号

x,y

表示行号从x到y

/pattern

查询包含模式的行

/pattern /pattern

查询包含两个模式的行

pattern/,x

在给定行号上查询包含模式的行

x,/pattern/

通过行号和模式查询匹配的行

x,y!

查询不包含指定行号x和y的行

awk

awk '{pattern + action}' {filenames}

awk '{print $2}' z.txt 打印文件每行第二列的词组(以空格为界,$0代表整行)

变量名  含义

ARGC  命令行变元个数

ARGV  命令行变元数组

FILENAME 当前输入文件名

FNR  当前文件中的记录号(行数)

FS  输入域分隔符,默认为一个空格

RS  输入记录分隔符

NF  当前记录里域个数(分隔符之间的叫域,相当于一个单词,NF就相当于单词数)

NR  到目前为止记录数

OFS  输出域分隔符

ORS  输出记录分隔符
 

例 awk '{print FNR}' z.txt

awk 'BEGIN{OFS='_'}{print $1}END{}' 可以预定义域分隔符为_

vi vim

操作是一样的,只是vim更有好一些

(感谢原作者ICer消食片,若有侵权会立即删除)

按esc便命令模式

命令模式下按i是插入模式,大写I是在行首进入插入模式

小写a是光标向后移动一个位置进入插入模式,大写A是在末尾进入插入模式

小s是删除当前字符进入编辑模式,大S是删除当前行并进入编辑模式

小o是在当前行下一行开启一个新行并进入编辑模式,大O是在当前行的上面插入一个空行并进入编辑模式

大R是替换模式,替换当前光标后面所有内容,写多少替换多少,小r是替换当前字符

按两下小g是到文章开头,两下大G是到文章结尾,如果想到特定行,可以16G,便跳到16行

按下3+便是向下移动三行,按下3-便是向上移动

按下5h向左移动五个字符,按下5l为向右移动五个字符,按下5j为向下移动五个,按下5k向上移动五个

按下$ 到行尾

按下^到行首

按两下小d删除一行,3dd删除三行,d$为删除当前位置到行尾,d^为删除当前位置到行首

在命令模式下按冒号:,再w,这是存储

yy为复制当前行,3yy为复制三行,y$为复制当前位置到行尾的内容,y^你懂的,p为粘贴

u为撤销,ctrl+r是反撤销

w是每次走一个‘单词’,b移动到当前单词的行首,e移动到当前单词的行尾

查找:/想找到内容     查找光标以下的内容      按n 为从上往下查找 按N为从下往上查找

        ?想查找的内容    查找光标以上的内容

:q是退出

:wq是保存并退出

:!q是强制写入

:!w是强制写入

:set nu 显示行号

:s/i/j/ 把当前行离行首最近的i替换为j

:s/i/j/g 把整行i变为j

:%s/i/j/g 把整个文章的i变为j

:1,3s/i/j/g 把一到三行的~~~~~~

环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

可用env查看当前用户下的环境变量

可用export直接设置当前用户的环境变量,例:export LANG='zh'

常用环境变量

PATH

修改环境变量PATH是为了直接运行一个程序而不需要再输入具体路径

对单个用户修改:~/.profile --> PATH='要增加的路径 :$PATH'

对全体用户修改(不推荐):/etc/profile --> PATH='要增加的路径 :$PATH'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值