我的树莓派想对一个可执行文件,进行,上传然后./duoji.o显示没有改目录,然后我去sude find查找发现权限不够,然后我又去su发现鉴定故障这是为什么
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在Linux系统中,上传并运行可执行文件通常涉及到以下几个步骤:
- 打开终端或命令行窗口。
- 使用
cd
(更改当前工作目录)命令切换到目标文件夹(在这个例子中是"/path/to/your/file")。例如:cd /path/to/your/file
- 使用
chmod +x
命令将可执行文件赋予可执行权限。这允许root用户或具有超级权限的用户(通常是sudo或g)执行文件。
接下来,我们需要安装必要的库和工具,以便我们可以将程序写入文件并从文件中读取数据:
sudo apt-get update && sudo apt-get install golang build-essential cmake
这里假设您已经在
~/.bashrc
文件中添加了上述命令,并且已经设置为系统的默认配置。现在我们按照以下步骤编写程序代码并将其保存为sudu.o
文件:package main import ( "fmt" "os/exec" ) func main() { sudo, err := exec.Command("sh", "-c", `#!/bin/bash # 文件路径 source_dir="/path/to/source/directory" # 指定要修改的目录 target_dir="/path/to/target/directory" # 将源文件路径替换为目标文件路径 modified_source_file=modified_source_file.replace(/"/,"") # 配置函数以打印出已更改的目录路径 print_changed_path = func(directory string) string { return directory + "/" } # 调用更新目标文件的方法 err = modified_source_file.Run(command="update-source") if err != nil { fmt.Println(err) } else { fmt.Println("修改成功!目标文件路径:", print_changed_path(target_dir)) } } // replace 替换字符串中的所有反斜杠转义字符 func modified_source_file.replace(srcDir, destDir string) string { for _, file := range os.listdir(srcDir) { if file == ".DS_Store" || file == "README.md" { continue } for i, char := range file { if char == "\"" || char == "/?" { char = "\\\\" } file = filepath.Join(srcDir, file[:i] + char + file[i+1:]) } newFile := filepath.Join(destDir, file) os.rename(srcFile, newFile) } return destDir }
这段代码首先定义了一个名为
main
的主函数,该函数获取系统用户的shell和命令行执行权限。它通过exec.Command()
方法调用sh
命令并传入命令内容,包括创建一个新的可执行文件、设定源文件路径与目标文件路径、将源文件路径转换为目标文件路径,并执行update-source
命令(根据实际需求选择更新源文件路径的其他操作)以覆盖旧版本文件。最后,它打印出修改后的目录路径。注意,这个示例中没有检查上传前目标文件是否存在。如果您想要检查文件是否确实存在并据此决定是否继续执行操作,可以在
updated_source_file.Run()
中添加以下代码段:if !fileExists(target_dir) { fmt.Println("目标文件不存在,暂停操作。") return }
这将确保当目标文件存在但被其他进程占用时,程序不会执行任何不必要的操作。例如,在Windows系统中,可以使用
Get-ChildItem -Path $dir
cmdlet来判断目标文件是否存在。如果文件未存在于指定目录中,那么可以暂停当前的脚本并尝试重新下载文件。此外,为了增加安全性,您可能还需要在上传前先验证目标文件的存在。以下是修改后的代码片段,用于验证目标文件是否已被上传,以及在上传失败时提供适当的错误消息:
// 保存上传操作记录 upload_log := []byte(`{"message":"Upload successful","timestamp":"2022-06-01T12:00:00Z","action":"upload"}`) // 记录上传的路径 upload_path := getUploadPath() // 如果目标文件不存在,则发送错误消息并停止上传操作 if !fileExists(upload_path) { upload_error := fmt.Sprintf("目标文件 '%s' 已经被其他进程或其他服务占用,无法进行上传。请稍后重试。", upload_path) upload_log = append(upload_log, upload_error) sendErrorLog(upload_log) return } // 通知服务器或操作系统将目标文件放入上传队列 notifyServer(upload_path) // 保存上传操作日志 upload_log = append(upload_log, "Successfully uploaded to 'https://example.com/uploaded-file/'") // 发送错误通知到远程服务器 sendErrorNotification(upload_log) // 在上传结束后执行一些后续操作,如删除临时文件 deleteTempFiles(upload_path)
上述代码中,我们创建了一个包含上传信息的日志记录,并包含了上传操作的路径。如果目标文件未上传成功,我们将记录详细的错误信息,并使用
sendErrorLog()
函数向远程服务器发送错误通知。然后,我们在上传完成后删除临时文件。在
upload_path
变量中存储上传的路径,以备后续使用。同时,将upload_log
变量附加到传输操作记录中,以便在出现问题时查看详细的日志信息。请根据您的具体需求调整上述代码,例如,如果您想要上传文件到不同的服务器,只需要替换
https://example.com/uploaded-file/
为正确的服务器地址。若目标文件的格式不是可执行的(例如,是一个非二进制文件),则需要相应的解析工具进行处理。同样,当目标文件被其他的网络服务或者其他进程占用时,也需要注意如何处理这种情况。最后,确保在上传完成后及时清理上传过程中产生的临时文件,以提高系统的资源利用效率。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改