标签: scripting

重新分区两个磁盘而不会丢失数据

我正在一家软件公司实习,但我遇到了一些困难。这是交易:

问题:我们这里有一些盒子被错误地分区为 2 x 500 GB 驱动器。实际驱动器是 2 x 1 TB 驱动器。这些基本上是只使用了一半可用磁盘空间的机器。我的任务是编写一个脚本来重新分区这些驱动器。

迄今为止的解决方案:我有一个脚本可以禁用所有进程并重新启动,然后是另一个修复分区的脚本。问题是数据丢失。

我在寻找什么:我需要一个解决方案来执行此操作但保存所有数据。我的第一个虽然是将分区增加到适当的大小,但我不确定这是否可行。另一种解决方案是将所有数据复制到 Disk2 上,对 Disk1 进行分区,然后将数据移回 Disk1,最后对 Disk2 进行分区。问题是我对 Linux 还很陌生,我真的不知道该怎么做。我可以访问 fdisk 实用程序和 parted 实用程序。

它们都是 ext3 类型。

编辑:11/3/11

好的。所以我在两个磁盘上都有大约 1GB 未使用的未分配空间。我想做如下:

  • 在SDB上新建一个1GB大小的扩展分区,命名为sdb99,参考这里
  • 将sda5 sda6 sda7复制到新的SDB分区sdb99
    • 我可以将“/”从每个文件夹复制到这个新分区中的某个文件夹吗?
    • 我需要在这个新分区上放置一个文件系统来复制那里的任何文件吗?
    • 如果我只是复制“/”,会保留整个目录结构吗?
    • 像这样在磁盘之间移动文件是一项简单的任务吗?
  • 删除sda5 sda6 sda7然后用两倍大小重新创建它们
    • 我真的需要删除这些吗?我不认为我可以增长 3 个连续的分区,即使我可以,文件系统也不会增长......对吗?
  • 将数据从sdb99复制回新的sda5 sda6 sda7分区
    • 这应该像将包含所有“/”的那些目录的内容移回一样简单,对吗?
  • 将sdb5 sdb6 sdb7复制到新的sda5 sda6 sda7到单独的文件夹中。
    • 应该有足够的空间,因为现在可用空间翻了一番……我希望
  • 删除并重新分区SDB
  • 将文件从 …

scripting linux partition bash hard-drive

4
推荐指数
1
解决办法
314
查看次数

如何在 Windows 7 中自动为 TCP/IPv4 和 TCP/IPv6 重新配置 DNS 服务器?

我需要将DNS 服务器配置的Internet 协议版本 4 (TCP/IPv4)和Internet 协议版本 6 (TCP/IPv6)设置从“自动获取 DNS 服务器地址”切换到硬编码值(对于 Google 的 DNS 服务器)并返回。手动执行有点麻烦(我需要转到Control Panel-Network 和 Internet-Network Connections,打开Wireless Network Connection 2,然后打开相应版本的Properties,输入 DNS 服务器值,然后重复另一个)。是否有可以自动化该过程的实用程序或脚本?谢谢。

automation domain-name-system scripting tcpip wifi

4
推荐指数
1
解决办法
1万
查看次数

使用 icacls 授予“所有子文件夹和文件”修改权限,但仅将读取权限授予顶级文件夹

我们的其中一台 Windows 服务器上有一些用户文件夹,但权限却很糟糕。我想要它SYSTEM并Domain Admins完全控制所有文件夹。我希望用户只读取顶级文件夹(这是他们的主文件夹)并修改所有子文件夹和文件。这可以通过 GUI 轻松完成,但我不知道如何编写脚本。

我从我的 PowerShell 脚本调用 icacls,因为 get-acl 和 set-acl 是主要的 PITA。如果我必须使用它们,我并不反对,但我想调用 icacls 会更容易。这是我必须到目前为止的相关代码:

icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)'
icacls.exe $folder /grant 'SYSTEM:(OI)(CI)(F)'
icacls.exe $folder /grant '$domain\domain admins:(OI)(CI)(F)'
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)'. 我无法弄清楚如何使修改仅适用于子文件夹和文件,同时将只读授予顶级文件夹。

所需的权限结构如下所示(只是为了清楚起见):

-Users  
--M  
---Marra (read only to me)  
----Documents (Modify)  
----Scripts(Modify)  
----Etc (Modify)  
Run Code Online (Sandbox Code Playgroud)

什么是正确的 icacls 语法,或者我如何使用 set-acl 在 PS 中进行本机操作?

scripting windows powershell file-permissions icacls

4
推荐指数
1
解决办法
7万
查看次数

检查 UNC 路径时,用于测试文件夹是否存在的批处理脚本失败

我编写了一个小批处理文件来帮助我们进行服务器迁移以使用 GPO 重新映射用户目录。

然而,在批处理文件中,我遇到了一个语法问题,但它仍然失败。这是我到目前为止所拥有的。

If exist "\\server\UserData\%username%"     
GOTO :UNMAP    
ELSE    
NET USE H: \\newserver\UserData\%USERNAME%    
:UNMAP    
NET USE H: /DELETE /Y    
NET USE H: \\newserver\UserData\%USERNAME%
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它时,我得到以下信息:

The syntax of the command is incorrect.
C:\>if exist "\\server\UserData\userfolder"
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题或我做错了什么吗?

scripting batch

4
推荐指数
1
解决办法
2万
查看次数

bash 变量用单引号扩展的问题

我有一个像这样构建的变量:

ATTSTR=""
for file in $LOCALDIR/*.pdf
do
  ATTSTR="${ATTSTR} -a \"${file}\""
done
Run Code Online (Sandbox Code Playgroud)

变量现在包含(注意文件名中的空格):

ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
Run Code Online (Sandbox Code Playgroud)

现在我想在这样的命令中使用这个变量:

mutt -s "Subject" "${ATTSTR}" recipient@example.ec
Run Code Online (Sandbox Code Playgroud)

但事实证明它像这样扩展,因此命令失败(注意扩展变量周围添加的单引号):

mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' recipient@example.ec
Run Code Online (Sandbox Code Playgroud)

我希望我的变量在没有单引号的情况下扩展,使用"$ATTSTR"或$ATTSTR只是更糟。我怎样才能做到这一点?

scripting linux bash

4
推荐指数
1
解决办法
5034
查看次数

如何检查人偶中是否存在用户?

我已经找到了一些可以检查变量是否具有特定值的示例

if $var == 'somevalue' {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果定义了某些东西

if defined(Package['somepackage']) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是如何检查用户是否存在,如果不存在则失败。知道如何使用脚本或 shell 测试的结果就足够了,因为这/usr/bin/id -u ${name} >/dev/null 2>&1就是我所需要的,即使检查用户目录是否存在也可以。

file并且exec不接受onlyif参数,否则这根本不是问题

scripting puppet

4
推荐指数
1
解决办法
7882
查看次数

Linux命令查找和删除某些文件,但输出结果或详细模式?

所以我在我的存储服务器上使用这些命令来清理一些垃圾,但它不会产生任何输出或结果。我在网上找到了语法,只是修改了我需要的文件。我还需要添加什么才能查看最后实际删除或总计的内容?最终这将是一个自动运行的脚本,但现在我正在手动运行命令。提前致谢!

find . -name .DS_Store -printf \"%p\"\ \  | xargs rm 
find . -name ._.DS_Store -printf \"%p\"\ \  | xargs rm 
find . -name Thumbs.db -printf \"%p\"\ \  | xargs rm
find . -name ._Thumbs.db -printf \"%p\"\ \  | xargs rm
Run Code Online (Sandbox Code Playgroud)

scripting linux bash

4
推荐指数
2
解决办法
9476
查看次数

在 Linux 机器上以 root 身份禁用 ssh 以及编写脚本的挑战

有安全意识的人通常建议在 Linux 机器上以 root 身份禁用 ssh。我的问题是这样的:

假设您通常编写大量脚本,这些脚本通过 ssh 连接到大量 Linux 机器并执行各种根级任务。如果您以 root 身份禁用 ssh,您如何进行需要 root 权限的日常维护?

当然, sudo 是一个选项,但是每次运行命令时都必须输入密码。如果您的脚本执行各种任务怎么办?如果您必须针对大量主机运行该脚本怎么办?

当然,您可以设置NOPASSWD 参数,但这不是存在安全风险吗?

只是在这里沉思。想得到社区的反馈。我正在寻找一种相对安全的方式来 ssh 到 Linux 机器并执行根级任务。

security scripting linux ssh sudo

4
推荐指数
1
解决办法
404
查看次数

bc:使用带有 bash 变量的“scale”

很容易,我正在编写一个脚本,它需要一些浮点后有 2 位数字的值。尝试使用bc我不明白如何使用“比例”,即

A=12 ; bc <<< $(($A/5))
Run Code Online (Sandbox Code Playgroud)

这是正确的,但添加“比例”会导致错误:

A=12 ; bc <<< 'scale=2;$(($A/5))'

(standard_in) 1: illegal character: $
(standard_in) 1: illegal character: $
Run Code Online (Sandbox Code Playgroud)

scripting linux shell bash

4
推荐指数
1
解决办法
3万
查看次数

Powershell 脚本计划任务不会结束

我想使用这个Powershell 脚本在 Win7 机器上自动进行一些备份。当从 Powershell 终端手动运行时,脚本按广告运行并在几秒钟后结束(这是一个小备份)。

问题是当我尝试使用任务计划程序自动化该过程时。时机成熟时(或当我手动运行任务时),脚本会运行并正确执行备份。但它并没有回到“就绪”状态,即使我知道它已经结束了。我每次都必须手动停止任务。

现在,我还没有等到任务再次运行时会发生什么,但我认为它不会第二次启动,因为它没有“准备好”。

我该怎么办?

更新1:

我选择的操作是“启动程序”。在“程序/脚本”框中,我有“powershell.exe”,作为参数,我有脚本“*.ps1”文件的路径。

更新1:

我注意到虽然任务没有返回“就绪”,但如果我手动启动它,它会再次运行。

scripting powershell windows-7

4
推荐指数
1
解决办法
9368
查看次数