2021-09-25

Linux文件与目录管理

一.目录与路径

1.相对路径与绝对路径

**相对路径的用途:**当在同一工作目录,需要切换到不同的目录时(绝对路径较长),使用相对路径比较方便。

**绝对路径的用途:**绝对路径的正确度要比较好,如果是在写程序(shell scripts)来管理系统的条件下,务必使用绝对路径的写法。

2.目录的相关操作

比较特殊的目录:

  • . :代表此层目录;
  • .. :代表上一层目录;
  • - :代表前一个工作目录;
  • ~ :代表[目前用户身份]所在的家目录;
  • ~account :代表account这个目录的家目录(account是个账号名称)。

几个常见的处理目录的指令:

  • cd :变换目录;
  • pwd:显示当前目录;
  • mkdir:建立一个新的目录;
  • rmkdir:删除一个空的目录。

指令cd(change directory,变换目录):

操作示例:

在这里插入图片描述

注意:目录名称与cd指令之间存在一个空格。

指令pwd(Print Working Directory)(显示目前所在的目录):

在这里插入图片描述

mkdir(建立新目录):

使用示例:

在这里插入图片描述

mkdir可以建立新的目录,但是要一层一层的建立才行;如果想像上图那样一次建立需要加上-p,同时我们可以使用-m 权限对要建立的目录进行预设权限。

rmdir(删除[空]的目录):

使用示例:

在这里插入图片描述

删除旧的目录可以使用指令rmdir text,但是只能一层一层的删除,而且被删除的目录里面必定不能存在其他的目录或文件;如果要将所有目录下的东西都杀掉,这个时候必须使用rm -r text;加入-p,可以删除上层的目录。

3.关于执行文件路径的变量:$PATH

在任何地方都可以执行/bin/ls指令,是因为环境变量PATH的帮助所致。

可以使用指令echo $PATH来看看到底有哪些目录被定义出来。(echo:显示,印出)

PATH(一定是大写)这个变量的内容是由一堆目录所组成,每个目录中间用冒号(:)来隔开,每个目录是有[顺序]之分的。

理解示例:

在这里插入图片描述

  • 不同身份使用者预设的PATH不同,默认能够随意执行的指令也不同(如root与duo);
  • PATH是可以修改的;
  • 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻PATH来的正确;
  • 指令应该要放置到正确的目录下,执行才会比较方便;
  • 本目录(.)最好不要放到PATH当中。

二.文件与目录管理

1.文件与目录的检视:ls

ls指令语法:

在这里插入图片描述

只下达ls时,默认显示的只有:非隐藏档的档名、以档名进行排序及文件名代表的颜色显示;

2.复制、删除与移动:cp,rm,mv

cp(copy,复制文件与目录):

指令cp的语法:
在这里插入图片描述

相关示例:
在这里插入图片描述

在预设的条件中,cp的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。如例二中,以root身份复制过来的文件拥有者与族群就变成了root所有。因此,在进行备份的时候,某些需要特别注意的特殊权限文件以及一些配置文件就不能直接以cp来复制,而必须加上-a或者是-p等可以完整复制文件权限的选项才行。

cp示例2:
在这里插入图片描述

-l,-s都会建立所谓的连结档,但是这两种连结档却有不一样的情况:-l就是所谓的实体链接(hard link),至于-s则是符号链接(symbolic link),简单说,bashrc_slink是一个快捷方式,这个快捷方式会连结到bashrc去,所以会有个->的符号。

cp指令示例3:
在这里插入图片描述

在复制时,必须了解清楚:

  • 是否需要完整的保留来源文件的信息;
  • 来源文件是否为连结档;
  • 来源档是否为特殊的文件,例如:FIFO,socket等?
  • 来源文件是否为目录?

rm(移除文件或目录):

rm指令示例:

在这里插入图片描述
在这里插入图片描述

使用指令rm -r之前,千万注意,因为该目录或文件肯定会被root删除,因为系统不会在此询问你是否要删除。确定该目录不要了,用rm -r来循环删除是个不错的选择。

范例四:档名最好不要使“-”开头,因为-后面一般接的是选项,因此,单纯的使用rm -aaa-系统指令会误判;所以避过首位字符是“-”的方法就是加上本目录[./]即可,或者使用指令rm -- -aaa-.

mv(移动文件与目录,或更名):

指令mv使用语法:

在这里插入图片描述

3.取得路径的文件名与目录名称

在这里插入图片描述

三.文件内容查阅

  • cat:由第一行开始显示文件内容;
  • tac:从最后一行开始显示,可以看出tac是cat的倒写;
  • nl:显示的时候,顺道输出行号;
  • more:一页一页的显示文件内容;
  • less:与more类似,但是比more更好的是,他可以往前翻页;
  • head:只看头几行;
  • tail:只看尾巴几行;
  • od:以二进制的方式读取文件内容。

1.直接检视文件内容

查阅文件内容可以使用cat/tac/nl这几个指令;

cat(concatenate):

使用语法:
在这里插入图片描述

当文件内容的行数超过40行以上,来不及在屏幕上面看到结果,所以要配合more或者是less。

tac(反向列示):

就是:由最后一行到第一行反向在屏幕上显示出来。

nl(添加行号打印):
在这里插入图片描述

nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。

2.可翻页检视

nl,cat,tac都是一次性将数据一口气显示dao屏幕上面,more和less可以一页一页的观察,这样前面的数据才不会看不到。

more(一页一页翻动):

示例:

在这里插入图片描述

当文件内容行数大于屏幕输出的行数时,就会出现类似上面的图示,重点在最后一行,会显示目前显示的百分比,而且最后一行还可以输入一些有用的指令:

  • 空格键(space):代表向下翻一页;
  • Enter:代表向下翻一行;
  • /字符串:代表在这个显示的内容当中,向下搜寻[字符串]这个关键词;
  • :f:立刻显示出文件名以及目前显示的行数;
  • q:代表立刻离开more,不再显示该文件内容;
  • b或[ctrl]-b:代表往回翻页,不过这动作只对文件有用,对管线无用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
这里是使用 Python 的 PyMySQL 完成上述任务的代码: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test') # 创建游标 cur = conn.cursor() # 创建 users 表 cur.execute(''' CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(20), age INT ) ''') # 创建 orders 表 cur.execute(''' CREATE TABLE orders ( id INT PRIMARY KEY, order_date DATE, amount INT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ) ''') # 插入数据 users_data = [ (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28) ] orders_data = [ (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4) ] for user in users_data: cur.execute('INSERT INTO users VALUES (%s, %s, %s)', user) for order in orders_data: cur.execute('INSERT INTO orders VALUES (%s, %s, %s, %s)', order) # 提交事务 conn.commit() # 查询语句 # 1. 查询订单总金额 cur.execute('SELECT SUM(amount) FROM orders') print(cur.fetchone()[0]) # 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 cur.execute('SELECT ROUND(AVG(age), 2) FROM users') print(cur.fetchone()[0]) # 3. 查询订单总数最多的用户的姓名和订单总数。 cur.execute(''' SELECT users.name, COUNT(*) AS total_orders FROM users JOIN orders ON users.id = orders.user_id GROUP BY users.id ORDER BY total_orders DESC LIMIT 1 ''') print(cur.fetchone()) # 4. 查询所有不重复的年龄。 cur.execute('SELECT DISTINCT age FROM users') print([row[0] for row in cur.fetchall()]) # 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 cur.execute('SELECT SUM(amount) FROM orders WHERE order_date BETWEEN "2021-09-01" AND "2021-09-04"') print(cur.fetchone()[0]) # 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 cur.execute(''' SELECT users.name, COUNT(*) AS total_orders FROM users JOIN orders ON users.id = orders.user_id WHERE age <= 25 GROUP BY users.id ORDER BY total_orders DESC ''') print(cur.fetchall()) # 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 cur.execute(''' SELECT users.name, SUM(amount) AS total_amount FROM users JOIN orders ON users.id = orders.user_id GROUP BY users.id ORDER BY total_amount DESC LIMIT 3 ''') print(cur.fetchall()) # 8. 查询订单总金额最大的用户的姓名和订单总金额。 cur.execute(''' SELECT users.name, SUM(amount) AS total_amount FROM users JOIN orders ON users.id = orders.user_id GROUP BY users.id ORDER BY total_amount DESC LIMIT 1 ''') print(cur.fetchone()) # 9. 查询订单总金额最小的用户的姓名和订单总金额。 cur.execute(''' SELECT users.name, SUM(amount) AS total_amount FROM users JOIN orders ON users.id = orders.user_id GROUP BY users.id ORDER BY total_amount ASC LIMIT 1 ''') print(cur.fetchone()) # 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 cur.execute('SELECT * FROM users WHERE name LIKE "%李%" ORDER BY name ASC') print(cur.fetchall()) # 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 cur.execute('SELECT * FROM users WHERE age > 20 ORDER BY age DESC LIMIT 5') print(cur.fetchall()) # 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。 cur.execute(''' SELECT users.name, COUNT(*) AS total_orders, SUM(amount) AS total_amount FROM users JOIN orders ON users.id = orders.user_id GROUP BY users.id ORDER BY total_amount DESC ''') print(cur.fetchall()) # 关闭游标和连接 cur.close() conn.close() ``` 注意:在运行代码之前,需要先安装 PyMySQL 模块,可以使用以下命令进行安装: ``` pip install pymysql ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值