Linux 基础上机篇

这篇博客详述了Linux系统的命令行操作,包括查看用户、时间日期、目录切换、文件操作等基本命令。同时,介绍了如何使用vi编辑器创建脚本,涉及date、pwd、cal、ls等命令的组合使用。此外,还讲解了脚本中条件判断和循环结构的应用,并展示了批量创建用户和执行C语言程序的脚本编写过程。内容涵盖了文件复制、重命名、统计、打包解包、权限管理等多个方面,是Linux初学者的实用教程。
摘要由CSDN通过智能技术生成

目录

第一次上机:

第二次上机: 

第三次上机:

第四次上机:


第一次上机:

1,查看当前在线用户,以及工作目录。

w            #查看当前在线用户
pwd          #查看工作目录

2,使用命令date显示当前的时间和日期;将现在日期按照格式:时:分:秒 年-月-日显示。(并将显示结果存入/home/shouyi/a文件中,并查看文件内容。)

date +'%H:%M:%S %y/%m/%d'               #以时:分:秒 年-月-日显示当前时间。
date +'%H:%M:%S %y/%m/%d' > /home/a.txt #将显示结果存入/home/a.txt文件中。
head -v /home/a.tet                     #查看文件内容

3,使用echo命令显示“hello linux”。(并将显示结果存入home/shouyi/b文件中,并查看文件内容。)

echo hello wold                #显示hello wold
echo hello wold >b.txt         #将hello wold放入b.txt
head -v b.txt                  #查看b.txt  

4、使用命令切换到/etc目录,并显示当前工作目录路径。

cd /etc            #进入路径
pwd                #显示路径

5,使用命令显示/root目录下所有文件目录的详细信息,包括隐藏文件,查看文件类型。

ls -a -all        #查看所有文件

6,使用命令在用户主目录(/home/shouyi下)创建一个目录目录名为各自0的学号,在此目录下创建空文件ab,内容是当前的日期信息。

cd home/shouyi            #进入路径
mkdir 20191101666         #创建学号目录
cd 20191101666            #进入学号目录
date >ab                  #将时间放入ab文件,没有则创建

7、将文件/etc/host.conf文件复制到目录/home/shouyi学号中。

cp etc/host.conf /home/shouyi/20191101666        #进行复制

8、将目录中的文件host.conf更名为test。

mv host.conf test            #将名字修改为test

9、统计文件/home/shouyi/学号/test 的行数、字符数和单词数。

wc -lwc test            #显示行数字符数单词书

10、使用命令对创建符号链接文件/home/linka ,链接对象是/home/shouyi学号目录下的文件test。

ln -s /home/linka /home/sn/20191101666  #创建符合链接

11将该目录及其目录下的文件一起删除。

cd /home             #进入要删除文件的路径
rm -rf 20191101666   #删除20191101666

第二次上机: 

1,以root用户登录到家目录。(后续操作均在root的家目录进行

sudo passwd            #修改密码进入
su                     #进入管理员权限
cd /root               #进入root

2,以学号创建文件夹,及学号/logs

mkdir 20191101666            #创建学号目录
cd 20191101666               #进入目录
mkdir logs                   #创建logs

3, 查找/var/log下所有log文件,并复制到上一步创建的logs目录

ls –a /var/log          #查看路径下内容
cp  –r  /var/log  /logs #复制

 4,统计logs目录下文件的数量,并把统计结果保存到学号/logscount文件中

ls -l ./ |grep "^-"| wc –l        #查看当前文件数量
ls -l ./ |grep "^-"| wc –l >home/20191101666    #将数量放入学号文件夹

5, 将当前系统时间以“当前系统时间:xx:xx:xx”的形式追加到logscount 文件中

date +"present_time:%H:%M:%S" >>logscount

6, 将logs目录打包为logs.tar.gz

tar zcvf log.tar.gz logs      #将logs目录打包为logs.tar.gz

7, 将logs.tar.gz解包到学号/logs_bak目录

tar zxvf /home/shouyi/Desktop/20191101666/log.tar.gz -C /home/shouyi/Desktop/20191101666/logs_bak    #(绝对路径)

8, 在学号下创建vi目录

mkdir vi        #在学号下创建vi目录

9, 在vi目录创建文件abc.c程序,输入内容见下图,并完成以下操作:

 :set nu        #(1)显示行号

10,学号目录及其目录下的文件一起删除。

rm -r 20191101666        #删除学号文件夹

第三次上机:

 1,使用vi建立一个脚本,脚本包括date、pwd、cal、ls 等命令,使用不同的方式执行该脚本。

首先获取权限

sudo passwd            #修改密码
su                     #获取权限
vi test.sh             #建立脚本文件

进入文本后输入

#!bin/bash

echo “date”

date +”%F %T”

echo “pwd”

cal

echo “cal”

cal

echo “ls”

ls -alba

然后退出,在输入

chmod +x test.sh            #添加执行权限
bash <test.sh               #执行脚本

2,调试脚本:P121例4.11、P123例4.12、P129例4.16

代码分析部分

代码1

#if user has logged in the system                
#then, copy a file to his or her file
#else,display an error information

echo "Type in the user name ."                #输出文字Type in the user name
read user                                     #读取user的信息
if                                            #如果
   grep $user  /etc/passwd > /tmp/null        #字符匹配user,存在把/etc/passwd放入/tmp/null
   who | grep $user                           #显示匹配的user
then                                          #然后
   echo "$user has not logged in the system." #输出语句user has not logged in the system
   cp /tmp/null tmp1                          #复制/tmp/null到tmp1
   rm /tmp/null                               #删除/tmp/null
else                                          #否则
   echo "$user has not logged in the system." #输出user has not logged in the system
fi                                            #结束

代码2

#!/bin/bash                            
echo -n "keyin a number(1-10): "  
read a                            #读取a
if                                #如果
    [ $a -lt 1 -o $a -gt 10 ]     #a小于1或者大于10
then
    echo "Erroe Number."         #输出Erroe Number
    exit 2
elif
    [ ! $a -lt 5 ]              #如果a不小于5
then                            #则
    echo "It's no less 5."      #输出It's no less 5              
else                            #否则
    echo "It's less 5."         #输出It's less 5  
fi                              #结束
echo "accept key in value . "   #输出accept key in value

代码3

#/bin/bash                            #告诉系统这是脚本
for((i=1;i<=10;i++))                  #外循环10次
do                                    #执行
             for ((j=1;j<=i;j++))     #内循环执行j次,j依次加一
            do                        #执行
                      echo –n “*”     #输出*
          done                        #内循环结束
          echo ‘’                     #输出 
done                                  #结束
echo”end”                             #输出end

第四次上机:

 1,使用vi建立一个脚本,实现用户的批量创建。要求:用户名为stu_序号,序号为1~100,并为每个用户设置密码为123456.

#!/bin/bash                                          #脚本中的内容
echo create account v1                               #输出创建account
prefix=stu_                                          #将prefix赋值为stu_
for((i=1;i<100;i++))                                 #循环100次
do                                                   #执行
        account_name=${prefix}${i}                   #将账号设名为stu_i
        echo add user $account_name                  #创建设定的账户
        #user$account_name -p 123456                 #为账号加密码为123456
done                                                 #结束

在加权限,运行。

chmod +x jb.sh            #加权限
bash jb.sh                #运行脚本

2,运行脚本程序

先创建C语言程序

 vim m1.c

在其中输入

#include <unistd.h>                #头文件
#include <sys/types.h>             
#include <sys/stat.h>              
#include <fcntl.h>                
#include <stdlib.h>                
#include <stdio.h>

int main(int argc,char **argv){              #主函数,传入一个整数变量argc一个指针变量argy
        int i,fd,fd2,nbyte3;                 #定义整形变量
        char buf[10];                        #定义字符数组变量

        if(argc<3){                          #如果argc小于3
                fprintf(stderr,"usage:%s origin destination\n",argv[0]); #向文件中写入argv[0]的数据    
        return 1;
}
        if((fd=open(argv[1],O_RDONLY,0644))<0){                         #如果打开argv[1]值小于0等于没有取到数据
                fprintf(stderr,"cannot open %s for reading\n",argv[1]); #向文件中写入无法读取argv[1]中的数值
                exit(EXIT_FAILURE);                                     #退出文件流操作
}
        if((fd2=open(argv[2],O_WRONLY))<0){                             #如果打开argv[2]值小于0等于没有取到数据
                fprintf(stderr,"cannot open %s for writing\n",argv[2]);#向文件中写入无法读取argv[2]中的数值
                exit(EXIT_FAILURE);                                     #退出文件流操作
}
        while((nbyte3=read(fd2,buf,10))>0){                             #如果(以buf形式读取fd2,10字节大小赋值给nbyte3)>0循环执行
                if(write(fd2,buf,nbyte3)<0){                            #如果(以buf形式读取nbyte3,10字节大小赋值给fd2)>0循环执行
                        fprintf(stderr,"%s writing error!\n",argv[2]);  #向文件写入argv[2]中写入错误
                        exit(EXIT_FAILURE);                             #退出
                }
                for(i=0;i<10;i++)                                      #循环给字符串加"\0"
                        buf[i]='\0';
        }
        close(fd);                                                     #关闭文件fd       
        close(fd2);                                                    #关闭文件fd2
        system("echo    ");                                            #输出echo  
        system("echo show_this_list--'pwd'--content");                 #输出echo show_this_list--'pwd(工作路径)'--content
        system("ls     ");                                             #输出ls(现有文件)
        exit(EXIT_SUCCESS);                                            #退出程序

        }

在创建脚本

vim sb

脚本中输入

#!/bin/bash
echo "今天是`date`"
if  (($#!=2)); then
    echo "exam7-8的用法:exam7-8 文件1 文件2"
    exit 1
elif [ ! -f $1 -o ! -f $2 ]; then
    echo "输入文件名有误!"
    exit 2
else
#调用c程序 rdwr
./rdwr $1 $2
fi
echo "下面是文件2--$2--的内容"
cat $2

再用脚本执行C语言程序

bash sb jb.sh

基础知识往这走Liunx操作指令大全

好的,这是一个比较复杂的任务,需要几个步骤来完成。下面是一个基本的算法: 1. 使用os.walk()函数遍历目标文件夹下的所有子文件夹。 2. 找到每个子文件夹中的名为"samples"和"sweeps"的文件夹,并将它们的路径记录下来。 3. 对于每个"samples"和"sweeps"文件夹,找到其中所有的子文件夹,并将它们的名称记录下来。 4. 对于每个文件夹名称,检查它是否已经在目标文件夹中创建。如果没有,则创建一个新的文件夹。 5. 将每个子文件夹中的样本文件复制到新创建的文件夹中。在复制文件时,需要检查目标文件夹中是否已经存在相同的文件,如果存在,则不复制。 下面是一个Python代码实现上述算法: ``` import os import shutil # 定义目标文件夹路径和子文件夹名称 data_dir = "/media/root1/D/Workspace/paper/data/nuscenes-all/train" subdirs = ["samples", "sweeps"] # 记录所有子文件夹中的文件夹名称 all_dirs = [] for subdir in subdirs: subdir_path = os.path.join(data_dir, "v1.0-trainval01_blobs", subdir) for root, dirs, files in os.walk(subdir_path): for dir in dirs: all_dirs.append(os.path.join(subdir_path, dir)) # 处理每个文件夹 for dir in all_dirs: # 获取文件夹名称 dir_name = os.path.basename(dir) # 检查目标文件夹中是否已经创建了该文件夹 new_dir_path = os.path.join(data_dir, dir_name) if not os.path.exists(new_dir_path): os.makedirs(new_dir_path) # 复制文件到新文件夹中 for subdir in subdirs: subdir_path = os.path.join(dir, subdir) for root, dirs, files in os.walk(subdir_path): for file in files: # 检查目标文件夹中是否已经存在相同的文件 if not os.path.exists(os.path.join(new_dir_path, subdir, file)): shutil.copy(os.path.join(subdir_path, file), os.path.join(new_dir_path, subdir)) ``` 希望这个代码可以满足您的需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值